CSIRTS // UNIFIED SECURITY ADVISORY FEEDSYS ● ONLINE · POWERED BY INTELFUSIONS.COM

GHSA-ffpj-xv5c-p3gw: Open WebUI: ReDoS in skill-mention regexes causes whole-instance DoS on default config

mediumCVSS 6.5CVE-2026-59220
Summary Two regexes in backend/open_webui/utils/middleware.py that parse <$skillId|label> skill-mention tags backtrack in O(n²) on input that contains <$ followed by a long run with no closing >. Both run synchronously, on the asyncio event loop, on every chat completion with no feature gate. Because the default deployment is a single uvicorn worker, one such input pins a CPU core inside re and freezes the entire instance for all users until the worker is killed. Any authenticated user can trigger it with one chat message; it also fires accidentally on benign retrieved content (a RAG chunk or tool output) containing the pattern. Affected versions = 0.9.2, < 0.10.0. Fixed in v0.10.0 (there is no 0.9.7 release). - SKILL_MENTION_RE (the extract pattern) has been O(n²) since v0.9.2; exploitable on 0.9.2–0.9.5 with a large input (hundreds of KB). - v0.9.6 added a second, far more aggressive O(n²) in the strip pattern (introduced by the "keep label as readable text" change), so on 0.9.6 a small input is enough to hang the instance. Both are fixed by the same patch. Affected component backend/open_webui/utils/middleware.py (line numbers as of v0.9.6): line 2223 — used by extract_skill_ids_from_messages(), called unconditionally (~line 2625) SKILL_MENTION_RE = re.compile(r'<\$([^|>]+)\|?[^>]*>') line 2247 — used by strip_skill_mentions(), called unconditionally (line 2662) strip_re = re.compile(r'<\$[^|>]+\|?([^>]*)>') extract_skill_ids_from_messages() runs before the if all_skill_ids: block (that guard gates only skill *injection*, not the regex), and strip_skill_mentions() runs with no guard at all. Neither requires a skill to exist or any setting to be enabled. Both functions are plain synchronous calls inside the async process_chat_payload coroutine, so they block the event loop; with the default UVICORN_WORKERS=1 (backend/start.sh) the whole instance stalls. Root cause [^|>] is a subset of [^>], so the quantifier pair [^|>]+ \|? [^>]* is ambiguous: on input that

Details

Source
GitHub Security Advisories (INTL · database · site)
Severity
medium — CVSS 6.5
Published
2026-07-24
Last updated
2026-07-24
Exploitation
Not in CISA KEV at last sync

Original advisory: https://github.com/advisories/GHSA-ffpj-xv5c-p3gw

Exploitation outlook

EPSS (FIRST.org) estimates each CVE’s probability of exploitation in the next 30 days — here is the CSIRTS.com read on those numbers.

Referenced CVEs

CVECSIRTS overviewExternal
CVE-2026-59220coverage & exploitation statusNVD · CVE.org

Same CVEs, other sources

How other CERTs, PSIRTs and databases cover the vulnerabilities in this advisory.

More from GitHub Security Advisories