Skip to main content

Open WebUI EUVDEUVD-2026-52925

| CVE-2026-70493 MEDIUM
Inefficient Regular Expression Complexity (ReDoS) (CWE-1333)
2026-08-04 https://github.com/open-webui/open-webui GHSA-2f54-p244-32q6
6.5
CVSS 3.1 · Vendor: https://github.com/open-webui/open-webui
Share

Severity by source

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

Network-accessible via chat API requiring only basic authentication (PR:L); default configuration is sufficient (AC:L); impact is solely worker availability (A:H) with no confidentiality or integrity effect.

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

Lifecycle Timeline

2
Source Code Evidence Fetched
Aug 04, 2026 - 21:16 vuln.today
Analysis Generated
Aug 04, 2026 - 21:16 vuln.today

DescriptionCVE.org

Summary

The built-in knowledge search tools let a chat participant choose the pattern used to grep knowledge files. Patterns containing regex metacharacters were compiled with Python's backtracking re engine and run against every line of every reachable file, with no time limit anywhere on that path. A single crafted pattern and a single short line of matching text pin one CPU core for as long as the attacker wants, and because the search runs synchronously inside the event loop, that worker serves nobody else while it spins.

Preconditions

  • Default configuration. The knowledge builtin tool group is enabled by default, and with ENABLE_KB_EXEC at its default of False the model is handed grep_knowledge_files, which is the affected path.
  • Any authenticated user, no elevated role and no workspace permission.
  • One file the attacker can read. USER_PERMISSIONS_CHAT_FILE_UPLOAD defaults to true and a user always has read access to their own upload, so both halves of the input are attacker-supplied.
  • A model willing to call the tool with the attacker's literal pattern. This is the one non-deterministic step: it is reliable in practice by instructing the model in your own chat, but it is not guaranteed on a given turn.
  • Deployments running with UVICORN_WORKERS at its default of 1 lose the whole instance; multi-worker deployments lose one worker per request.

Impact

Availability, against every other user of the affected worker. Cost scales exponentially with the length of the matching text: measured on the vulnerable code, a 24 character subject takes 1.2s, 28 takes 19s and 30 takes 74s, and a 40 character subject extrapolates to roughly a day of CPU. The same subject against a literal pattern takes under a microsecond. There is no confidentiality or integrity effect, and no data is read or altered.

Fix

Fixed in 0.11.0 by https://github.com/open-webui/open-webui/pull/27471. Pattern matching moved from re to the regex engine, which supports a per-search timeout, and every tool call now runs its searches under a single 2 second matching budget, after which the tool returns an error instead of continuing to match. Upgrading is sufficient; there is nothing an operator has to configure.

Root cause

  • backend/open_webui/tools/knowledge_fs.py, build_matcher: compiled the caller's pattern and returned an unbounded match function.
  • backend/open_webui/tools/builtin.py, grep_knowledge_files: the default-configuration caller, which ran that matcher over every line of every reachable file.

build_matcher treated any pattern containing regex metacharacters as a regex, so no explicit flag was needed to reach the compiler. From there the only limits in place were on results, not on work: a cap on matches returned and a cap on files scanned, neither of which bounds the time a single line can consume. Backtracking cost is exponential in the length of the matched text rather than in the pattern, so capping pattern length or line length would not have bounded it either. The engine had no timeout available and none was imposed elsewhere.

Proof of concept

Against a real instance as an ordinary user:

  1. Upload a text file whose content is a single line of 30 x characters, and no y.
  2. In a chat on a model with the knowledge tools available, instruct the model to call grep_knowledge_files with the pattern (x|x)*y and that file's id.
  3. The request never returns. The worker's CPU sits at 100% for the duration, and concurrent requests from other users on the same worker do not complete.

Growth measured directly against build_matcher on the vulnerable code:

subject lengthtime
164.7ms
2073ms
241.21s
2819.3s
3073.9s

Credits

@Classic298, for the finding and the fix.

AnalysisAI

Catastrophic regex backtracking in Open WebUI 0.9.6-0.10.x allows any authenticated user to permanently stall a Uvicorn event-loop worker by supplying a crafted pattern to the built-in knowledge-search tool. The vulnerable grep_knowledge_files tool compiles attacker-supplied patterns with Python's unbounded re engine against attacker-uploaded file content, with no timeout anywhere on the execution path; a 30-character subject string measured at 74 seconds of CPU and a 40-character string extrapolates to roughly one day. No CISA KEV listing exists, but a complete proof-of-concept procedure is published in the GitHub security advisory GHSA-2f54-p244-32q6, making exploitation straightforward for any credential holder.

