<?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, 08 Oct 2026 14:24:25 +0000</lastBuildDate>
    <item>
      <title>CVE-2026-44564 — Open WebUI: Read-Only Users Can Modify Collaborative Documents via Socket.IO</title>
      <link>https://vulnerability.circl.lu/vuln/cve-2026-44564</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; open-webui&lt;/p&gt;
&lt;p&gt;Open WebUI is a self-hosted artificial intelligence platform designed to operate entirely offline. Prior to 0.9.0, the ydoc:document:update Socket.IO event handler checks whether the sender is a member of the document&amp;#39;s Socket.IO room (line 678) but does not verify that the sender has write permission. Users with read-only access join the document room via ydoc:document:join, which only requires read permission (line 520). Once in the room, the user can emit ydoc:document:update events that modify the in-memory Yjs document state and are broadcast to all other collaborators in real time. This vulnerability is fixed in 0.9.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 a self-hosted artificial intelligence platform designed to operate entirely offline. Prior to 0.9.0, the ydoc:document:update Socket.IO event handler checks whether the sender is a member of the document&amp;#39;s Socket.IO room (line 678) but does not verify that the sender has write permission. Users with read-only access join the document room via ydoc:document:join, which only requires read permission (line 520). Once in the room, the user can emit ydoc:document:update events that modify the in-memory Yjs document state and are broadcast to all other collaborators in real time. This vulnerability is fixed in 0.9.0.&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/cve-2026-44564</guid>
    </item>
    <item>
      <title>PYSEC-2026-2762 — Read-Only Open WebUI Users Can Modify Collaborative Documents via Socket.IO</title>
      <link>https://vulnerability.circl.lu/vuln/pysec-2026-2762</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; PyPI: open-webui&lt;/p&gt;
&lt;p&gt;# Read-Only Users Can Modify Collaborative Documents via Socket.IO&lt;/p&gt;
&lt;p&gt;## Affected Component&lt;/p&gt;
&lt;p&gt;Socket.IO collaborative document editing handler:
- `backend/open_webui/socket/main.py` (lines 667-721, `ydoc:document:update` handler)&lt;/p&gt;
&lt;p&gt;## Affected Versions&lt;/p&gt;
&lt;p&gt;Current main branch and likely all versions with collaborative note editing.&lt;/p&gt;
&lt;p&gt;## Description&lt;/p&gt;
&lt;p&gt;The `ydoc:document:update` Socket.IO event handler checks whether the sender is a member of the document&amp;#39;s Socket.IO room (line 678) but does not verify that the sender has **write** permission. Users with read-only access join the document room via `ydoc:document:join`, which only requires `read` permission (line 520). Once in the room, the user can emit `ydoc:document:update` events that modify the in-memory Yjs document state and are broadcast to all other collaborators in real time.&lt;/p&gt;
&lt;p&gt;The `document_save_handler` (line 600) correctly checks `write` permission before persisting to the database, so the attacker cannot directly save changes. However, the tampered content is visible to all collaborators, and if any user with write access saves the document, the injected content is persisted.&lt;/p&gt;
&lt;p&gt;```python
# ydoc:document:update handler (line 667) — only checks room membership, not write permission
async def on_document_update(sid, data):
    document_id = normalize_document_id(data.get(&amp;#39;document_id&amp;#39;, &amp;#39;&amp;#39;))
    # ...
    room = f&amp;#39;doc_{document_id}&amp;#39;
    if room not in sio.rooms(sid):  # Room membership check only
        return
    # Applies upd…&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;# Read-Only Users Can Modify Collaborative Documents via Socket.IO&lt;/p&gt;
&lt;p&gt;## Affected Component&lt;/p&gt;
&lt;p&gt;Socket.IO collaborative document editing handler:
- `backend/open_webui/socket/main.py` (lines 667-721, `ydoc:document:update` handler)&lt;/p&gt;
&lt;p&gt;## Affected Versions&lt;/p&gt;
&lt;p&gt;Current main branch and likely all versions with collaborative note editing.&lt;/p&gt;
&lt;p&gt;## Description&lt;/p&gt;
&lt;p&gt;The `ydoc:document:update` Socket.IO event handler checks whether the sender is a member of the document&amp;#39;s Socket.IO room (line 678) but does not verify that the sender has **write** permission. Users with read-only access join the document room via `ydoc:document:join`, which only requires `read` permission (line 520). Once in the room, the user can emit `ydoc:document:update` events that modify the in-memory Yjs document state and are broadcast to all other collaborators in real time.&lt;/p&gt;
&lt;p&gt;The `document_save_handler` (line 600) correctly checks `write` permission before persisting to the database, so the attacker cannot directly save changes. However, the tampered content is visible to all collaborators, and if any user with write access saves the document, the injected content is persisted.&lt;/p&gt;
&lt;p&gt;```python
# ydoc:document:update handler (line 667) — only checks room membership, not write permission
async def on_document_update(sid, data):
    document_id = normalize_document_id(data.get(&amp;#39;document_id&amp;#39;, &amp;#39;&amp;#39;))
    # ...
    room = f&amp;#39;doc_{document_id}&amp;#39;
    if room not in sio.rooms(sid):  # Room membership check only
        return
    # Applies upd…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/pysec-2026-2762</guid>
    </item>
  </channel>
</rss>
