Severity by source
AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H
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.
Primary rating from Vendor (https://github.com/open-webui/open-webui).
CVSS VectorVendor: https://github.com/open-webui/open-webui
Lifecycle Timeline
2DescriptionCVE.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_EXECat its default ofFalsethe model is handedgrep_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_UPLOADdefaults 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_WORKERSat 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:
- Upload a text file whose content is a single line of 30
xcharacters, and noy. - In a chat on a model with the knowledge tools available, instruct the model to call
grep_knowledge_fileswith the pattern(x|x)*yand that file's id. - 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 length | time |
|---|---|
| 16 | 4.7ms |
| 20 | 73ms |
| 24 | 1.21s |
| 28 | 19.3s |
| 30 | 73.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.
Wazuh SIEM platform versions 4.4.0 through 4.9.0 contain an unsafe deserialization vulnerability in the DistributedAPI t
BentoML version 1.4.2 and earlier contains an unauthenticated remote code execution vulnerability through insecure deser
pgAdmin 4 contains critical remote code execution vulnerabilities in the Query Tool download and Cloud Deployment endpoi
The renderLocalView function in render/views.py in graphite-web in Graphite 0.9.5 through 0.9.10 uses the pickle Python
BentoML is a Python library for building online serving systems optimized for AI apps and model inference. Rated critica
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
pyLoad download manager version prior to 0.5.0b3.dev77 exposes the Flask SECRET_KEY through an unauthenticated endpoint.
Langflow (a visual LLM pipeline builder) contains a critical unauthenticated code execution vulnerability (CVE-2026-3301
In Mercurial before 4.1.3, "hg serve --stdio" allows remote authenticated users to launch the Python debugger, and conse
Unauthenticated remote code execution affects Kestra OSS (the open-source event-driven orchestration platform) prior to
Unauthenticated remote code execution in Marimo ≤0.20.4 allows attackers to execute arbitrary system commands via the `/
pyLoad is the free and open-source Download Manager written in pure Python. Rated medium severity (CVSS 5.3), this vulne
Same technique Denial Of Service
View allShare
External POC / Exploit Code
Leaving vuln.today
EUVD-2026-52925
GHSA-2f54-p244-32q6