Technical ContextAI

Open WebUI is a self-hosted AI chat front-end distributed as the PyPI package open-webui (CPE: pkg:pip/open-webui). Its Python async backend runs under Uvicorn and exposes LLM tool-use capabilities including built-in knowledge-file search. The vulnerable path is backend/open_webui/tools/knowledge_fs.py (build_matcher) called by backend/open_webui/tools/builtin.py (grep_knowledge_files). When ENABLE_KB_EXEC is False (default), the model is handed grep_knowledge_files, which compiles the caller's pattern with Python's standard re module - a backtracking NFA with no timeout API. CWE-1333 (Inefficient Regular Expression Complexity) describes this class of flaw: ambiguous patterns such as (x|x)*y applied to a string that never satisfies the trailing y anchor cause exponential path exploration proportional to the length of the subject string, not the pattern. Capping pattern length or line length therefore provides no time bound. The fix in 0.11.0 replaces re with the third-party regex library (which exposes a per-search timeout parameter) and wraps each tool call in a MatchBudget context variable enforcing a 2-second aggregate matching budget, after which the tool returns an error.

RemediationAI

Upgrade to Open WebUI 0.11.0 or later; this is sufficient and requires no additional operator configuration. The patched release is available at https://github.com/open-webui/open-webui/releases/tag/v0.11.0, implemented via pull request https://github.com/open-webui/open-webui/pull/27471 (commit 3ab2026262ef6f09810e4d235c5f9a9cb903e595). If immediate upgrade is not possible, setting ENABLE_KB_EXEC=True routes the model to the kb_exec code path, bypassing the vulnerable grep_knowledge_files function - note this changes knowledge-search behavior and may expose different functionality, so test before deploying. Setting USER_PERMISSIONS_CHAT_FILE_UPLOAD=False removes the attacker's ability to supply attacker-controlled file content, breaking one of the two required attacker-controlled inputs, but disables file uploads for all users as a side effect. Increasing UVICORN_WORKERS above 1 limits the blast radius to one worker per concurrent attack request but does not prevent DoS if the attacker issues multiple requests in parallel.

More in Python

View all
CVE-2025-24016 CRITICAL POC
9.9 Feb 10

Wazuh SIEM platform versions 4.4.0 through 4.9.0 contain an unsafe deserialization vulnerability in the DistributedAPI t

CVE-2025-27520 CRITICAL POC
9.8 Apr 04

BentoML version 1.4.2 and earlier contains an unauthenticated remote code execution vulnerability through insecure deser

CVE-2025-2945 CRITICAL POC
9.9 Apr 03

pgAdmin 4 contains critical remote code execution vulnerabilities in the Query Tool download and Cloud Deployment endpoi

CVE-2013-5093 MEDIUM POC
6.8 Sep 27

The renderLocalView function in render/views.py in graphite-web in Graphite 0.9.5 through 0.9.10 uses the pickle Python

CVE-2025-32375 CRITICAL POC
9.8 Apr 09

BentoML is a Python library for building online serving systems optimized for AI apps and model inference. Rated critica

CVE-2014-0224 HIGH POC
7.4 Jun 05

OpenSSL before 0.9.8za, 1.0.0 before 1.0.0m, and 1.0.1 before 1.0.1h does not properly restrict processing of ChangeCiph

CVE-2024-21644 HIGH POC
7.5 Jan 08

pyLoad download manager version prior to 0.5.0b3.dev77 exposes the Flask SECRET_KEY through an unauthenticated endpoint.

CVE-2026-33017 CRITICAL POC
9.3 Mar 17

Langflow (a visual LLM pipeline builder) contains a critical unauthenticated code execution vulnerability (CVE-2026-3301

CVE-2017-9462 HIGH POC
8.8 Jun 06

In Mercurial before 4.1.3, "hg serve --stdio" allows remote authenticated users to launch the Python debugger, and conse

CVE-2026-49869 CRITICAL POC
10.0 Jun 26

Unauthenticated remote code execution affects Kestra OSS (the open-source event-driven orchestration platform) prior to

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-2024-21645 MEDIUM POC
5.3 Jan 08

pyLoad is the free and open-source Download Manager written in pure Python. Rated medium severity (CVSS 5.3), this vulne

Share

EUVD-2026-52925 vulnerability details – vuln.today

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