Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessQuery unauthenticated login_code oracle for server microtime
-
DeliveryBrute-force ~2^25 uniqid()-derived code space for known second
-
ExploitHit valid unexpired pairing code within 10-min window
-
ExecutionRedeem code at get.json.php login_code API
-
PersistObtain victim email + 1-year getUserHash credential
-
ImpactAuthenticate as victim, full account takeover
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A04:2025 - Cryptographic Failures
ASVS 5.0
V11 - Cryptography Cryptographic random values
|
| Exploitation Conditions | Exploitable against default AVideo deployments through commit c3edcc274c389816d434acadac07ee78eaf330c1 because plugin/API/set.json.php?APIName=login_code is reachable without authentication and leaks server microtime, and getRandomCode() in objects/functions.php uses uniqid()-derived pseudo-randomness. Limiting factors: the attacker must guess a code that exists only while a legitimate activation/login-pairing code is outstanding and unexpired (10-minute TTL), must align to the code's generation second and brute-force the residual ~2^25 space within that window (hence CVSS AC:H/AT:P), and success depends on a valid pairing code being live at the time of attack. No authentication, no user interaction, and no non-default configuration are required - only the timed probabilistic guess. |
| Impact | This is a genuine unauthenticated remote account-takeover primitive, but its real-world exploitability is meaningfully tempered by the attack complexity, which is why the vendor's CVSS 4.0 vector correctly carries AC:H and AT:P despite a 9.1 headline. The flaw is real and high-value: the CWE-330 weak PRNG (getRandomCode() built from uniqid()) collapses the code space to ~2^25 for a known generation second, and the design mistake of leaving plugin/API/set.json.php?APIName=login_code unauthenticated hands the attacker a microtime oracle that makes the 'known second' assumption practical rather than theoretical. Success yields both the target email and a User::getUserHash('+1 year') value accepted as a password substitute for a full year - a durable, high-integrity compromise. Against that, the attacker must win a probabilistic guess against a code that expires in 10 minutes, aligning microtime and brute-forcing the residual space within the window, so exploitation is a timed race rather than a single deterministic request (AT:P/AC:H). No EPSS score, no CISA KEV listing, and no public exploit code are present in the input; per the precision rules this is 'no public exploit identified at time of analysis.' There are no conflicting signals to flag beyond the tag nuance - the CVSS network vector matches the description, and prioritization should treat this as a real high-severity ATO bug on affected AVideo instances, with the important caveat that no patched version exists, so mitigation is compensating-control only. |
| Exploit ScenarioDerived | An unauthenticated attacker repeatedly calls plugin/API/set.json.php?APIName=login_code to read the server's exact microtime, then brute-forces the ~2^25 uniqid()-derived code space for a recently-generated, still-valid pairing code (10-minute TTL). Once a valid code is guessed, they redeem it at plugin/API/get.json.php?APIName=login_code to retrieve the victim's email and a one-year User::getUserHash credential, logging in as the victim. No public exploit code is identified at time of analysis. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Sep 17, 2026
Unauthenticated remote attackers can achieve account takeover in AVideo through commit c3edcc274c389816d434acadac07ee78eaf330c1 by guessing weakly generated activation/login pairing codes. The getRandomCode() function in objects/functions.php relies on uniqid() output, limiting the code space to roughly 2^25 values for a known generation second; the plugin/API/set.json.php?APIName=login_code endpoint leaks server microtime as an oracle, and a guessed valid code (10-minute TTL) redeemed at plugin/API/get.json.php?APIName=login_code yields the victim's email and a one-year User::getUserHash credential. No vendor patch is available and no public exploit code has been identified, though the weak PRNG and unauthenticated oracle make the attack a genuine account-takeover primitive tempered by high attack complexity (AC:H/AT:P) due to the timed probabilistic guess.
RemediationAI
No vendor-released patch is identified at time of analysis. As a compensating control, block or disable the login_code API endpoints at the web server or reverse proxy level (e.g., deny requests to plugin/API/set.json.php?APIName=login_code and plugin/API/get.json.php?APIName=login_code); the trade-off is that this disables account activation and login pairing features that rely on these codes. Implement strict rate limiting and monitoring on any remaining authentication endpoints to detect brute-force attempts, though this does not eliminate the weak PRNG. If custom development is possible, replace getRandomCode() with a CSPRNG such as random_bytes and increase the code length, then invalidate outstanding codes. Monitor logs for repeated failed code redemption attempts. Consult the vendor advisory at https://github.com/WWBN/AVideo/security/advisories/GHSA-v65f-hc7x-wj62 and the VulnCheck advisory at https://www.vulncheck.com/advisories/avideo-weak-prng-activation-code-authentication-bypass for updates.
Affected VersionsENISA
Affects your stack
Find out whether the stacks and servers you run are on an affected version.
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
AVideo is a PHP-based video sharing platform. The vulnerability class is CWE-330 (Use of Insufficiently Random Values). The getRandomCode() function in objects/functions.php generates codes using uniqid(), which returns sprintf('%08x%05x', seconds, microseconds), and appends a single non-CSPRNG rand() character for padding. This yields a code space of about 36 × 10^6 (~2^25) values when the generation second is known. The unauthenticated endpoint plugin/API/set.json.php?APIName=login_code can be called to leak the server's exact microtime, serving as an oracle that narrows the search space. Codes expire after 10 minutes, so an attacker must brute-force the residual space within that window and align to the code's generation second. Successful redemption at plugin/API/get.json.php?APIName=login_code returns 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. CPE cpe:2.3:a:wwbn:avideo:*:*:*:*:*:*:*:* applies to all versions through the referenced commit.
Know when Avideo gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
CVSS:4.0/AV:N/AC:H/AT:P/PR:N/UI:N/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N
Remote unauthenticated (AV:N/PR:N/UI:N); AC:H for the timed microtime alignment plus brute-force within a 10-min window; C:H (email+hash) and I:H (account takeover), no availability impact.
Primary rating from Vendor (VulnCheck).
CVSS VectorVendor: VulnCheck
DescriptionCVE.org
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.
Technical POC Analysis
CWE-330: use of insufficiently random values in a security context.
Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.
Executive ViewAI
AVideo deployments are exposed to a critical account-takeover vulnerability that could let attackers obtain victim email addresses and one-year User::getUserHash credentials, potentially compromising user accounts and platform integrity. Although no public exploit identified at time of analysis and no vendor-released patch identified at time of analysis, the lack of a patch means leadership should prioritize interim mitigations and monitoring. Affected users and administrators should be concerned because compromised credentials can enable unauthorized access, data exposure, and abuse of the video platform.
No vendor-released patch identified at time of analysis. Interim mitigations include restricting or disabling the plugin/API/set.json.php?APIName=login_code and plugin/API/get.json.php?APIName=login_code endpoints from untrusted networks, enforcing strict rate limiting and monitoring for enumeration attempts, shortening login_code TTL where possible, rotating User::getUserHash credentials, and hardening getRandomCode() to use a cryptographically secure PRNG.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.
A cross-site scripting (xss) vulnerability exists in the functiongetOpenGraph videoName functionality of WWBN AVideo 11.
An issue in WWBN AVideo v.12.4 through v.14.2 allows a remote attacker to execute arbitrary code via the systemRootPath
A directory traversal vulnerability exists in the unzipDirectory functionality of WWBN AVideo 11.6 and dev master commit
An insufficient entropy vulnerability exists in the salt generation functionality of WWBN AVideo dev master commit 15fed
Unauthenticated SQL injection in AVideo before 24.0.
OS injection vulnerability in World Wide Broadcast Network AVideo version before 12.4, allows attackers to execute arbit
A reflected cross-site scripting (xss) vulnerability exists in the charts tab selection functionality of WWBN AVideo 11.
A cross-site scripting (xss) vulnerability exists in the channelBody.php user name functionality of WWBN AVideo 11.6 and
A cross-site scripting (xss) vulnerability exists in the videoAddNew functionality of WWBN AVideo 11.6 and dev master co
An insufficient entropy vulnerability exists in the userRecoverPass.php recoverPass generation functionality of WWBN AVi
WWBN AVideo is an open source video platform. Rated high severity (CVSS 8.8), this vulnerability is remotely exploitable
AVideo is an open source video platform. Rated high severity (CVSS 8.8), this vulnerability is remotely exploitable, low
EUVD-2026-81435
GHSA-cv5x-3jv8-pgmr
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB