Skip to main content

Open WebUI CVE-2026-54018

| EUVDEUVD-2026-38525 HIGH
Server-Side Request Forgery (SSRF) (CWE-918)
2026-06-17 https://github.com/open-webui/open-webui GHSA-jrfp-m64g-pcwv
7.7
CVSS 3.1 · Vendor: https://github.com/open-webui/open-webui
View

Attack ChainAIDerived

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

  1. Recon
    Obtain low-priv Open WebUI account
  2. Delivery
    Stand up public redirector returning 302 to internal target
  3. Exploit
    Submit attacker URL via Web Search/URL Loader
  4. Install
    SafePlaywrightURLLoader validates only outer hostname
  5. C2
    Playwright follows redirect to 169.254.169.254 or internal service
  6. Execute
    Response (including IAM credentials) returned through RAG output
  7. Impact
    Pivot using stolen credentials or harvested internal data

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V4 - API and Web Service URL allowlisting, SSRF prevention
MITRE ATT&CK

2 techniques across 2 tactics: Initial Access, Credential Access

The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up.

Exploitation Conditions

Requires (1) an Open WebUI deployment at version <= 0.9.5 with RAG_WEB_LOADER_ENGINE=playwright explicitly configured - the default loader is not affected, (2) a low-privileged authenticated account (PR:L) able to submit a URL through the Web Search or URL Loader RAG feature, (3) outbound HTTP egress from the Open WebUI host so the headless browser can reach the attacker's redirector, and (4) at least one reachable internal target of value (cloud IMDS endpoint at 169.254.169.254, a co-located Docker/Kubernetes service, or an unauthenticated intranet admin panel). Exploitation is LIMITED by: ENABLE_RAG_LOCAL_WEB_FETCH=False is the default and is the very control being bypassed, so deployments that have disabled the URL Loader feature entirely or restricted it to admins are not exposed; no user interaction beyond the attacker's own submission is required (UI:N); the data exfiltration channel is whatever Open WebUI displays/indexes from the fetched page, so binary protocols or services that don't return HTTP-renderable content are harder to abuse.

Impact

The published CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:N/A:N (7.7 High) aligns with the technical facts: exploitation is network-reachable, low-complexity, and requires only a low-privileged authenticated Open WebUI account that can submit a URL to the Web Search / URL Loader feature; scope changes because the SSRF reaches services outside Open WebUI's security authority, and confidentiality impact is High due to potential theft of cloud IMDS credentials. Integrity and Availability are marked N, which is conservative - in practice the SSRF could enable unauthenticated POSTs to internal admin APIs, so real-world integrity impact may exceed the rated value. No EPSS score, KEV listing, or wider exploitation telemetry was provided, and no public exploit identified at time of analysis beyond the PoC in the advisory itself; real-world priority is moderate-to-high for any Open WebUI deployment that (a) runs in a cloud VM with IMDSv1, (b) shares a Docker/Kubernetes network with sensitive services, or (c) allows untrusted users to register accounts. Note that exploitation is gated by the non-default but commonly used RAG_WEB_LOADER_ENGINE=playwright setting; deployments using other loader engines are not affected by this specific code path.

Exploit ScenarioDerived

