Executive brief
Open WebUI is a user-friendly AI chat interface that stores conversation histories as JSON. A flaw in the message deletion logic allows any authenticated user to craft a chat with messages that reference each other as children (a cycle), then delete a message to trigger an infinite loop. This loop blocks all requests from all users—including admin endpoints and health checks—effectively taking down the entire service until the affected worker process is manually killed.
Technical details
The vulnerability is an infinite loop (CWE-835) in the chat history message deletion handler at `backend/open_webui/models/chats.py`, reachable via `DELETE /api/v1/chats/{id}/messages/{message_id}`. The root cause is that when resolving a message's new current pointer after deletion, the code walks the `childrenIds` tree without maintaining a visited set, and does not validate chat structure when created. An attacker with default user role creates a malformed chat (≈300 bytes) where two messages reference each other as children, then issues a single delete request. The synchronous walk runs on the asyncio event loop, pinning one CPU core indefinitely and blocking every other user's request until the worker is killed. The attack is fire-and-forget; disconnection does not cancel the work. Fixed in version 0.11.1 by recording visited node IDs, ensuring termination in O(n) steps regardless of message structure.
Affected products
- Open WebUI open-webui 0.10.0 to 0.11.0 (inclusive)
Timeline
- 2026-09-09: disclosed: GHSA published
- 2026-09-09: patched: Fix released in version 0.11.1 via commit b933292