<?xml version='1.0' encoding='UTF-8'?>
<?xml-stylesheet href="/static/style.xsl" type="text/xsl"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0">
  <channel>
    <title>Most recent entries from all</title>
    <link>https://vulnerability.circl.lu</link>
    <description>Contains only the most 10 recent entries.</description>
    <docs>http://www.rssboard.org/rss-specification</docs>
    <generator>python-feedgen</generator>
    <language>en</language>
    <lastBuildDate>Thu, 01 Oct 2026 14:55:33 +0000</lastBuildDate>
    <item>
      <title>fkie_cve-2026-59220</title>
      <link>https://vulnerability.circl.lu/vuln/fkie_cve-2026-59220</link>
      <description>&lt;p&gt;Open WebUI is an extensible, feature-rich, and user-friendly self-hosted AI platform. From 0.9.2 before 0.10.0, the SKILL_MENTION_RE and strip_re regular expressions in backend/open_webui/utils/middleware.py parsed &amp;lt;$skillId|label&amp;gt; skill mentions with overlapping quantifiers, allowing an authenticated chat message containing &amp;lt;$ without a closing &amp;gt; to trigger quadratic backtracking and block the asyncio event loop. This issue is fixed in version 0.10.0.&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;Open WebUI is an extensible, feature-rich, and user-friendly self-hosted AI platform. From 0.9.2 before 0.10.0, the SKILL_MENTION_RE and strip_re regular expressions in backend/open_webui/utils/middleware.py parsed &amp;lt;$skillId|label&amp;gt; skill mentions with overlapping quantifiers, allowing an authenticated chat message containing &amp;lt;$ without a closing &amp;gt; to trigger quadratic backtracking and block the asyncio event loop. This issue is fixed in version 0.10.0.&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/fkie_cve-2026-59220</guid>
    </item>
    <item>
      <title>GHSA-ffpj-xv5c-p3gw — Open WebUI: ReDoS in skill-mention regexes causes whole-instance DoS on default config</title>
      <link>https://vulnerability.circl.lu/vuln/ghsa-ffpj-xv5c-p3gw</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; PyPI: open-webui&lt;/p&gt;
