CVE-2026-61569
WysokieCVSS 7.5Streszczenie
W AVideo przed wersją 8.1.0 nieuwierzytelnione logowanie streamera w `objects/login.json.php` przekazuje parametr `user` do `Streamer::get`, gdzie jest wstawiany do zapytania SELECT MariaDB w pojedynczych cudzysłowach bez parametryzacji lub escapowania. Mimo że `objects/security.php` usuwa literalne pojedyncze cudzysłowy, `html_entity_decode` w `objects/Login.php` przywraca zakodowane encjami cudzysłowy przed zapytaniem. Wyniki UNION są ujawniane przez `streamers_id`, a błędy zwracają zapytanie i komunikat błędu MariaDB. Luka jest naprawiona w wersji 8.1.0.
Ocena ryzyka
Atakujący może odczytać dowolne dane bazy kodera, w tym poświadczenia streamerów upstream, konfigurację listy dozwolonych i rekordy kolejki, bez poświadczeń kodera. Skradzione poświadczenia streamerów mogą zapewnić dalszy dostęp upstream do czasu ich rotacji.
Rekomendacja
Zaktualizuj AVideo do wersji 8.1.0 lub nowszej. Po aktualizacji rozważ rotację poświadczeń streamerów i sprawdzenie konfiguracji listy dozwolonych.
Inne podatności w AVideo
Zobacz wszystkie- CVE-2026-61575Średnie
W AVideo przed wersją 8.1.0 plik view/queue.php używa pathinfo na kontrolowanym przez wywołującego parametrze fileURI i zapisuje nazwę pliku przez setTitle w encoder_queue.title bez neutralizacji. fileURI nie jest objęty filtrami objects/security.php, a uprawnienie Login::canUpload() można nadać sobie samodzielnie, co pozwala atakującemu zapisać tytuł HTML, którego obsługa zdarzeń wykona się w przeglądarce uprzywilejowanego widza (administratora lub operatora tego samego streamera).
- CVE-2026-61573Średnie
W AVideo przed wersją 8.1.0 anonimowy interfejs logowania odzwierciedla wartości żądania w HTML i JavaScript bez kodowania wyjścia. Parametr webSiteRootURL jest zwracany bez zmian przez Streamer::getStreamerURL() i trafia do atrybutów nawigacji i formularzy oraz do ciągu JavaScript w view/index.header.php, a pola user i pass są filtrowane tylko pod kątem apostrofów, co pozwala na wyjście z atrybutów HTML. Dodatkowo view/index.header.php odzwierciedla pola POST przez json_encode bez JSON_HEX_TAG, a locale/function.php zapisuje w sesji wartość lang bez escapowania.
- CVE-2026-61572Wysokie
Podatność SSRF w AVideo (przed wersją 8.1.0) pozwala nieuwierzytelnionemu atakującemu na odczyt odpowiedzi z wewnętrznych usług HTTP/HTTPS oraz FTP. Funkcja `url_get_contents` nie blokuje adresów prywatnych, loopback ani link-local i wyłącza weryfikację certyfikatów TLS, a endpoint `objects/login.json.php` zwraca pobraną zawartość. Dodatkowo `view/youtubeDl.json.php` umożliwia żądania do wewnętrznych serwerów FTP.
- CVE-2026-61571Wysokie
W AVideo przed wersją 8.1.0 koder nie ma globalnej warstwy uwierzytelniania i udostępnia anonimowym wywołaniom sieciowym endpointy PHP sterowania i statusu. Endpointy `view/run.php`, `view/queue.json.php`, `view/status.php` i `view/listFiles.json.php` pozwalają nieuwierzytelnionemu atakującemu sterować procesorem kolejki, odczytywać informacje o kolejce i streamerach, uzyskiwać statystyki pamięci oraz wyliczać nazwy i ścieżki plików multimedialnych w dowolnym katalogu czytelnym dla użytkownika serwera WWW. Luka jest naprawiona w wersji 8.1.0.
- CVE-2026-89255Wysokie
AVideo do commita c3edcc274c389816d434acadac07ee78eaf330c1 zawiera podatność stored cross-site scripting w pluginie LoginControl, który nie koduje w HTML kluczy publicznych PGP wyświetlanych w elemencie textarea. Uwierzytelniony atakujący może wstrzyknąć złośliwy JavaScript, przesyłając spreparowany klucz publiczny, który wykonuje się w sesji administratora podczas przeglądania zakładki profilu użytkownika.
- CVE-2026-89253Wysokie
WWBN AVideo do commita c3edcc274c389816d434acadac07ee78eaf330c1 zawiera podatność stored cross-site scripting w polu profilu użytkownika 'donationLink'. Funkcja User::setDonationLink() przechowuje wartość, a save() waliduje ją tylko przez filter_var(..., FILTER_VALIDATE_URL), co akceptuje ciągi takie jak http://evil.example/"onmouseover=alert(document.domain)//, podczas gdy getDonationLink() stosuje jedynie strip_tags() i nie koduje cudzysłowów. Uwierzytelniony użytkownik aktualizujący własny profil może przerwać atrybut href i wstrzyknąć obsługę zdarzeń wykonującą JavaScript w przeglądarce każdego odwiedzającego, w tym administratora.
- CVE-2026-89250Wysokie
WWBN AVideo do commita c3edcc274c389816d434acadac07ee78eaf330c1 zawiera nieuwierzytelnioną podatność odczytu plików w endpointcie getRecordedFile.php, który strumieniuje nagrane pliki FLV z katalogu tymczasowego. Atakujący mogą wywołać endpoint ze znanym lub odgadniętym kluczem strumienia, aby pobrać nagrane pliki wideo na żywo bez uwierzytelnienia i kontroli autoryzacji.
- CVE-2026-89248Średnie
AVideo do commita c3edcc274c389816d434acadac07ee78eaf330c1 nie sprawdza uwierzytelnienia ani autoryzacji w pliku plugin/WebRTC/status.json.php. Gdy wtyczka WebRTC jest obecna, każdy nieuwierzytelniony użytkownik może uzyskać JSON zawierający ścieżkę do binarki WebRTC2RTMP, port, status pliku, zawartość logów oraz informację o osiągalności portu.
- CVE-2026-89245Średnie
WWBN AVideo do commita c3edcc274c389816d434acadac07ee78eaf330c1 zawiera podatność cross-site request forgery w pliku playlistRemove.php, która pozwala atakującym usuwać playlisty poprzez pominięcie kontroli CSRF. Atakujący może stworzyć złośliwy formularz wysyłający POST do playlistRemove.php.
- CVE-2026-89240Średnie
WWBN AVideo do commita c3edcc274c389816d434acadac07ee78eaf330c1 zawiera podatność reflected cross-site scripting w pliku plugin/Live/confirmLivePassword.php. Parametr GET u jest wstawiany bez kodowania do atrybutu src znacznika img, umożliwiając wstrzyknięcie dodatkowego znacznika z procedurą onerror.
Oryginalny opis (angielski, źródło NVD)
AVideo is a video-sharing Platform. Prior to 8.1.0, the unauthenticated streamer login at `objects/login.json.php` passes the `user` parameter to `Streamer::get` in `objects/Streamer.php`, where it is interpolated into a single-quoted MariaDB SELECT without parameterization or escaping. Although `objects/security.php` strips literal single quotes, `html_entity_decode` in `objects/Login.php` restores entity-encoded quotes before the query. The supplied `siteURL` must pass the streamer allowlist, which allows all sites when empty by default, and an attacker-hosted login response must set `canUpload` or `isAdmin` to reach `Streamer::createIfNotExists`. That function calls `Streamer::get` before its additional allowlist check. UNION results are exposed through `streamers_id`, while failures return the rendered query and MariaDB error. An attacker can read arbitrary encoder database data, including stored upstream streamer credentials, allowlist configuration, and queue records, without encoder credentials. Stacked statements are not permitted by the mysqli driver and the tested database account lacks global FILE privilege, so the demonstrated vector is bounded to reads rather than server-side file writes. Stolen streamer credentials can provide continued upstream access until rotated. This issue is fixed in version 8.1.0.
Dane podatności pochodzą z NVD (NIST) · CISA KEV · EPSS