An attacker with any logged-in Open WebUI account stands up a public web server (e.g., http://attacker.example/) that returns HTTP 302 redirects to http://169.254.169.254/latest/meta-data/iam/security-credentials/ or to an internal container such as http://open-webui:8080/api/version. They submit that URL via the Web Search or URL Loader feature; Playwright validates only the attacker domain, then follows the redirect and fetches the internal resource, exposing the response body (and any IAM credentials) back through the RAG indexing/output flow. A functional PoC using Flask and Docker is published in the GHSA advisory.

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

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

Alert me

AnalysisAIv1 – Jun 18, 2026

SSRF protection bypass in Open WebUI's SafePlaywrightURLLoader (versions <= 0.9.5) allows authenticated users to access internal network resources by supplying an externally-hosted URL that returns an HTTP 301/302 redirect to a private address. Because Playwright's page.goto() automatically follows redirects without re-validating the destination, attackers can reach localhost, container-network peers, or cloud metadata endpoints (169.254.169.254) even when ENABLE_RAG_LOCAL_WEB_FETCH=False. A working PoC is published in the GHSA advisory; there is no public exploit identified at time of analysis being actively used, and no CISA KEV listing.

RemediationAI

Vendor-released patch: upgrade open-webui to 0.9.6 or later, which adds a Playwright page.route('**/*', ...) interceptor that re-runs validate_url for every request including redirects (see https://github.com/open-webui/open-webui/security/advisories/GHSA-jrfp-m64g-pcwv). If immediate upgrade is not possible, switch RAG_WEB_LOADER_ENGINE to a non-Playwright loader (e.g., the requests-based engine) which is not affected by this redirect-follow behavior, accepting the trade-off of losing JavaScript rendering for fetched pages. As compensating controls, restrict outbound egress from the Open WebUI container/VM via network policy or an egress proxy to block traffic to RFC1918 ranges, 127.0.0.0/8, and 169.254.169.254, force IMDSv2 on AWS hosts to require a session token the browser will not send, and limit Web Search / URL Loader use to trusted accounts via Open WebUI's RBAC; these mitigations reduce blast radius but do not close the SSRF in-process and may break legitimate internal-knowledge-base integrations.

Affected VersionsENISA

open-webui < 0.9.6

Affected Packages

pypi open-webui fix: 0.9.6

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in pypi

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 self-hosted Python web interface for LLM backends distributed via pip. Its Retrieval-Augmented Generation (RAG) feature lets users submit URLs to be fetched and indexed; the SafePlaywrightURLLoader is one of several configurable web-loader engines (selected via RAG_WEB_LOADER_ENGINE=playwright) and uses the Playwright headless-browser library to render JavaScript-heavy pages. The flaw is a classic CWE-918 (Server-Side Request Forgery) instance caused by Time-of-Check / Time-of-Use divergence: _safe_process_url_sync() resolves and validates only the user-supplied URL against a private-IP denylist, but the subsequent page.goto() call uses Playwright's default behavior of transparently following HTTP 3xx redirects, so a 302 from an attacker-controlled host pointing at 127.0.0.1, an internal container DNS name, or the cloud IMDS endpoint is fetched without revalidation. The recommended fix uses Playwright's page.route('**/*', interceptor) hook to re-run validate_url on every individual request the browser issues, including redirects.

Know when Docker gets its next vulnerability

  • 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

Vendor (https://github.com/open-webui/open-webui) PRIMARY 7.7 HIGH
AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:N/A:N
vuln.today AI 8.5 HIGH

Network-reachable feature requires a low-priv authenticated user (PR:L), no UI; SSRF crosses scope to internal services (S:C) with high confidentiality impact (IMDS creds) and low integrity from possible internal write requests.

3.1 AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:L/A:N
4.0 AV:N/AC:L/AT:N/PR:L/UI:N/VC:L/VI:N/VA:N/SC:H/SI:L/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
Low
User Interaction
None
Scope
Changed
Confidentiality
High
Integrity
None
Availability
None

DescriptionCVE.org

Summary

The SafePlaywrightURLLoader implements a validate_url function to prevent SSRF attacks by checking the IP address of the user-provided URL. However, this validation is performed only on the initial URL.

Since Playwright automatically follows HTTP redirects (301/302) by default, an attacker can bypass the validation by providing a safe URL that redirects to a restricted internal network address (e.g., localhost, Docker container network, or Cloud Metadata).

This allows the application to access internal services despite ENABLE_RAG_LOCAL_WEB_FETCH being set to False

Details

Root Cause

The application validates the initial user-provided URL using self._safe_process_url_sync(url). This correctly resolves the domain and ensures it does not point to a private IP.

The application then calls page.goto(url). By default, Playwright automatically follows HTTP redirects (301/302).

The Bypass: If the destination server returns a redirect to an internal IP (e.g., 127.0.0.1 or 169.254.169.254), the browser follows it without re-validating the new destination. The initial validation is bypassed because it only checked the first URL, not the entire redirect chain.

python
for url in self.urls:
    try:
        self._safe_process_url_sync(url)
        page = browser.new_page()
        response = page.goto(url, timeout=self.playwright_timeout)  #this
        if response is None:
            raise ValueError(...)
        text = self.evaluator.evaluate(page, browser, response)

PoC

(This PoC uses Docker to easily demonstrate internal network access (accessing a container by service name). However, the vulnerability is NOT tied to Docker.)

  1. Ensure the Open WebUI is configured with the following environment variables. The vulnerability is specific to the Playwright engine.
  2. ENABLE_RAG_LOCAL_WEB_FETCH=False (Default)
  3. RAG_WEB_LOADER_ENGINE=playwright
  4. Setup and run attack server
  5. In Open WebUI, use the "Web Search" or "URL Loader" feature.
  6. Input the attacker's URL (e.g., http://attacker-ip/).
python
# attack_server.py
from flask import Flask, redirect
app = Flask(__name__)

@app.route('/')
def attack():
# Redirect to the Open WebUI container's internal port
    return redirect("http://open-webui:8080/api/version", code=302)

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=80)

<img width="580" height="192" alt="image" src="https://github.com/user-attachments/assets/4600dbb5-a81d-4e58-b787-afe04fe59d6e" />

The Playwright browser follows the redirect to the internal address (http://open-webui:8080/api/version)

Impact

+ Cloud Environments: Access to Instance Metadata Service (IMDS) to steal cloud credentials. + Intranet/On-Premise: Scanning internal networks and accessing unauthenticated internal tools. + Container Environments: Accessing other containers within the same network.

Recommended Patch

implement a request interceptor using Playwright's page.route. This ensures all requests, including redirects, are validated before connection.

apply the following logic to both lazy_load and alazy_load methods:

python
# async context
async def intercept_route(route):
    try:
        await run_in_threadpool(validate_url, route.request.url)
        await route.continue_()
    except Exception:
        await route.abort()

await page.route("**/*", intercept_route)
response = await page.goto(url, timeout=self.playwright_timeout)

Executive ViewAI

Why It Matters

Open WebUI versions 0.9.5 and earlier contain an authenticated vulnerability allowing authorized users to bypass network isolation controls and access internal infrastructure, including cloud credential endpoints. This exposes organizations to lateral movement and data exfiltration by trusted users or through compromised accounts. Immediate assessment of user access permissions and interim network protections are required pending vendor remediation.

Business Impact: High
Compensating Controls

Implement network segmentation via firewall or container orchestration policies to block egress from Open WebUI containers to cloud metadata endpoints (169.254.169.254) and internal network ranges; disable ENABLE_RAG_LOCAL_WEB_FETCH if RAG functionality is not operationally required; monitor application logs for suspicious HTTP redirect patterns to private addresses; restrict Open WebUI access to required personnel only and enforce strong access controls.

Threat Intelligence Overview

EPSS Score
0.3%
Top 79% exploitable
Threat Intel
1
1 sources
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.3%
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
Partial

Priority Score

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

Attack Technique

Server-Side Request Forgery exploits applications that fetch remote resources based on user-supplied URLs.

More in Docker

View all
CVE-2024-55964 CRITICAL POC
9.8 Mar 26

An issue was discovered in Appsmith before 1.52. Rated critical severity (CVSS 9.8), this vulnerability is remotely expl

CVE-2019-5736 HIGH POC
8.6 Feb 11

runc through version 1.0-rc6 (used in Docker before 18.09.2) contains a container escape vulnerability that allows attac

CVE-2023-32077 HIGH POC
7.5 Aug 24

Netmaker makes networks with WireGuard. Rated high severity (CVSS 7.5), this vulnerability is remotely exploitable, no a

CVE-2026-39987 CRITICAL POC
9.3 Apr 08

Unauthenticated remote code execution in Marimo ≤0.20.4 allows attackers to execute arbitrary system commands via the `/

CVE-2023-5815 HIGH POC
8.1 Nov 22

The News & Blog Designer Pack - WordPress Blog Plugin - (Blog Post Grid, Blog Post Slider, Blog Post Carousel, Blog Post

CVE-2026-66384 MEDIUM POC
5.3 Aug 12

Path traversal in JFrog Artifactory (CWE-22) enables an authenticated low-privilege user to write data outside the inten

CVE-2014-9357 CRITICAL
10.0 Dec 16

Docker 1.3.2 allows remote attackers to execute arbitrary code with root privileges via a crafted (1) image or (2) build

CVE-2026-52806 CRITICAL POC
9.9 Jun 23

Remote code execution in Gogs through 0.14.2 allows authenticated users (and unauthenticated attackers on default-config

CVE-2025-14707 HIGH POC
8.9 Dec 15

Unauthenticated remote command injection in SGWBOX N3 firmware 2.0.25 lets attackers execute arbitrary operating-system

CVE-2026-56274 HIGH POC
8.7 Jun 23

Remote code execution in Flowise before 3.1.2 allows any authenticated user (or API caller with chatflow view/update per

CVE-2026-34156 CRITICAL POC
9.9 Mar 30

Remote code execution in NocoBase Workflow Script Node (npm @nocobase/plugin-workflow-javascript) allows authenticated l

CVE-2019-15752 HIGH POC
7.8 Aug 28

Docker Desktop Community Edition before 2.1.0.1 allows local users to gain privileges by placing a Trojan horse docker-c

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