CVE-2026-59715Low· 3.1▾ SunlitOpen WebUI: Unauthenticated WebSocket Access to Collaborative Document Handlers (ydoc:awareness:update, ydoc:document:leave)
▾ Sunlit zone — Low / medium · no exploitation signal
impact 17.1 · likelihood 0 · exploitation 0
Need a working PoC? Pro members can cast a request and our team develops one — it lands right here.
Exploit-prediction probability, daily snapshots since Jul 24.
Disclosure to exploitation, from the record and what we observed since indexing it.
Disclosed via GHSA
0.2%
The Socket.IO server is configured with always_connect=True (lines 78, 91 in backend/open_webui/socket/main.py) and the connect handler (line 329) never rejects unauthenticated connections. Two Ydoc event handlers have zero authentication checks, allowing unauthenticated clients to interact with collaborative document sessions.
ydoc:awareness:update (line 741) — No auth check at all@sio.on('ydoc:awareness:update')
async def yjs_awareness_update(sid, data):
document_id = data['document_id']
user_id = data.get('user_id', sid)
update = data['update']
# No SESSION_POOL check, no room membership check
await sio.emit(
'ydoc:awareness:update',
{'document_id': document_id, 'user_id': user_id, 'update': update},
room=f'doc_{document_id}',
skip_sid=sid,
)
ydoc:document:leave (line 711) — No auth check at all@sio.on('ydoc:document:leave')
async def yjs_document_leave(sid, data):
document_id = data['document_id']
user_id = data.get('user_id', sid)
# No auth check
await YDOC_MANAGER.remove_user(document_id=document_id, user_id=sid)
await sio.emit('ydoc:user:left',
{'document_id': document_id, 'user_id': user_id},
room=f'doc_{document_id}')
always_connect=True (line 78)sio = socketio.AsyncServer(
always_connect=True, # Never rejects connections
...
)
The connect handler (line 329) adds authenticated users to SESSION_POOL but never returns False or raises an exception for unauthenticated connections.
ydoc:awareness:update with:
document_id: a known/guessed note UUID (format: note:{uuid})user_id: spoofed to impersonate any userupdate: arbitrary awareness data (fake cursor positions, selections)ydoc:document:leave with spoofed user_id to broadcast fake ydoc:user:left eventsuser_id in awareness updatesNote: Other Ydoc handlers (ydoc:document:join, ydoc:document:update, ydoc:document:state) correctly check SESSION_POOL membership.
always_connect=False or reject unauthenticated connections in the connect handlerSESSION_POOL checks to ydoc:awareness:update and ydoc:document:leaveAI Disclosure (per Rule 11): AI (Claude) was used to assist with source code review, identifying potential vulnerability patterns, and drafting this report. The researcher directed the analysis, selected focus areas, and independently verified all findings against a running v0.8.12 Docker instance using real HTTP requests with two test accounts. The PoCs included are reproducible and were confirmed live before submission.
open-webui >= 0.6.16, < 0.10.0Upgrade to a patched release:
open-webui 0.10.0Connected by shared product, vendor, weakness, or advisory.
CVE-2026-59223Medium· 4.3Open WebUI: `WEB_FETCH_FILTER_LIST` host allow/block filter bypassable via URL path and non-label-boundary matching
CVE-2026-59224High· 8.0Open WebUI: Terminal proxy forwards a spoofable, integrity-unbound user identity to the upstream (X-User-Id header and ws_terminal session_id query injection)
CVE-2026-59212Medium· 5.4Open WebUI: Model meta.knowledge read-only file access can be upgraded to file write/delete
CVE-2026-59225Medium· 5.4Open WebUI: Arena task endpoints can bypass underlying model access controls
CVE-2026-59221High· 7.7open-webui terminal proxy path traversal guard bypass via 9x encoded traversal
CVE-2026-59218Medium· 5.3Open WebUI: Account enumeration via observable login timing discrepancy