CVE-2026-76836
WysokieCVSS 8.8Prawdopodobieństwo exploitacji (EPSS)
Niskie ryzykoPercentyl 34 - wyżej niż 34% wszystkich znanych CVE
Streszczenie
AzuraCast udostępnia pola konfiguracji Liquidsoap przez punkt końcowy, który nie wymaga uprawnień do ich ochrony. Właściwość backend_config w Station.php jest oznaczona jako GROUP_GENERAL, a punkt końcowy PUT /api/station/{station_id}/profile/edit deserializuje z tą grupą, wymagając tylko uprawnienia StationPermissions::Profile. Metoda fromArray() przypisuje wszystkie publiczne właściwości bez sprawdzania uprawnień na poziomie pola, więc pola custom_config_top, custom_config, custom_config_pre_playlists, custom_config_pre_live, custom_config_pre_fade i custom_config_bottom są zapisywalne. ConfigWriter::writeCustomConfigurationSection() emituje te wartości dosłownie do skryptu .liq, gdzie funkcje process.run() i process.exec() wykonują polecenia systemu operacyjnego po restarcie backendu, co automatycznie wyzwala wbudowane zadanie synchronizacji. Dedykowany punkt końcowy dla tych danych wymaga uprawnień StationPermissions::Broadcasting, więc menedżer stacji z tylko uprawnieniem profilu może uzyskać konfigurację, która powinna być dostępna tylko dla operatorów transmisji.
Ocena ryzyka
Ryzyko obejmuje nieautoryzowaną modyfikację konfiguracji Liquidsoap, co może prowadzić do wykonania dowolnych poleceń systemowych i przejęcia serwera.
Rekomendacja
Zaleca się natychmiastową aktualizację AzuraCast do najnowszej wersji oraz ograniczenie uprawnień do profilu tylko dla zaufanych użytkowników.
Inne podatności w AzuraCast
Zobacz wszystkie- CVE-2026-100857Wysokie
AzuraCast przed wersją 0.23.4 zawiera podatność wstrzykiwania kodu w metodzie ConfigWriter::cleanUpString(), która nie sanitizuje sekwencji interpolacji Liquidsoap. Uwierzytelnieni użytkownicy z uprawnieniami Media lub Profile mogą wstrzyknąć dowolny kod Liquidsoap do konfiguracji stacji, co prowadzi do wykonania poleceń powłoki jako użytkownik azuracast przy restarcie stacji.
- CVE-2026-100856Wysokie
AzuraCast przed wersją 0.23.6 zawiera podatność wstrzykiwania kodu w polu hasła zdalnego przekaźnika z powodu niepełnej migracji z podatnej metody cleanUpString do toRawString. Atakujący z uprawnieniami RemoteRelays mogą wstrzyknąć zagnieżdżoną składnię interpolacji Liquidsoap, aby wykonać dowolny kod w procesie Liquidsoap, ujawnić wewnętrzne klucze API lub zakłócić działanie stacji.
- CVE-2026-100855Średnie
AzuraCast przed wersją 0.23.6 zawiera brak sprawdzenia uprawnień w punkcie końcowym GET /api/station/{station_id}/file/{id}/play, co pozwala uwierzytelnionym użytkownikom na pobieranie plików multimedialnych z dowolnej stacji. Atakujący mogą enumerować pliki za pomocą sekwencyjnych identyfikatorów i eksfiltrować całą bibliotekę multimediów stacji, do których nie mają uprawnień.
- CVE-2026-100854Średnie
AzuraCast przed wersją 0.23.6 nie stosuje middleware RequireInternalConnection na punkcie końcowym API Liquidsoap i błędnie wyprowadza flagę AutoDJ z obecności nagłówka, a nie z jego zweryfikowanej wartości. Użytkownicy z uprawnieniem View station mogą wstrzykiwać dowolne metadane now-playing, zakłócać transmisje na żywo i ujawniać ścieżki systemu plików.
- CVE-2026-100853Średnie
W AzuraCast przed wersją 0.23.8 publiczny punkt końcowy pobierania On-Demand nie weryfikuje kontroli dostępu na poziomie playlisty, co pozwala nieuwierzytelnionym użytkownikom na pobieranie plików multimedialnych wykluczonych z playlist z włączonym On-Demand. Atakujący mogą ominąć zamierzone ograniczenia dostępu, bezpośrednio żądając mediów za pomocą prawidłowych identyfikatorów, ujawniając prywatne lub zastrzeżone treści audio.
- CVE-2026-100852Wysokie
Podatność na wstrzykiwanie poleceń w AzuraCast przed wersją 0.23.8, występująca w generowaniu konfiguracji Liquidsoap dla nagrań na żywo. Brak odpowiedniego cytowania nazwy użytkownika streamera w wywołaniach process.run.
- CVE-2026-100851Wysokie
AzuraCast przed wersją 0.23.8 zawiera podatność uszkodzonej kontroli dostępu w endpointcie GET /api/station/{id}/vue/profile, która umożliwia uwierzytelnionym użytkownikom z uprawnieniem View Station Page odczytanie haseł administratora, źródła i przekaźnika Icecast/Shoutcast. Atakujący z dostępem tylko do podglądu może wywołać ten endpoint i otrzymać jawne poświadczenia frontendu w odpowiedzi JSON, a następnie użyć hasła administratora do uwierzytelnienia w interfejsie administracyjnym Icecast bez uprawnień Broadcasting.
- CVE-2026-100850Wysokie
AzuraCast przed wersją 0.23.8 zawiera podatność na fałszowanie żądań po stronie serwera (SSRF) i odczyt lokalnych plików w funkcji pobierania zdalnej playlisty AutoDJ (getMediaFromRemoteUrl()). Użytkownik z uprawnieniami Media może utworzyć playlistę z source=remote_url i remote_type=playlist, wskazując na ścieżkę file:// lub wewnętrzny adres HTTP. Gdy AutoDJ buduje kolejkę, backend przekazuje URL bezpośrednio do file_get_contents() bez listy dozwolonych schematów ani polityki IP, co umożliwia odczyt plików hosta (np. /etc/passwd lub .env) i treści wewnętrznych żądań HTTP. Brak dostępnej wersji z poprawką w momencie publikacji.
- CVE-2026-100849Wysokie
AzuraCast przed wersją 0.23.8 zawiera podatność SSRF w walidacji URL webhooka. Walidacja odrzuca tylko adresy IP link-local, ale nie blokuje adresów loopback ani prywatnych, a nazwy hostów niebędące adresami IP całkowicie omijają sprawdzenie. Użytkownik z uprawnieniami WebHooks może skonfigurować webhook wskazujący na wewnętrzne zasoby i wywołać żądanie HTTP POST z danymi Now Playing.
- CVE-2026-100848Wysokie
AzuraCast przed wersją 0.23.8 zawiera podatność SSRF w walidacji URL Remote Relay. Walidacja sprawdza tylko składnię URL i schemat http/https, bez ograniczeń dotyczących hosta lub adresu IP. Użytkownik z uprawnieniami RemoteRelays może ustawić URL wskazujący na loopback, sieć prywatną lub adresy metadata chmury, a automatyczna synchronizacja Now Playing będzie wysyłać żądania do tych adresów.
Oryginalny opis (angielski, źródło NVD)
AzuraCast exposes the Liquidsoap custom configuration fields through an endpoint that does not require the permission guarding them. The backend_config property in backend/src/Entity/Station.php is annotated with GROUP_GENERAL, and PUT /api/station/{station_id}/profile/edit in backend/src/Controller/Api/Stations/ProfileEditController.php deserializes with that group while requiring only StationPermissions::Profile. AbstractArrayEntity::fromArray() then assigns every public property with no field-level permission check, so custom_config_top, custom_config, custom_config_pre_playlists, custom_config_pre_live, custom_config_pre_fade and custom_config_bottom are writable through it. ConfigWriter::writeCustomConfigurationSection() emits those values verbatim into the generated Liquidsoap .liq script, where the process.run() and process.exec() built-ins execute operating system commands when the backend restarts, which the built-in sync task triggers automatically once needs_restart is set. The dedicated endpoint for the same data, PUT /api/station/{id}/liquidsoap-config, requires StationPermissions::Broadcasting, so a station manager holding only the profile permission reaches configuration that the intended boundary reserves for broadcasting operators.
Dane podatności pochodzą z NVD (NIST) · CISA KEV · EPSS

