Servers and applications
GHSA-2qq6-qfcq-jmr9
Stored XSS in video Source tags allows uploader-to-admin privilege escalation
- Severity
- High 8.7
- Published
- 11 Nov 2026
- Last changed
- 11 Nov 2026
- Added to UpHeron
- 11 Nov 2026
- Weakness
- Cross-site scripting (CWE-79)
- Attack
- Over the network · Needs a user account · Needs someone to click or open something
- Attacker can
- Read data · Change data
- CVSS vector
CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:C/C:H/I:H/A:N- Sources
- Project advisories (GitHub)
Description
objects/aVideoEncoder.json.php calls inputToRequest() at line 36. This happens after videos/configuration.php has already run the global request filter in objects/security.php. inputToRequest() (objects/functions.php:7603-7617) json-decodes php://input and copies every key that is not yet in $_REQUEST into $_REQUEST without filtering it. videoDownloadedLink is on the $securityFilter list (objects/security.php:4, filter at :140-144), so a form-encoded value is HTML-escaped. The same field sent in an application/json body is stored raw.
The receiver stores it with Video::setVideoDownloadedLink() (objects/aVideoEncoder.json.php:239 -> objects/video.php:3699-3703), which does no validation. getVideoTagsSource() (objects/functionTags.php:198-221) later turns the stored URL into a "Source" tag whose text is parse_url($url)['host']. PHP's parse_url() accepts <, >, spaces, =, (, ) and quotes in the host.
Affected software
| Software | Affected versions |
|---|---|
AVideoServers and applications · github:wwbn/avideo |
|
References
- GitHub Advisory Database https://github.com/advisories/GHSA-2qq6-qfcq-jmr9
- github.com https://github.com/WWBN/AVideo/security/advisories/GHSA-2qq6-qfcq-jmr9