CVE-2026-87011: Open WebUI Unauthenticated Requests Can Stall The Vulnerability
HIGHCVE-2026-87011 is a HIGH (CVSS 7.5) unauthenticated requests can stall the vulnerability (CWE-405: Asymmetric Resource Consumption (Amplification)) affecting Open WebUI libraries in the PyPI ecosystem. The issue involves unauthenticated requests can stall the server via uncached oidc fetches in back-channel logout. Remediation is available by upgrading affected packages to version 0.11.1.
CVE-2026-87011 at a Glance
Security Impact
CVSS: 7.5
The security impact metrics below are parsed directly from the CVSS v3.1 vector string (CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H).
How to Fix CVE-2026-87011
To remediate this vulnerability, upgrade all affected Open WebUI dependencies to a patched release. Both direct and transitive dependencies should be checked, as frameworks or security libraries may pull in vulnerable versions transitively.
pip install open-webui>=0.11.1
Run the following command in your project directory to verify that all resolved dependencies use the patched release:
pip show open-webui
How to Check if You Are Affected
To determine whether your Python environment is affected by CVE-2026-87011, inspect your installed packages using pip:
pip show open-webui
Analyze the terminal output to locate any version of Open WebUI in your dependency tree. If any resolved version matches the vulnerable ranges listed in the table below (for example, versions earlier than 0.11.1), your application is affected.
Note: The pip show open-webui command checks currently installed packages in your active Python environment.
Technical Details
Vulnerability Mechanism & Technical Analysis
This vulnerability is classified under CWE-405: Asymmetric Resource Consumption (Amplification), where the product does not properly control situations in which an adversary can cause the product to consume or produce excessive resources without requiring the adversary to invest equivalent work or otherwise prove authorization, i.e., the adversary's influence is "asymmetric.". In Open WebUI, software state validation or input boundaries are circumvented during processing. Review the official source advisory statement below for specific affected components, classes, and reproduction details.
Source Advisory Statement
CVE-2026-87011 Affected Open WebUI Versions
1 component(s)| Product / Package | Ecosystem | Affected Versions | Fixed Version |
|---|---|---|---|
|
open-webui
|
PyPI |
≥ 0.9.0
< 0.11.1
|
0.11.1
|
References
Frequently Asked Questions
What is CVE-2026-87011?
Which Open WebUI versions are affected?
What version fixes CVE-2026-87011?
Is open-webui affected?
What is the CVSS score of CVE-2026-87011?
What CWE is associated with CVE-2026-87011?
How can I check PyPI dependencies for CVE-2026-87011?
Machine-readable OSV JSON
OSV v1.5 Schema
{
"schema_version" : "1.4.0",
"id" : "GHSA-3g9q-v48f-hh9w",
"modified" : "2026-09-10T22:44:42Z",
"published" : "2026-09-10T22:44:42Z",
"aliases" : [ "CVE-2026-87011" ],
"summary" : "Open WebUI: Unauthenticated requests can stall the server via uncached OIDC fetches in back-channel logout",
"details" : "## Summary\n\nThe OIDC back-channel logout endpoint is unauthenticated by design, because the identity provider calls it without a browser session. Before checking whether the submitted logout token was genuine, the handler fetched the provider's discovery document and its signing keys over the network, and repeated both fetches on every request because nothing was cached. The signing-key fetch also ran as a blocking call inside the async event loop. A small number of requests carrying a worthless token was therefore enough to make the whole instance stop answering.\n\n## Preconditions\n\n- `ENABLE_OAUTH_BACKCHANNEL_LOGOUT=true`. The default is `False`, so a stock deployment is not affected. This setting is recommended in the Open WebUI hardening documentation, which is why the issue is treated as in scope.\n- At least one OIDC provider configured (`OAUTH_CLIENT_ID`, `OAUTH_CLIENT_SECRET`, `OPENID_PROVIDER_URL`).\n- No account, credential, session or secret identifier is required. The attacker needs network access to the instance and the configured issuer string, which is published in the provider's own discovery document.\n\n## Impact\n\nAgainst 0.11.0, with the identity provider answering in 150 ms, 60 concurrent requests carrying a token whose signature was four characters long stalled the async event loop for 8.3 seconds, measured against an idle baseline of 10.8 ms. For the length of that stall the process answers nothing: no chat requests, no API calls, no health check. Open WebUI runs a single worker by default, so the effect is instance-wide rather than per-connection, and no rate limit sits in front of the endpoint.\n\nThe same traffic is also amplified outward: 20 sequential requests produced 20 discovery fetches and 40 key-set fetches at the identity provider, so an attacker can drive load onto the provider through the instance.\n\nNo data is read, modified or exposed, and the forged token is still rejected. The cost is paid before the rejection.\n\n## Fix\n\nFixed in 0.11.1. The handler now resolves both the discovery document and the signing keys through the already-configured OAuth client, so each is fetched once per provider and reused afterwards, and both fetches are asynchronous rather than blocking the event loop. A token carrying no `kid` header is rejected before any key lookup happens. Upgrading is sufficient, and no configuration change is required.\n\n## Root cause\n\nAffected component: the OIDC back-channel logout handler in `backend/open_webui/utils/oauth.py`, reached through `POST /oauth/backchannel-logout`. Affected setups: releases 0.9.0 through 0.11.0 with back-channel logout enabled and an OIDC provider configured.\n\nThe handler treated its network work as cheap preparation rather than as work worth protecting. For every request it opened a new HTTP session per configured provider to re-read the discovery document, then constructed a fresh JWKS client, whose own cache consequently started empty each time, and asked that client for the signing key through a synchronous call issued directly on the event loop. All of this ran before the token signature was verified, so an attacker unable to produce a valid token still cost the server two network round trips and a blocked loop per request. Both fetches used the library default timeout of five minutes.\n\n## Proof of concept\n\nReproduced by running the unmodified handler from the 0.11.0 and 0.11.1 backends against a loopback identity provider that counted every inbound request and could answer with a configured delay. The submitted token carried a valid issuer and audience, a `kid` naming a key the provider does not hold, and `AAAA` as its signature.\n\n20 sequential requests, provider answering immediately:\n\n| Version | Discovery fetches | Key-set fetches | Response |\n| --- | --- | --- | --- |\n| 0.11.0 | 20 | 40 | 400 |\n| 0.11.1 | 1 | 1 | 400 |\n\n60 concurrent requests, provider answering in 150 ms:\n\n| Version | Wall time | Discovery fetches | Key-set fetches | Worst event-loop stall |\n| --- | --- | --- | --- | --- |\n| 0.11.0 | 18.6 s | 60 | 120 | 8255 ms |\n| 0.11.1 | under 0.01 s | 0 | 0 | none measurable |\n\nIdle event-loop stall was 10.8 ms in both cases. On 0.11.1 the first request an instance receives warms both caches, and every request after that reaches the signature check without any outbound network call.\n\n## Credits\n\n@galanko, for reporting the issue and identifying both the missing caching and the blocking call.",
"severity" : [ {
"type" : "CVSS_V3",
"score" : "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"
} ],
"affected" : [ {
"package" : {
"ecosystem" : "PyPI",
"name" : "open-webui"
},
"ranges" : [ {
"type" : "ECOSYSTEM",
"events" : [ {
"introduced" : "0.9.0"
}, {
"fixed" : "0.11.1"
} ]
} ],
"database_specific" : {
"last_known_affected_version_range" : "<= 0.11.0"
}
} ],
"references" : [ {
"type" : "WEB",
"url" : "https://github.com/open-webui/open-webui/security/advisories/GHSA-3g9q-v48f-hh9w"
}, {
"type" : "ADVISORY",
"url" : "https://nvd.nist.gov/vuln/detail/CVE-2026-87011"
}, {
"type" : "WEB",
"url" : "https://github.com/open-webui/open-webui/commit/aeda6ff13a25d3b3ba1b303609f35382db22142c"
}, {
"type" : "PACKAGE",
"url" : "https://github.com/open-webui/open-webui"
}, {
"type" : "WEB",
"url" : "https://github.com/open-webui/open-webui/releases/tag/v0.11.1"
} ],
"database_specific" : {
"cwe_ids" : [ "CWE-405", "CWE-770" ],
"severity" : "HIGH",
"github_reviewed" : true,
"github_reviewed_at" : "2026-09-10T22:44:42Z",
"nvd_published_at" : "2026-09-09T21:17:05Z"
}
}