CVE-2026-70493: open-webui: ReDoS via knowledge search DoS
GHSA-2f54-p244-32q6 MEDIUM PoC AVAILABLE CISA: TRACK*Open WebUI's built-in knowledge search tool lets the chat model choose the regex pattern used to grep uploaded knowledge files, and because pattern compilation used Python's unbounded backtracking `re` engine with no timeout, a short crafted pattern against a short matching line can pin a CPU core for minutes to hours while the synchronous search blocks the event loop for every other user on that worker. This requires no special privileges beyond an ordinary account and a single self-uploaded file, and works reliably by simply instructing the model to call the tool with the attacker's pattern — the only non-deterministic step is model compliance, which the researcher reports as reliable in practice. Blast radius is worker-wide: default single-worker (`UVICORN_WORKERS=1`) deployments go fully unresponsive per attack, and this affects a package with 4 tracked downstream dependents and a public PoC with exact timing data (30-character subject = 74 seconds, extrapolating to ~1 day at 40 characters). There's no confidentiality or integrity impact and it isn't in CISA KEV, but SSVC flags it TRACK_STAR and the fix is a straightforward upgrade to open-webui 0.11.0, which caps every knowledge search under a 2-second matching budget using the `regex` engine's built-in timeout — patch on the normal cycle rather than as an emergency.
What is the risk?
Medium severity (CVSS 6.5, AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H) — availability-only impact with low exploitation complexity but requiring an authenticated account. EPSS is low in absolute terms (0.3%) but percentile-ranked in the top 77% of all scored CVEs, and a working PoC with reproducible timing data is public, which meaningfully increases the odds of opportunistic exploitation by any registered user, including low-trust or trial accounts. The attack needs no elevated role or workspace permission — default configuration (`ENABLE_KB_EXEC=False`, `USER_PERMISSIONS_CHAT_FILE_UPLOAD=True`) is sufficient, and a single crafted request can degrade or fully freeze an instance running the common single-worker default. Not in CISA KEV and no confirmed in-the-wild exploitation, but CISA SSVC rates it TRACK_STAR.
How does the attack unfold?
What systems are affected?
| Package | Ecosystem | Vulnerable Range | Patched |
|---|---|---|---|
| Open WebUI | pip | >= 0.9.6, < 0.11.0 | 0.11.0 |
Do you use Open WebUI? You're affected.
How severe is it?
What is the attack surface?
What should I do?
1 step-
Upgrade to open-webui >= 0.11.0, which replaces the unbounded
reengine withregexand enforces a 2-second matching budget on every knowledge-file search tool call — no operator configuration is required beyond upgrading. Until patched, consider disabling the knowledge builtin tool group or restrictingUSER_PERMISSIONS_CHAT_FILE_UPLOADfor untrusted/low-trust user tiers to reduce exposure, and run multipleUVICORN_WORKERSso a single stuck worker doesn't take down the whole instance. Detection: watch for sustained 100% CPU on a single worker process correlated withgrep_knowledge_filestool calls in application logs, and flag knowledge-search patterns containing nested quantifiers or alternation-with-repetition (e.g.,(x|x)*y-style constructs) as suspicious.
What does CISA's SSVC say?
Source: CISA Vulnrichment (SSVC v2.0). Decision based on the CISA Coordinator decision tree.
How is it classified?
Which compliance frameworks are affected?
This CVE is relevant to:
Frequently Asked Questions
What is CVE-2026-70493?
Open WebUI's built-in knowledge search tool lets the chat model choose the regex pattern used to grep uploaded knowledge files, and because pattern compilation used Python's unbounded backtracking `re` engine with no timeout, a short crafted pattern against a short matching line can pin a CPU core for minutes to hours while the synchronous search blocks the event loop for every other user on that worker. This requires no special privileges beyond an ordinary account and a single self-uploaded file, and works reliably by simply instructing the model to call the tool with the attacker's pattern — the only non-deterministic step is model compliance, which the researcher reports as reliable in practice. Blast radius is worker-wide: default single-worker (`UVICORN_WORKERS=1`) deployments go fully unresponsive per attack, and this affects a package with 4 tracked downstream dependents and a public PoC with exact timing data (30-character subject = 74 seconds, extrapolating to ~1 day at 40 characters). There's no confidentiality or integrity impact and it isn't in CISA KEV, but SSVC flags it TRACK_STAR and the fix is a straightforward upgrade to open-webui 0.11.0, which caps every knowledge search under a 2-second matching budget using the `regex` engine's built-in timeout — patch on the normal cycle rather than as an emergency.
Is CVE-2026-70493 actively exploited?
Proof-of-concept exploit code is publicly available for CVE-2026-70493, increasing the risk of exploitation.
How to fix CVE-2026-70493?
Upgrade to open-webui >= 0.11.0, which replaces the unbounded `re` engine with `regex` and enforces a 2-second matching budget on every knowledge-file search tool call — no operator configuration is required beyond upgrading. Until patched, consider disabling the knowledge builtin tool group or restricting `USER_PERMISSIONS_CHAT_FILE_UPLOAD` for untrusted/low-trust user tiers to reduce exposure, and run multiple `UVICORN_WORKERS` so a single stuck worker doesn't take down the whole instance. Detection: watch for sustained 100% CPU on a single worker process correlated with `grep_knowledge_files` tool calls in application logs, and flag knowledge-search patterns containing nested quantifiers or alternation-with-repetition (e.g., `(x|x)*y`-style constructs) as suspicious.
What systems are affected by CVE-2026-70493?
This vulnerability affects the following AI/ML architecture patterns: agent frameworks, RAG pipelines.
What is the CVSS score for CVE-2026-70493?
CVE-2026-70493 has a CVSS v3.1 base score of 6.5 (MEDIUM). The EPSS exploitation probability is 0.33%.
What is the AI security impact?
Affected AI Architectures
MITRE ATLAS Techniques
AML.T0029 Denial of AI Service AML.T0034.001 Resource-Intensive Queries AML.T0053 AI Agent Tool Invocation Compliance Controls Affected
What are the technical details?
Original Advisory
## 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 length | time | | -------------- | ----- | | 16 | 4.7ms | | 20 | 73ms | | 24 | 1.21s | | 28 | 19.3s | | 30 | 73.9s | ## Credits @Classic298, for the finding and the fix.
Exploitation Scenario
An attacker with an ordinary trial or low-privilege account uploads a short text file containing a single line such as 30 repeated `x` characters with no trailing `y`. In the same chat session, they instruct the AI assistant to run the knowledge search tool against that file using the regex pattern `(x|x)*y` — plausible phrasing like "search my uploaded file for pattern (x|x)*y" is often enough to get the model to pass the literal pattern through. The backend compiles the pattern with Python's backtracking `re` engine and evaluates it against the line synchronously inside the event loop; catastrophic backtracking pins that CPU core for over a minute (and scales exponentially with subject length), during which no other request on that worker — including other users' chats — completes. On a default single-worker deployment, this single request effectively takes the entire instance offline for the duration of the attack, and the attacker can repeat it at will or target every worker in a multi-worker deployment.
Weaknesses (CWE)
CWE-1333 Inefficient Regular Expression Complexity
Primary
CWE-1333 Inefficient Regular Expression Complexity CWE-1333 — Inefficient Regular Expression Complexity: The product uses a regular expression with a worst-case computational complexity that is inefficient and possibly exponential.
- [Architecture and Design] Use regular expressions that do not support backtracking, e.g. by removing nested quantifiers.
- [System Configuration] Set backtracking limits in the configuration of the regular expression implementation, such as PHP's pcre.backtrack_limit. Also consider limits on execution time for the process.
Source: MITRE CWE corpus.
CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H References
Timeline
Related Vulnerabilities
CVE-2026-44551 9.1 open-webui: LDAP auth bypass — full account takeover
Same package: open-webui CVE-2026-45672 8.8 open-webui: code exec gate bypass via API endpoint
Same package: open-webui CVE-2025-64495 8.7 Open WebUI: XSS-to-RCE via malicious prompt injection
Same package: open-webui CVE-2026-44552 8.7 open-webui: Redis cache poisoning enables cross-instance tool hijack
Same package: open-webui CVE-2026-45315 8.7 open-webui: stored XSS → JWT theft and admin takeover
Same package: open-webui