Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessSelf-grant canUpload via attacker-controlled login site
-
DeliverySubmit fileURI with HTML event-handler filename
-
ExploitPayload stored unsanitized in encoder_queue.title
-
ExecutionAdministrator opens encoder queue dashboard
-
PersistBootgrid title formatter renders title as raw HTML
-
ImpactScript executes in admin session, reads credentials and acts as admin
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 three concrete conditions. First, the attacker must submit a queue entry, which needs the Login::canUpload() capability; because fileURI is in no objects/security.php filter list and the capability can be self-granted by pointing the encoder's login at an attacker-controlled site (siteURL) that returns canUpload=true, no legitimate encoder credentials are needed. Second, the payload is placed in the filename component of fileURI (parsed by pathinfo, stored via setTitle into encoder_queue.title) and survives unneutralized. Third - the key limiting factor - a privileged viewer the attacker does not control must open the queue dashboard: Encoder::getAll restricts non-administrators to their own streamer's rows, so the victim must be an administrator (who sees all streamers' rows) or an operator on the attacker's own streamer. The reliably reachable sink is the jQuery Bootgrid #grid title formatter, which is triggered from encoder code alone; a second sink in the progress panel's .html() call additionally depends on a helper script loaded from the streamer platform, so it is less dependable. Exploitation is bounded by this need for a privileged viewer rather than any special server configuration. |
| Impact | This is a genuine but moderate-priority issue, not a drop-everything emergency. The CVSS 3.1 base score of 4.7 (AV:N/AC:H/PR:N/UI:R/S:C/C:L/I:L/A:N) reflects real friction: although PR:N is justified because the submitting capability (Login::canUpload()) can be self-granted against an attacker-controlled login site with no legitimate credentials, exploitation still requires a privileged viewer the attacker does not control (AC:H, UI:R) - an administrator who sees every streamer's rows, or an operator on the attacker's own streamer - to open the queue dashboard before the stored payload fires. The scope change (S:C) and C:L/I:L capture script execution in that victim's authenticated session. No CISA KEV entry and no EPSS score were provided, so there is no signal of active or widespread exploitation; the vuln.today decision label is 'this_month' (not act_now/emergency), consistent with a real-but-not-urgent stored XSS. A detailed public PoC is published in the GHSA advisory (a Python login stub plus curl commands), which raises practical exploitability above a theoretical finding. Net: prioritize patching on a normal cycle, weighted up because the victim is typically an administrator whose compromise is high-value, and weighted down by the dependence on an uncontrolled privileged viewer. |
| Exploit ScenarioDerived | An attacker points the encoder at their own login site that returns canUpload=true, self-granting the capability to submit a queue entry without real encoder credentials, then submits a fileURI whose filename component is an <img src=x onerror=...> payload that is stored verbatim in encoder_queue.title. When an administrator later opens the queue dashboard, the jQuery Bootgrid title formatter writes the stored title into the table cell as raw HTML, the image fails to load, and its onerror handler executes script in the administrator's authenticated session. A working public PoC demonstrating exactly this (self-grant, plant, and confirm via queue.json) is included in the GHSA advisory, though it is not packaged as a verified turnkey exploit. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 28, 2026
Stored DOM cross-site scripting in AVideo-Encoder (WWBN AVideo) prior to 8.1.0 lets an attacker plant an HTML title in an encoder queue entry that later executes as script in a privileged viewer's browser. The Login::canUpload() capability needed to submit a queue entry can be self-granted by pointing the encoder's login at an attacker-controlled site that returns canUpload=true, so no legitimate encoder credentials are required; the practical limit is that Encoder::getAll restricts non-administrators to their own streamer's rows, so the payload only fires for an administrator viewing the full queue or an operator on the attacker's own streamer. The GitHub security advisory publishes a proof-of-concept walkthrough (attacker login stub plus curl submission) and a public fix commit exists; no active exploitation is confirmed (CISA KEV) and the report carries a this_month priority label, consistent with a genuine but moderate-priority privilege-escalation-via-XSS issue rather than an emergency.
RemediationAI
Vendor-released patch: upgrade AVideo-Encoder to 8.1.0 (https://github.com/WWBN/AVideo-Encoder/releases/tag/v8.1.0), which incorporates commit d9b3446bec9b5daec4e248a54fc343c5fab081f7 adding an escapeHTML() helper that neutralizes the queue title and related fields in the #grid Bootgrid formatter and the progress-panel sinks. No separate workaround is documented in the advisory, and because the payload is persisted in encoder_queue.title it re-fires for every qualifying viewer until the row is removed - so after upgrading, audit and delete any queue entries whose titles contain HTML markup before administrators open the queue dashboard. Note that exploitation requires the attacker to be able to point the encoder login at an arbitrary siteURL to self-grant canUpload(); restricting that configuration path, where the deployment allows it, reduces the intake vector but does not repair the unescaped render sinks, so the 8.1.0 upgrade remains the complete fix.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
This is CWE-79 (improper neutralization of input during web page generation) with a stored, DOM-based twist spanning three layers of the encoder. At intake, view/queue.php applies pathinfo() to the caller-controlled fileURI and passes the filename component to setTitle(), which writes it verbatim into the encoder_queue.title column; fileURI appears in no objects/security.php filter list, and the only gate, Login::canUpload(), is satisfiable via an attacker-supplied siteURL login endpoint. At delivery, view/queue.json.php serializes rows from Encoder::getAll() with json_encode, preserving the raw title. At render, view/index.php initializes a jQuery Bootgrid table (#grid) against queue.json, and the title-column formatter concatenates row.title into cell markup and returns it; Bootgrid inserts a formatter's return value as raw cell HTML, so an <img onerror=...> payload becomes a live DOM node. A second sink, the progress panel's jQuery .html() call, uses the same title but additionally depends on a helper script loaded from the streamer platform, making the Bootgrid formatter the sink reachable from encoder code alone. The upstream fix commit d9b3446 introduces an escapeHTML() helper and applies it to title, name, status, hostname, format, id and related fields across both sinks, also switching some .html() writes to .text().
Know when PHP 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:H/PR:N/UI:R/S:C/C:L/I:L/A:N
PR:N because canUpload is self-grantable without real credentials; AC:H and UI:R because a privileged admin/operator outside attacker control must view the queue; S:C and C:L/I:L for script in the victim's session.
Primary rating from Vendor (github).
CVSS VectorVendor: github
Lifecycle Timeline
1DescriptionCVE.org
AVideo is a video-sharing Platform. Prior to 8.1.0, view/queue.php uses pathinfo on the caller-controlled fileURI and stores its filename through setTitle in encoder_queue.title without neutralization. fileURI is not in the objects/security.php filter lists, and the Login::canUpload() capability needed to submit a queue entry can be self-granted using an attacker-controlled login site without legitimate encoder credentials. view/index.php loads queue.json from view/queue.json.php into the #grid jQuery Bootgrid table; its title formatter concatenates row.title into raw cell HTML. An attacker can therefore store an HTML title whose event handler runs in a privileged viewer's browser. Encoder::getAll limits nonadministrators to their own streamer's rows, so the victim must be an administrator who sees all rows or an operator on the attacker's streamer. A second .html() sink in the progress panel uses the same title but additionally depends on a helper script loaded from the streamer; the Bootgrid sink is reachable from encoder code alone. The script can read session-visible data and rendered streamer credentials, act with the viewer's privileges, and execute again for each qualifying viewer until the row is removed. This issue is fixed in version 8.1.0.
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.
In PHP versions 7.1.x below 7.1.33, 7.2.x below 7.2.24 and 7.3.x below 7.3.11 in certain configurations of FPM setup it
sapi/cgi/cgi_main.c in PHP before 5.3.12 and 5.4.x before 5.4.2, when configured as a CGI script (aka php-cgi), does not
(1) boardData102.php, (2) boardData103.php, (3) boardDataJP.php, (4) boardDataNA.php, and (5) boardDataWW.php in Netgear
The '/common/download_agent_installer.php' script in the Quest KACE System Management Appliance 8.0.318 is accessible by
ProjectSend versions prior to r1720 are affected by an improper authentication vulnerability. Rated critical severity (C
Roundcube Webmail contains a critical PHP object deserialization vulnerability (CVE-2025-49113, CVSS 9.9) that allows au
Util/PHP/eval-stdin.php in PHPUnit before 4.8.28 and 5.x before 5.6.3 allows remote attackers to execute arbitrary PHP c
Palo Alto Networks PAN-OS management web interface contains an authentication bypass allowing unauthenticated attackers
Nagios XI version xi-5.7.5 is affected by OS command injection. Rated high severity (CVSS 8.8), this vulnerability is re
Nagios XI version xi-5.7.5 is affected by OS command injection. Rated high severity (CVSS 8.8), this vulnerability is re
The get_referers function in /opt/ws/bin/sblistpack in Sophos Web Appliance before 3.7.9.1 and 3.8 before 3.8.1.1 allows
The Backup Migration plugin for WordPress is vulnerable to Remote Code Execution in all versions up to, and including, 1
EUVD-2026-112545
NVD
CVE.org
GitHub
Exploit-DB