OPEN-WEBUI · CVE-2026-109286 · AI agents & MCP
FIX → 0.11.4
Open WebUI's community stats modal accepts unverified window messages from any origin and forwards the chat id unencoded into an authenticated request. A malicious website a signed-in user visits can make the browser fetch an authenticated endpoint and receive the response, including the user's bearer token.
first public Sep 27, 2026 · 2 sources
Could this affect your app?
Free first check from your website. Connect your repo for the full answer.
Deployments of Open WebUI from 0.7.0 up to but not including 0.11.4 with community sharing enabled (the default) are exposed when a signed-in user visits an attacker-controlled page. Deployments with ENABLE_COMMUNITY_SHARING disabled are not affected, and no attacker account is needed.
Not affected if community-sharing-disabled, version-0.11.4-or-later
Who cares open-webui, python, self-hosted
open-webui version against the affected range >= 0.7.0, < 0.11.4.ENABLE_COMMUNITY_SHARING is enabled (default True); deployments with it disabled are not affected.Upgrade to 0.11.4
The sync stats modal registered a window message listener that processed verify:chat messages from any web origin without checking event.origin, and replied to window.opener with target origin *. The chat id from the message was inserted into an authenticated request URL without encoding. Any external website that a signed-in user visits can therefore make that user's browser fetch a chosen authenticated endpoint and hand the response, including the user's session token, back to the attacker. No attacker account and no administrator action are required.
ENABLE_COMMUNITY_SHARING, default True), which is what mounts the sync stats modal and its message listener.The attacker page posts a verify:chat message carrying a path-traversal chat id such as . The listener passes it unencoded into , which the browser normalises to and sends with the victim's bearer token. The listener then posts the response back to the opener with target origin , so the attacker origin receives the victim's identity and raw JWT. That token replays from any client with only an header, granting full API access as the victim: private chats and any authenticated action under the victim's role. The demonstrated victim held the ordinary role.
Check it with your coding agent
It reads this page and tells you if your code is affected.
Are you affected?
Ask from here. InfraStack checks the affected versions against your stack and answers in your inbox.
InfraStack checks the affected versions against your stack and answers in Slack, with the evidence and the fix.
open-webui): upgrade to 0.11.4.../../../auths/GET /api/v1/chats/stats/export/<id>GET /api/v1/auths/*AuthorizationuserFixed in v0.11.4 by PR #29918. The listener now ignores any message whose event.origin is not one of the known community origins, replies only to that validated origin instead of *, and the chat id is passed through encodeURIComponent so it can no longer escape its URL path segment. Upgrading to 0.11.4 fully resolves the issue with no further configuration.
src/lib/components/chat/Settings/SyncStatsModal.svelte held a verify:chat message handler, and exportSingleChatStats in src/lib/apis/chats/index.ts built the request URL. The handler is mounted on every page whenever community sharing is enabled, so the listener was active even while the modal was hidden. The origin allowlist that already guarded the other community message handlers was absent here, and the chat id was concatenated into the path without encoding, so an attacker-chosen value could both be accepted from an untrusted origin and redirect the authenticated request to a different endpoint.
Reproduced against the vulnerable and fixed code in a two-origin browser harness. From an attacker origin, opening the target and repeatedly posting { type: 'verify:chat', data: { id: '../../../auths/' } } caused the target to issue GET /api/v1/auths/ carrying the victim's bearer token and to post the response back to the attacker origin, which then received the victim's email and JWT. Against the fixed code the message is rejected on the origin check and no request is made.
@zyakir13
This page as .md · .json · CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:P/VC:H/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
NVD data is provided by NIST and is public domain. Posts quoted belong to their authors.