CVE-2026-76836
WysokieCVSS 8.8Prawdopodobieństwo exploitacji (EPSS)
Niskie ryzykoPercentyl 25 - wyżej niż 25% 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-42606Wysokie
AzuraCast przed wersją 0.23.6 zawiera podatność w middleware ApplyXForwarded, który bezwarunkowo ufa nagłówkowi X-Forwarded-Host bez listy dozwolonych proxy. Nieuwierzytelniony atakujący może zatruć URL resetowania hasła, wysyłając spreparowany nagłówek podczas żądania resetu. Gdy ofiara kliknie link, token resetu jest przechwytywany przez atakującego, który może przejąć konto i zniszczyć konfigurację 2FA.
- CVE-2026-42605Wysokie
Podatność w AzuraCast przed wersją 0.23.6 umożliwia uwierzytelnionemu użytkownikowi z uprawnieniami do zarządzania mediami zapisanie dowolnych plików poza katalogiem magazynu stacji poprzez niesanitizowany parametr currentDirectory w punkcie końcowym przesyłania plików Flow.js. Może to prowadzić do zdalnego wykonania kodu przez zapisanie webshella PHP.
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.

