CVE-2026-92913: AVideo Weak PRNG Activation Code Authentication Bypass
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=logincode 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=logincode to obtain the target account's email address and a User::getUserHash(usersid, '+1 year') value, a credential accepted in place of the account password for one year, resulting in account takeover. No patched version is available.
Affected Software
Event History
Frequently Asked Questions
Does exploiting this require an existing account or user interaction?
No. The login-code creation endpoint can be called without authentication, and an unauthenticated remote attacker can redeem a guessed valid, unexpired code.
What does an attacker obtain after successfully redeeming a code?
The attacker receives the target account's email address and a User::getUserHash(users_id, '+1 year') value. That value is accepted in place of the account password for one year, enabling account takeover.
How narrow is the window for exploiting a generated code?
Activation and login pairing codes expire after 10 minutes. The unauthenticated code-generation endpoint can reveal the server's exact microtime, which helps an attacker narrow guesses for a known generation second.
Is a patched AVideo version available?
No patched version is available according to the provided advisory information.