CVE-2026-92913
WysokieCVSS 7.4Streszczenie
AVideo do commita c3edcc274c389816d434acadac07ee78eaf330c1 używa kryptograficznie słabego generatora liczb pseudolosowych do tworzenia kodów aktywacji konta i parowania logowania. getRandomCode() w objects/functions.php opiera się głównie na uniqid(), co ogranicza przestrzeń kodów do około 36 x 10^6 wartości dla znanej sekundy generacji, a nieuwierzytelniony atakujący może odgadnąć ważny kod i uzyskać dostęp do konta.
Ocena ryzyka
Nieuwierzytelniony atakujący może odgadnąć kod logowania i uzyskać adres e-mail ofiary oraz wartość User::getUserHash ważną przez rok, co prowadzi do przejęcia konta. Brak dostępnej wersji z poprawką zwiększa ryzyko.
Rekomendacja
Brak dostępnej wersji z poprawką — rozważ wyłączenie lub ograniczenie dostępu do plugin/API/set.json.php?APIName=login_code oraz plugin/API/get.json.php?APIName=login_code. Monitoruj nietypowe użycie kodów logowania i wdroż dodatkowe uwierzytelnianie.
Inne podatności w AVideo
Zobacz wszystkie- CVE-2026-92586Średnie
AVideo do wersji 29.0 nie weryfikuje uprawnień dostępu do wideo w funkcji set_api_comment, co pozwala uwierzytelnionym użytkownikom dodawać komentarze do filmów chronionych hasłem lub ograniczonych dla grup. Atakujący mogą wysyłać żądania POST do punktu końcowego API komentarzy z dowolnymi identyfikatorami wideo.
- CVE-2026-92584Średnie
AVideo do wersji 29.0 zawiera podatność na trwały cross-site scripting (XSS). Nieuwierzytelniony punkt końcowy zliczania wyświetleń zapisuje User-Agent atakującego bezpośrednio do bazy danych, a następnie jest on renderowany bez escapowania na stronie statystyk właściciela wideo i administratora, co pozwala na wykonanie złośliwego kodu w ich sesjach.
- CVE-2026-92583Średnie
AVideo do wersji 29.0 zawiera wyścig w funkcji enforceRateLimit(), która nie atomowo zwiększa liczników ograniczeń, co pozwala atakującym ominąć wszystkie limity, w tym ochronę przed brute-force na logowanie, poprzez wysyłanie równoczesnych żądań. Atakujący mogą przekroczyć limit 30 prób na 5 minut dowolną liczbę razy.
- CVE-2026-92581Średnie
W AVideo do wersji 29.0, konstruktor Like::__construct() wykonuje operacje arytmetyczne na surowych wartościach żądań przed walidacją, co pozwala na desynchronizację przechowywanych głosów od liczników. Uwierzytelnieni atakujący mogą wysyłać parametry typu tablicowego, aby doprowadzić liczniki polubień do dowolnie niskich wartości, a uszkodzenie utrzymuje się do ręcznej naprawy.
- CVE-2026-92578Wysokie
WWBN AVideo do wersji 29.0 zawiera podatność obejścia uwierzytelniania, w której przechowywany hash hasła jest akceptowany jako prawidłowe poświadczenie logowania przez dwie niezależne ścieżki kodu w loginFromRequest() i encryptPasswordVerify(). Atakujący, który uzyska wartość przechowywanego hasha users.password, może uwierzytelnić się jako dowolny użytkownik, przesyłając hash bezpośrednio do endpointów logowania, całkowicie omijając weryfikację hasła.
- CVE-2026-92577Wysokie
W AVideo do wersji 29.0 endpoint API get_api_video zawiera podatność złamanej kontroli dostępu w gałęzi clean_title, która zwraca filmy ograniczone do grup użytkowników wraz z danymi osobowymi właściciela anonimowym wywołującym. Atakujący mogą odpytywać filmy po ich publicznym slug, aby obejść ograniczenia grupowe i uzyskać wrażliwe pola użytkownika, w tym email, telefon, adres, datę urodzenia i status administratora.
- 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.
Oryginalny opis (angielski, źródło NVD)
AVideo through commit c3edcc274c389816d434acadac07ee78eaf330c1 uses a cryptographically weak pseudo-random number generator when creating account activation / login pairing codes. getRandomCode() in objects/functions.php derives the code entirely from uniqid() (sprintf('%08x%05x', seconds, microseconds)) with a single non-CSPRNG rand() character used only as padding, reducing the code space to roughly 36 x 10^6 (~2^25) values for a known generation second. Because plugin/API/set.json.php?APIName=login_code can be called without authentication, it also serves as an oracle for the server's exact microtime. An unauthenticated remote attacker who guesses a valid, unexpired code (codes expire after 10 minutes) can redeem it at plugin/API/get.json.php?APIName=login_code to obtain the target account's email address and a User::getUserHash(users_id, '+1 year') value, a credential accepted in place of the account password for one year, resulting in account takeover. No patched version is available.

