<?xml version='1.0' encoding='UTF-8'?>
<?xml-stylesheet href="/static/style.xsl" type="text/xsl"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
  <id>https://vulnerability.circl.lu/rss/recent/all/10</id>
  <title>Most recent entries from all</title>
  <updated>2026-10-02T21:42:28.246059+00:00</updated>
  <author>
    <name>Vulnerability-Lookup</name>
    <email>info@circl.lu</email>
  </author>
  <link href="https://vulnerability.circl.lu" rel="alternate"/>
  <generator uri="https://lkiesow.github.io/python-feedgen" version="1.0.0">python-feedgen</generator>
  <subtitle>Contains only the most 10 recent entries.</subtitle>
  <entry>
    <id>https://vulnerability.circl.lu/vuln/cve-2026-54014</id>
    <title>CVE-2026-54014 — Open WebUI: Sibling-Prefix Path Traversal via /cache/{path} in open-webui/open-webui</title>
    <updated>2026-10-02T21:42:28.249114+00:00</updated>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml"><p><strong>Affected:</strong> open-webui</p>
<p>Open WebUI is a self-hosted artificial intelligence platform designed to operate entirely offline. Prior to 0.9.6, a path traversal vulnerability exists in open-webui's cache file serving endpoint that allows any authenticated user to read files from sibling directories outside the intended cache directory, by exploiting an incomplete startswith containment check that lacks a trailing path separator. The root cause is that serve_cache_file() in open_webui/main.py validates the resolved path with file_path.startswith(os.path.abspath(CACHE_DIR)) — without appending os.sep. This allows any path resolving to a sibling directory whose name begins with cache (e.g. cache_sibling, cache_backup, cached_models) to pass validation. This vulnerability is fixed in 0.9.6.</p></div>
    </content>
    <link href="https://vulnerability.circl.lu/vuln/cve-2026-54014"/>
  </entry>
  <entry>
    <id>https://vulnerability.circl.lu/vuln/ghsa-j2c8-v969-8r5c</id>
    <title>GHSA-j2c8-v969-8r5c — Open WebUI: Sibling-Prefix Path Traversal via /cache/{path}</title>
    <updated>2026-10-02T21:42:28.249264+00:00</updated>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml"><p><strong>Affected:</strong> PyPI: open-webui</p>
<p>## Summary</p>
<p>A path traversal vulnerability exists in open-webui's cache file serving endpoint that allows any authenticated user to read files from sibling directories outside the intended cache directory, by exploiting an incomplete `startswith` containment check that lacks a trailing path separator.</p>
<p>The root cause is that `serve_cache_file()` in `open_webui/main.py` validates the resolved path with `file_path.startswith(os.path.abspath(CACHE_DIR))` — without appending `os.sep`. This allows any path resolving to a sibling directory whose name begins with `cache` (e.g. `cache_sibling`, `cache_backup`, `cached_models`) to pass validation.</p>
<p>Deep traversal and absolute paths are correctly blocked. The bypass is narrow but confirmed — limited to sibling-prefix directories.</p>
<p>### Exploitation constraints</p>
<p>| Constraint | Detail |
|---|---|
| Auth required | `get_verified_user` — any user with role `user` or `admin` |
| Scope | Only sibling directories starting with `cache` (e.g. `cache_backup`, `cached_models`) |
| Deep traversal | Blocked — `../../etc/passwd` correctly fails the startswith check |
| Absolute paths | Blocked — `/etc/passwd` correctly fails |
| Client normalization | httpx/browsers normalize `..` client-side — must use raw HTTP or ASGI to deliver payload |</p>
<p>## Vulnerability Details</p>
<p>### Vulnerable function: `serve_cache_file()`</p>
<p>```python
# open_webui/main.py, line 2907-2924
@app.get('/cache/{path:path}')
async def serve_cache_file(path: str, user=Depends(get_verif…</p></div>
    </content>
    <link href="https://vulnerability.circl.lu/vuln/ghsa-j2c8-v969-8r5c"/>
  </entry>
</feed>