&lt;p&gt;## Summary
Two regexes in `backend/open_webui/utils/middleware.py` that parse `&amp;lt;$skillId|label&amp;gt;` skill-mention tags backtrack in O(n²) on input that contains `&amp;lt;$` followed by a long run with no closing `&amp;gt;`. 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.&lt;/p&gt;
&lt;p&gt;## Affected versions
`&amp;gt;= 0.9.2, &amp;lt; 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 &amp;#34;keep label as readable text&amp;#34; change), so on 0.9.6 a small input is enough to hang the instance.&lt;/p&gt;
&lt;p&gt;Both are fixed by the same patch.&lt;/p&gt;
&lt;p&gt;## Affected component
`backend/open_webui/utils/middleware.py` (line numbers as of v0.9.6):&lt;/p&gt;
&lt;p&gt;```python
# line 2223 — used by extract_skill_ids_from_messages(), called unconditionally (~line 2625)
SKILL_MENTION_RE = re.compile(r&amp;#39;&amp;lt;\$([^|&amp;gt;]+)\|?[^&amp;gt;]*&amp;gt;&amp;#39;)&lt;/p&gt;
&lt;p&gt;# line 2247 — used by strip_skill_mentions(), called unconditionally (line 2662)
strip_re = re.compile(r&amp;#39;&amp;lt;\$[^|&amp;gt;]+\|?([^&amp;gt;]*)&amp;gt;&amp;#39;)
```…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; PyPI: open-webui&lt;/p&gt;
&lt;p&gt;## Summary
Two regexes in `backend/open_webui/utils/middleware.py` that parse `&amp;lt;$skillId|label&amp;gt;` skill-mention tags backtrack in O(n²) on input that contains `&amp;lt;$` followed by a long run with no closing `&amp;gt;`. 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.&lt;/p&gt;
&lt;p&gt;## Affected versions
`&amp;gt;= 0.9.2, &amp;lt; 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 &amp;#34;keep label as readable text&amp;#34; change), so on 0.9.6 a small input is enough to hang the instance.&lt;/p&gt;
&lt;p&gt;Both are fixed by the same patch.&lt;/p&gt;
&lt;p&gt;## Affected component
`backend/open_webui/utils/middleware.py` (line numbers as of v0.9.6):&lt;/p&gt;
&lt;p&gt;```python
# line 2223 — used by extract_skill_ids_from_messages(), called unconditionally (~line 2625)
SKILL_MENTION_RE = re.compile(r&amp;#39;&amp;lt;\$([^|&amp;gt;]+)\|?[^&amp;gt;]*&amp;gt;&amp;#39;)&lt;/p&gt;
&lt;p&gt;# line 2247 — used by strip_skill_mentions(), called unconditionally (line 2662)
strip_re = re.compile(r&amp;#39;&amp;lt;\$[^|&amp;gt;]+\|?([^&amp;gt;]*)&amp;gt;&amp;#39;)
```…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/ghsa-ffpj-xv5c-p3gw</guid>
    </item>
    <item>
      <title>PYSEC-2026-3596 — Open WebUI: ReDoS in skill-mention regexes causes whole-instance DoS on default config</title>
      <link>https://vulnerability.circl.lu/vuln/pysec-2026-3596</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; PyPI: open-webui&lt;/p&gt;
&lt;p&gt;## Summary
Two regexes in `backend/open_webui/utils/middleware.py` that parse `&amp;lt;$skillId|label&amp;gt;` skill-mention tags backtrack in O(n²) on input that contains `&amp;lt;$` followed by a long run with no closing `&amp;gt;`. 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.&lt;/p&gt;
&lt;p&gt;## Affected versions
`&amp;gt;= 0.9.2, &amp;lt; 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 &amp;#34;keep label as readable text&amp;#34; change), so on 0.9.6 a small input is enough to hang the instance.&lt;/p&gt;
&lt;p&gt;Both are fixed by the same patch.&lt;/p&gt;
&lt;p&gt;## Affected component
`backend/open_webui/utils/middleware.py` (line numbers as of v0.9.6):&lt;/p&gt;
&lt;p&gt;```python
# line 2223 — used by extract_skill_ids_from_messages(), called unconditionally (~line 2625)
SKILL_MENTION_RE = re.compile(r&amp;#39;&amp;lt;\$([^|&amp;gt;]+)\|?[^&amp;gt;]*&amp;gt;&amp;#39;)&lt;/p&gt;
&lt;p&gt;# line 2247 — used by strip_skill_mentions(), called unconditionally (line 2662)
strip_re = re.compile(r&amp;#39;&amp;lt;\$[^|&amp;gt;]+\|?([^&amp;gt;]*)&amp;gt;&amp;#39;)
```…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; PyPI: open-webui&lt;/p&gt;
&lt;p&gt;## Summary
Two regexes in `backend/open_webui/utils/middleware.py` that parse `&amp;lt;$skillId|label&amp;gt;` skill-mention tags backtrack in O(n²) on input that contains `&amp;lt;$` followed by a long run with no closing `&amp;gt;`. 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.&lt;/p&gt;
&lt;p&gt;## Affected versions
`&amp;gt;= 0.9.2, &amp;lt; 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 &amp;#34;keep label as readable text&amp;#34; change), so on 0.9.6 a small input is enough to hang the instance.&lt;/p&gt;
&lt;p&gt;Both are fixed by the same patch.&lt;/p&gt;
&lt;p&gt;## Affected component
`backend/open_webui/utils/middleware.py` (line numbers as of v0.9.6):&lt;/p&gt;
&lt;p&gt;```python
# line 2223 — used by extract_skill_ids_from_messages(), called unconditionally (~line 2625)
SKILL_MENTION_RE = re.compile(r&amp;#39;&amp;lt;\$([^|&amp;gt;]+)\|?[^&amp;gt;]*&amp;gt;&amp;#39;)&lt;/p&gt;
&lt;p&gt;# line 2247 — used by strip_skill_mentions(), called unconditionally (line 2662)
strip_re = re.compile(r&amp;#39;&amp;lt;\$[^|&amp;gt;]+\|?([^&amp;gt;]*)&amp;gt;&amp;#39;)
```…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/pysec-2026-3596</guid>
    </item>
  </channel>
</rss>
