Skip to main content

Open WebUI EUVDEUVD-2026-38536

| CVE-2026-54007 HIGH
Origin Validation Error (CWE-346)
2026-06-17 https://github.com/open-webui/open-webui GHSA-3vv5-8xxp-4f55
7.1
CVSS 4.0 · Vendor: https://github.com/open-webui/open-webui
Share

Severity by source

Vendor (https://github.com/open-webui/open-webui) PRIMARY
7.1 HIGH
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:P/VC:N/VI:H/VA:N/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X
vuln.today AI
7.4 HIGH

Remote attacker page (AV:N) needs no auth (PR:N) but requires victim click (UI:R); cross-origin abuse changes security scope (S:C); integrity-only impact via forced actions (I:H, C/A:N).

3.1 AV:N/AC:L/PR:N/UI:R/S:C/C:N/I:H/A:N
4.0 AV:N/AC:L/AT:N/PR:N/UI:P/VC:N/VI:H/VA:N/SC:N/SI:N/SA:N

Primary rating from Vendor (https://github.com/open-webui/open-webui).

CVSS VectorVendor: https://github.com/open-webui/open-webui

Attack Vector
Network
Attack Complexity
Low
Privileges Required
None
User Interaction
P
Scope
X

Lifecycle Timeline

6
Analysis Updated
Jun 23, 2026 - 18:36 vuln.today
v3 (cvss_changed)
Analysis Updated
Jun 23, 2026 - 18:35 vuln.today
v2 (cvss_changed)
Re-analysis Queued
Jun 23, 2026 - 18:22 vuln.today
cvss_changed
CVSS changed
Jun 23, 2026 - 18:22 NVD
7.1 (HIGH)
Source Code Evidence Fetched
Jun 18, 2026 - 01:30 vuln.today
Analysis Generated
Jun 18, 2026 - 01:30 vuln.today

DescriptionCVE.org

Summary

The chat message listener allows non-same-origin input:prompt and action:submit messages, so an external site can set prompt text and trigger submitPrompt() in an authenticated victim session. I validated this with a cross-origin attacker page that auto-posted messages and caused unauthorized POST /api/v1/chats/new and POST /api/chat/completions requests containing attacker-controlled prompts. This enables cross-site forced actions and model/tool execution under victim privileges without consent.

Details

The chat page's window message listener in src/lib/components/chat/Chat.svelte processes message types including input:prompt and action:submit without adequately enforcing same-origin restrictions. Based on code around lines ~597-616, input text is set directly from event.data.text; action:submit proceeds to submitPrompt() on the current prompt. The logic does not apply a strict origin allowlist and permits non-same-origin control of the chat input and submission flow, leading to cross-origin command execution in the victim's authenticated UI context. As a result, backend API calls (e.g., POST /api/v1/chats/new, POST /api/chat/completions) are sent under victim credentials.

Normally, via the input:prompt:submit postMessage type, this results in a "Confirm Prompt from Embed" confirmation dialog:

https://github.com/open-webui/open-webui/blob/9bd84258d09eefe7bf975878fb0e31a5dadfe0f8/src/lib/components/chat/Chat.svelte#L604-L622

However, combining the two other types, it is possible to achieve the same effect without this confirmation:

https://github.com/open-webui/open-webui/blob/9bd84258d09eefe7bf975878fb0e31a5dadfe0f8/src/lib/components/chat/Chat.svelte#L584-L602

PoC

  1. Set up a local Open WebUI instance and log in to it, making sure a model is configured
  2. Host the following HTML anywhere and visit it (optionally change http://127.0.0.1:14000 to your instance Base URL):
html
<h1>Click anywhere</h1>
<script>
  function sleep(ms) {
    return new Promise(r => setTimeout(r, ms));
  }

  onclick = async () => {
    w = window.open('http://127.0.0.1:14000');
    await sleep(2000);
    w.postMessage({ type: 'input:prompt', text: "INJECTED PROMPT" }, '*');
    await sleep(500);
    w.postMessage({ type: 'action:submit' }, '*');
  }
</script>
  1. Click anywhere on the page, then notice without further interaction the "INJECTED PROMPT" is executed on the Open WebUI instance

<img width="874" height="264" alt="image" src="https://github.com/user-attachments/assets/244d9015-0dbf-47e0-a30e-1c2fbbde5e58" />

Impact

Conditions required: The victim must be authenticated to Open WebUI in the browser (token cookie present).

This issue enables cross-site forced actions under the victim's identity. An attacker can silently inject prompts and trigger model/tool execution (e.g., code interpreter, web search, retrieval, terminal/tool servers) as the victim without confirmation.

Original Agent Report

<img width="400" alt="app aikido dev_ai-pentests_projects_116389_assessments_019d67d4-81c8-7dd2-bb9e-0a4a774b2c78_issues_sidebarIssue=20439940 (4)" src="https://github.com/user-attachments/assets/7b6521ed-d08b-446d-a918-103523d08a1e" />

AnalysisAI

Cross-origin postMessage abuse in Open WebUI versions <= 0.9.5 allows an attacker-controlled web page to inject and auto-submit prompts into an authenticated victim's chat session without the normal 'Confirm Prompt from Embed' dialog. By chaining the input:prompt and action:submit window message types, a remote site triggers backend calls to /api/v1/chats/new and /api/chat/completions under the victim's credentials. Publicly available exploit code exists in the GitHub Security Advisory, though it is not listed in CISA KEV.

Technical ContextAI

Open WebUI is a Python-packaged (pkg:pip/open-webui) self-hosted browser interface for interacting with LLMs and tool servers. The chat UI is built on Svelte; src/lib/components/chat/Chat.svelte registers a window message event listener that dispatches on event.data.type without validating event.origin against an allowlist. This is a textbook CWE-346 (Origin Validation Error): while the input:prompt:submit branch shows a confirmation modal, the separate input:prompt and action:submit branches do not, so combining them bypasses the consent gate and lets any opener/iframe drive submitPrompt() in the victim's authenticated DOM context.

RemediationAI

Vendor-released patch: Open WebUI 0.9.6 - upgrade via pip install --upgrade open-webui (or the equivalent container image bump) per the advisory at https://github.com/open-webui/open-webui/security/advisories/GHSA-3vv5-8xxp-4f55. If immediate upgrade is not possible, restrict browser-side exposure by placing the instance behind a reverse proxy that sets Cross-Origin-Opener-Policy: same-origin and Cross-Origin-Embedder-Policy: require-corp to break attacker window.open handles, and a strict Content-Security-Policy frame-ancestors 'none' to block iframing - note this will break any legitimate embed integrations. Instruct users to log out of Open WebUI when not actively using it and to avoid browsing untrusted sites in the same browser profile; network-level mitigations (binding the listener to localhost or an internal VLAN) reduce but do not eliminate risk because the attacker page runs inside the victim's own browser.

Share

EUVD-2026-38536 vulnerability details – vuln.today

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