Katalog CVE

CVE-2026-76836

WysokieCVSS 8.8
Opublikowano: Zaktualizowano: Przetłumaczono: NVD NIST

Prawdopodobieństwo exploitacji (EPSS)

Niskie ryzyko
0.33%

Percentyl 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
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