Open WebUI: SSRF into internal services via DNS rebinding in the Playwright web loader
## Summary With the Playwright web loader enabled, Open WebUI checks the address behind a user-submitted URL before allowing the request, then handed the request to the browser to perform. The browser resolved the hostname a second time, on its own, and that answer was never checked. An attacker who controls the authoritative DNS for a hostname they submit can answer the first lookup with a public address and the second with an internal one, so the browser connects to an address the check exists to block. The connection-layer pinning that protects the other fetch paths could not apply here, because the request ran inside the browser rather than through our own HTTP clients. ## Preconditions - `WEB_LOADER_ENGINE=playwright`. This is not the default, and deployments on the default web loader are unaffected. - A reachable Playwright browser, either local or via `PLAYWRIGHT_WS_URL`. - Any authenticated user who can submit a URL for ingestion or trigger a web search. No administrator role is required. - Control of the authoritative DNS for a hostname the attacker submits, serving a short TTL and alternating answers. No timing race is needed, because the two lookups are separate queries the attacker answers differently. - Internal services the browser process can actually reach. A deployment whose browser has no route to internal addresses loses nothing here. ## Impact An authenticated user can make the server read HTTP responses from addresses only it can reach: cloud instance met
PYSEC-2026-4120
Primary source · Revision 2
Imported from structured advisory data. Source references identify upstream records or fields; verify affected versions and your deployed configuration.
Security context
Source reference: osv:PYSEC-2026-4120
open-webui
Source reference: /affected/0/package/name
- Affected versions
- 0.10.0
Source reference:
/affected/0/versions0.10.1Source reference:
/affected/0/versions0.10.2Source reference:
/affected/0/versions0.11.0Source reference:
/affected/0/versions0.9.6Source reference:
/affected/0/versions - Fixed versions
- 0.11.1
Source reference:
/affected/0/ranges - Prerequisites
- Not stated in this record
Structured affected-version data
Original package identities and version rules from this source.
[
{
"ranges": [
{
"type": "ECOSYSTEM",
"events": [
{
"introduced": "0.9.6"
},
{
"fixed": "0.11.1"
}
]
}
],
"package": {
"name": "open-webui",
"purl": "pkg:pypi/open-webui",
"ecosystem": "PyPI"
},
"versions": [
"0.10.0",
"0.10.1",
"0.10.2",
"0.11.0",
"0.9.6"
],
"database_specific": {
"source": "https://github.com/pypa/advisory-database/blob/main/vulns/open-webui/PYSEC-2026-4120.yaml"
}
}
]- Related CVEs
- CVE-2026-87996
Source reference:
/aliases
Publisher severity
No explicit severity was provided.
- Event
- #62583 · Revision 2
- Added to Heist Feed
- Publisher date