<?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 07:34:42 +0000</lastBuildDate>
    <item>
      <title>CVE-2026-59714 — Open WebUI: Cross-channel message overwrite via chat completion API (single-model and multimodel message_ids)</title>
      <link>https://vulnerability.circl.lu/vuln/cve-2026-59714</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; open-webui&lt;/p&gt;
&lt;p&gt;Open WebUI is an extensible, feature-rich, and user-friendly self-hosted AI platform. From 0.9.5 before 0.10.0, any authenticated user can overwrite the content of a message in a channel they do not belong to (including private and DM channels) by sending a chat completion request with a channel:-prefixed chat_id and a target message_id. The channel: path routes pipeline output through _make_channel_emitter, which writes to the Messages table using the caller-supplied message_id without binding it to the channel. This issue is fixed in version 0.10.0.&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; open-webui&lt;/p&gt;
&lt;p&gt;Open WebUI is an extensible, feature-rich, and user-friendly self-hosted AI platform. From 0.9.5 before 0.10.0, any authenticated user can overwrite the content of a message in a channel they do not belong to (including private and DM channels) by sending a chat completion request with a channel:-prefixed chat_id and a target message_id. The channel: path routes pipeline output through _make_channel_emitter, which writes to the Messages table using the caller-supplied message_id without binding it to the channel. This issue is fixed in version 0.10.0.&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/cve-2026-59714</guid>
    </item>
    <item>
      <title>GHSA-x2ff-v5v8-m75m — Open WebUI: Cross-channel message overwrite via chat completion API (single-model and multimodel message_ids)</title>
      <link>https://vulnerability.circl.lu/vuln/ghsa-x2ff-v5v8-m75m</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; PyPI: open-webui&lt;/p&gt;
&lt;p&gt;## Summary&lt;/p&gt;
&lt;p&gt;Any authenticated user can overwrite the content of a message in a channel they do not belong to (including private and DM channels) by sending a chat completion request with a `channel:`-prefixed `chat_id` and a target `message_id`. The `channel:` path routes pipeline output through `_make_channel_emitter`, which writes to the `Messages` table using the caller-supplied `message_id` without binding it to the channel.&lt;/p&gt;
&lt;p&gt;This advisory consolidates two filings of the same flaw: the original single-model form, and a multimodel `message_ids` variant that survives the partial fix shipped in v0.9.6 (see &amp;#34;Fix status&amp;#34; below).&lt;/p&gt;
&lt;p&gt;## Details (as introduced in v0.9.5)&lt;/p&gt;
&lt;p&gt;When a user submits a chat completion request with a `chat_id` starting with `channel:`, three authorization gaps combined in v0.9.5:&lt;/p&gt;
&lt;p&gt;1. **Ownership check skipped** (`main.py`): the `channel:` prefix caused the entire ownership/membership verification block to be skipped, with no channel membership/write check replacing it.&lt;/p&gt;
&lt;p&gt;```python
if not chat_id.startswith(&amp;#39;local:&amp;#39;) and not chat_id.startswith(&amp;#39;channel:&amp;#39;):  # temporary/channel chats are not stored
    if is_new_chat:
        ...
    else:
        if not await Chats.is_chat_owner(chat_id, user.id) and user.role != &amp;#39;admin&amp;#39;:
            raise HTTPException(...)
```&lt;/p&gt;
&lt;p&gt;2. **Message ID from user input**: `id` (and each value of the multimodel `message_ids` map) comes directly from the request body and is passed as `message_id` to the channel emitter.&lt;/p&gt;
&lt;p&gt;3. **Unchecked…&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&lt;/p&gt;
&lt;p&gt;Any authenticated user can overwrite the content of a message in a channel they do not belong to (including private and DM channels) by sending a chat completion request with a `channel:`-prefixed `chat_id` and a target `message_id`. The `channel:` path routes pipeline output through `_make_channel_emitter`, which writes to the `Messages` table using the caller-supplied `message_id` without binding it to the channel.&lt;/p&gt;
&lt;p&gt;This advisory consolidates two filings of the same flaw: the original single-model form, and a multimodel `message_ids` variant that survives the partial fix shipped in v0.9.6 (see &amp;#34;Fix status&amp;#34; below).&lt;/p&gt;
&lt;p&gt;## Details (as introduced in v0.9.5)&lt;/p&gt;
&lt;p&gt;When a user submits a chat completion request with a `chat_id` starting with `channel:`, three authorization gaps combined in v0.9.5:&lt;/p&gt;
&lt;p&gt;1. **Ownership check skipped** (`main.py`): the `channel:` prefix caused the entire ownership/membership verification block to be skipped, with no channel membership/write check replacing it.&lt;/p&gt;
&lt;p&gt;```python
if not chat_id.startswith(&amp;#39;local:&amp;#39;) and not chat_id.startswith(&amp;#39;channel:&amp;#39;):  # temporary/channel chats are not stored
    if is_new_chat:
        ...
    else:
        if not await Chats.is_chat_owner(chat_id, user.id) and user.role != &amp;#39;admin&amp;#39;:
            raise HTTPException(...)
```&lt;/p&gt;
&lt;p&gt;2. **Message ID from user input**: `id` (and each value of the multimodel `message_ids` map) comes directly from the request body and is passed as `message_id` to the channel emitter.&lt;/p&gt;
&lt;p&gt;3. **Unchecked…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/ghsa-x2ff-v5v8-m75m</guid>
    </item>
  </channel>
</rss>
