WWBN AVideo
CVE-2026-41061
MEDIUM
Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
ReconAuthenticate with upload-capable account
-
DeliverySubmit crafted duration via encoder receiver endpoint
-
ExploitBypass unanchored regex validation
-
InstallPayload persisted to database
-
C2Victim browses trending, playlist, or gallery page
-
ExecuteInjected JavaScript executes in victim browser
-
ImpactSession tokens or credentials exfiltrated
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V1 - Encoding and Sanitization Output encoding, context-aware escaping
MITRE ATT&CK
2 techniques across 2 tactics: Initial Access, Execution The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Exploitation requires an authenticated account with video upload permission on the target AVideo instance (CVSS PR:L); unauthenticated exploitation is not possible. The attacker submits the malicious duration via the encoder receiver endpoint at objects/aVideoEncoderReceiveImage.json.php:208 using the $_REQUEST['duration'] parameter. Payload execution additionally requires a victim to visit a page that renders the injected video's duration - specifically the trending page (view/trending.php), a playlist page (view/include/playlist.php), or a video gallery thumbnail view (CVSS UI:R). Exploitation is limited by: (1) the need for an upload-capable account, making open-registration instances higher risk than invite-only deployments; (2) the requirement for victim browsing of affected pages; (3) the absence of Content-Security-Policy does not add any limitation but its presence on a patched instance would have reduced impact. SSVC confirms the attack is not automatable, meaning bulk targeted campaigns are impractical. |
| Impact | The CVSS 3.1 score of 5.4 Medium accurately models this vulnerability's constrained exploitation path: network delivery and low complexity are offset by required authenticated access (PR:L) and mandatory victim interaction (UI:R), both of which significantly limit blast radius versus a fully unauthenticated XSS. The Scope:Changed metric correctly reflects that JavaScript executes in a victim's browser context separate from the server. EPSS at 0.03% (8th percentile) indicates very low observed exploitation probability consistent with the SSVC finding of Automatable:no - mass automated exploitation is infeasible because each attack requires an authenticated upload account plus a second victim browsing the affected pages. SSVC Technical Impact:partial aligns with the limited C:L/I:L CVSS impact ratings. No CISA KEV listing confirms the absence of known active exploitation. The POC documented in GHSA-8pv3-29pp-pf8f elevates risk for targeted attacks, particularly where AVideo instances allow registrations from untrusted users and administrators regularly browse trending or playlist views. Overall this is a genuine but operationally constrained risk, not a mass-exploitation scenario. |
| Exploit ScenarioDerived | An authenticated AVideo user with upload permission submits a duration value of 00:00:01</time><img src=x onerror=alert(document.cookie)><time> via the $_REQUEST['duration'] parameter at objects/aVideoEncoderReceiveImage.json.php:208. The value bypasses isValidDuration() due to the missing end anchor and is persisted to the database. When any subsequent user - including site administrators - visits the trending page, a playlist, or a video gallery, the injected tag breaks out of the <time> element and the onerror handler fires, exfiltrating session cookies to an attacker-controlled host. The GitHub Security Advisory contains a partial proof-of-concept confirming this flow. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Jul 24, 2026
Stored XSS in WWBN AVideo 29.0 and below allows authenticated uploaders to inject persistent JavaScript payloads via a malformed video duration field that bypasses input validation due to a missing regex end anchor. The crafted payload is stored in the database and rendered unescaped across trending, playlist, and gallery thumbnail pages, enabling session hijacking or credential theft against any visiting user including administrators. A proof-of-concept is documented in the GitHub Security Advisory; however, EPSS probability is very low (0.03%, 8th percentile) and no CISA KEV listing confirms active exploitation.
RemediationAI
Apply upstream fix commit bcba324644df8b4ed1f891462455f1cd26822a45 (https://github.com/WWBN/AVideo/commit/bcba324644df8b4ed1f891462455f1cd26822a45) directly, as no tagged release version has been confirmed in the composer package registry (fixed in: None per package data). The commit implements three layered defenses: it adds a $ end anchor and optional decimal-seconds suffix to the isValidDuration() regex, it modifies getCleanDuration() to reconstruct duration strings from parsed numeric parts rather than returning the raw stored string, and it wraps all output sinks in view/trending.php and view/include/playlist.php with htmlspecialchars(..., ENT_QUOTES, 'UTF-8'). As a compensating control pending patch deployment, restrict video upload permissions to trusted accounts only - this eliminates the PR:L attacker foothold entirely. Adding a Content-Security-Policy header such as script-src 'self' reduces XSS execution impact but does not prevent malicious data storage. Existing database records with injected duration values may remain dangerous until cleaned; the patched getCleanDuration() provides runtime defense against already-stored payloads.
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in composer
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
AVideo (CPE: cpe:2.3:a:wwbn:avideo:*:*:*:*:*:*:*:*) is a PHP-based open-source video platform. The root cause (CWE-79: Improper Neutralization of Input During Web Page Generation) arises from two compounding defects. First, the isValidDuration() function at objects/video.php:918 uses the regex /^[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}/ which anchors the start with ^ but omits the $ end anchor, so a payload like 00:00:01</time><img src=x onerror=alert(1)><time> passes validation because the leading HH:MM:SS is matched and trailing content is silently ignored. Second, getCleanDuration() at line 3480 explodes the string on colons and, when 3 or more parts are found, returns the full unsanitized string unmodified. Callers in view/trending.php:72, view/include/playlist.php:159, and gallery thumbnail generation code echo this result directly into HTML without htmlspecialchars(). The application uses raw PHP templates with no auto-escaping framework and sets no Content-Security-Policy headers, leaving no secondary defense against XSS execution.
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
AV:N/AC:L/PR:L/UI:R/S:C/C:L/I:L/A:N
Requires authenticated upload access (PR:L) and victim page visit (UI:R); scope changes because XSS executes in the victim browser context outside the server.
Primary rating from Vendor (github).
CVSS VectorVendor: github
DescriptionCVE.org
WWBN AVideo is an open source video platform. In versions 29.0 and below, the isValidDuration() regex at objects/video.php:918 uses /^[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}/ without a $ end anchor, allowing arbitrary HTML/JavaScript to be appended after a valid duration prefix. The crafted duration is stored in the database and rendered without HTML escaping via echo Video::getCleanDuration() on trending pages, playlist pages, and video gallery thumbnails, resulting in stored cross-site scripting. Commit bcba324644df8b4ed1f891462455f1cd26822a45 contains a fix.
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
Cross-Site Scripting occurs when an application accepts untrusted data and sends it to a web browser without proper validation or encoding.
Affected Products (CPE)CVE.org
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
NVD
CVE.org
EPSS
Vulnrichment
GitHub
Exploit-DB