CVE-2026-88000: open-webui: malicious chat history causes DoS

GHSA-3cgp-3cqx-j8w2 MEDIUM CISA: TRACK*
Published September 9, 2026
CISO Take

A vulnerability in open-webui lets any account with the default low-privilege 'user' role — including self-registered users — freeze the entire server: by storing a chat whose messages reference each other as children and then deleting one message, the message-resolution logic enters an infinite loop on the server's async event loop, pinning one CPU core and blocking every other request, including unauthenticated health checks and admin endpoints, until the process is killed. There's no data disclosure or alteration — this is a pure availability hit — but for teams running open-webui as their internal LLM chat front-end, a single fire-and-forget request from one low-privilege user is enough to take down the service for all users, and the poisoned chat re-triggers the outage on every subsequent deletion attempt against it. There is no CISA KEV listing, no published EPSS score, and no public exploit code or Nuclei template circulating yet, so this looks opportunistic rather than actively weaponized; the package tracks only 3 known downstream dependents, which limits blast radius outside direct deployments. CISOs running open-webui should patch to 0.11.1 immediately — the fix requires no data migration and self-heals previously-poisoned chats — and in the interim should restrict self-service account creation and watch for single workers pinned at 100% CPU with flat memory as a detection signal.

Sources: NVD GitHub Advisory CISA KEV ATLAS

What is the risk?

Exploitability is high in practical terms despite the CVSS AC:L/PR:L profile — the attack is trivial to trigger (a ~300-byte JSON payload plus one DELETE request, no AI/ML expertise required) by any authenticated user, including self-registered accounts where open signup is enabled. Impact is a full, sustained denial of service (CVSS A:H) affecting all users sharing the same worker, including health/liveness checks used by orchestrators, which can cascade into automated restarts or failover loops in containerized deployments. There is no confidentiality or integrity impact. Overall risk is medium-high for any multi-user or externally exposed open-webui deployment, and lower for strictly single-user/trusted-only instances.

How does the attack unfold?

Initial Access
Attacker obtains or self-registers a standard low-privilege 'user' account, which by default can create and delete chats.
AML.T0012
Payload Staging
Attacker crafts a small chat JSON with cyclic childrenIds links and stores it via POST /api/v1/chats/new, which persists it without structural validation.
Trigger
Attacker sends DELETE against one message in the cyclic chat and disconnects immediately; the server's message-resolution walk never terminates on its event loop.
AML.T0049
Impact
The worker pins one CPU core indefinitely, blocking all other requests server-wide, including health checks and admin endpoints, until the process is killed.
AML.T0029

What systems are affected?

Package Ecosystem Vulnerable Range Patched
Open WebUI pip >= 0.10.0, < 0.11.1 0.11.1
151.8K 3 dependents Pushed 7d ago 83% patched ~5d to patch Full package profile →

Do you use Open WebUI? You're affected.

How severe is it?

CVSS 3.1
6.5 / 10
EPSS
0.3%
chance of exploitation in 30 days
Higher than 26% of all CVEs
Exploitation Status
Exploit Available
Exploitation: MEDIUM
Sophistication
Trivial
Exploitation Confidence
medium
CISA SSVC: Public PoC
Composite signal derived from CISA KEV, VulnCheck KEV, CISA SSVC, EPSS, Metasploit, Exploit-DB, trickest/cve, Nuclei templates, and inthewild.io exploitation reports.

What is the attack surface?

AV AC PR UI S C I A
AV Network
AC Low
PR Low
UI None
S Unchanged
C None
I None
A High

What should I do?

1 step
  1. Patch to open-webui >= 0.11.1 — the fix adds cycle detection to the child-link walk and is fully backward compatible, including for chats already poisoned under a vulnerable version. Until patched: disable open self-registration or restrict signups to vetted users to reduce who can reach the vulnerable endpoint, and if feasible, rate-limit or gate DELETE /api/v1/chats/{id}/messages/{message_id} for non-admin accounts at a reverse proxy. Detect exploitation by monitoring for a worker process pinned near 100% CPU on a single core with flat/unchanged memory and no corresponding throughput, combined with health-check timeouts; run multiple replicas/workers with process-level health checks that auto-restart a hung worker to limit blast radius. After patching, consider auditing stored chats for cyclic childrenIds structures — the malformed data persists but becomes inert once the walk terminates safely under 0.11.1.

What does CISA's SSVC say?

Decision Track*
Exploitation poc
Automatable No
Technical Impact partial

Source: CISA Vulnrichment (SSVC v2.0). Decision based on the CISA Coordinator decision tree.

How is it classified?

Which compliance frameworks are affected?

This CVE is relevant to:

EU AI Act
Article 15 - Accuracy, robustness and cybersecurity
ISO 42001
Annex A.6.2 - AI system operation and monitoring
NIST AI RMF
MEASURE 2.7 - AI system security and resilience are evaluated and documented
OWASP LLM Top 10
LLM04 - Unbounded Consumption / Model Denial of Service

Frequently Asked Questions

What is CVE-2026-88000?

A vulnerability in open-webui lets any account with the default low-privilege 'user' role — including self-registered users — freeze the entire server: by storing a chat whose messages reference each other as children and then deleting one message, the message-resolution logic enters an infinite loop on the server's async event loop, pinning one CPU core and blocking every other request, including unauthenticated health checks and admin endpoints, until the process is killed. There's no data disclosure or alteration — this is a pure availability hit — but for teams running open-webui as their internal LLM chat front-end, a single fire-and-forget request from one low-privilege user is enough to take down the service for all users, and the poisoned chat re-triggers the outage on every subsequent deletion attempt against it. There is no CISA KEV listing, no published EPSS score, and no public exploit code or Nuclei template circulating yet, so this looks opportunistic rather than actively weaponized; the package tracks only 3 known downstream dependents, which limits blast radius outside direct deployments. CISOs running open-webui should patch to 0.11.1 immediately — the fix requires no data migration and self-heals previously-poisoned chats — and in the interim should restrict self-service account creation and watch for single workers pinned at 100% CPU with flat memory as a detection signal.

Is CVE-2026-88000 actively exploited?

No confirmed active exploitation of CVE-2026-88000 has been reported, but organizations should still patch proactively.

How to fix CVE-2026-88000?

Patch to open-webui >= 0.11.1 — the fix adds cycle detection to the child-link walk and is fully backward compatible, including for chats already poisoned under a vulnerable version. Until patched: disable open self-registration or restrict signups to vetted users to reduce who can reach the vulnerable endpoint, and if feasible, rate-limit or gate DELETE /api/v1/chats/{id}/messages/{message_id} for non-admin accounts at a reverse proxy. Detect exploitation by monitoring for a worker process pinned near 100% CPU on a single core with flat/unchanged memory and no corresponding throughput, combined with health-check timeouts; run multiple replicas/workers with process-level health checks that auto-restart a hung worker to limit blast radius. After patching, consider auditing stored chats for cyclic childrenIds structures — the malformed data persists but becomes inert once the walk terminates safely under 0.11.1.

What systems are affected by CVE-2026-88000?

This vulnerability affects the following AI/ML architecture patterns: LLM chat UI / self-hosted front-ends, multi-user AI application backends.

What is the CVSS score for CVE-2026-88000?

CVE-2026-88000 has a CVSS v3.1 base score of 6.5 (MEDIUM). The EPSS exploitation probability is 0.33%.

What is the AI security impact?

Affected AI Architectures

LLM chat UI / self-hosted front-endsmulti-user AI application backends

MITRE ATLAS Techniques

AML.T0029 Denial of AI Service
AML.T0049 Exploit Public-Facing Application

Compliance Controls Affected

EU AI Act: Article 15
ISO 42001: Annex A.6.2
NIST AI RMF: MEASURE 2.7
OWASP LLM Top 10: LLM04

What are the technical details?

Original Advisory

## Summary Chat histories are stored as an unvalidated JSON object. After a message is deleted, the code that picks the chat's new current message walked down the `childrenIds` links without recording where it had already been. Any account with the default `user` role could store a chat whose messages list each other as children, then delete a message from it, and the walk would run forever. That walk runs on the server's request loop, so it blocks every other user's requests until the process is killed. ## Preconditions One account with the default `user` role. No administrator rights, no additional permissions, no configuration change and no non-default setting: creating and deleting chats is available to every user out of the box. The attack runs entirely against the attacker's own chat, so no knowledge of any other user's data is needed. Versions before 0.10.0 are unaffected because neither the message-deletion endpoint nor the affected code existed. ## Impact The walk is synchronous and runs on the asyncio event loop, so while it spins, every request from every user is blocked, including unauthenticated `/health` and administrator endpoints. External health checks and orchestrator liveness probes fail alongside the UI. This is a pure CPU pin with no list growth, so a worker consumes one full core with flat memory and has to be killed rather than being reclaimed by an out-of-memory kill. The work is not cancelled when the client disconnects, so a single fire-and-forget request is enough and the attacker can disconnect immediately. The malformed chat stays in the database, so the condition re-arms on the next deletion attempt against that chat. No data is disclosed, altered or deleted. ## Fix Fixed in 0.11.1 by https://github.com/open-webui/open-webui/commit/b933292d63d12be3fd1416fe55519ddc7aa336bc. The walk now records the ids it has already passed through, so it terminates after at most one step per stored message whatever the message contents are. Upgrading fully resolves the issue, including for chats stored while the deployment was on an affected version, which become harmless once the walk terminates. ## Root cause Affected component: the chat-history message deletion helper in `backend/open_webui/models/chats.py`, reached from `DELETE /api/v1/chats/{id}/messages/{message_id}`. Affected setup: all builds from 0.10.0 up to and including 0.11.0. Resolving the chat's new current message after a deletion means descending to the deepest remaining child, and that descent had no notion of where it had already been, so two messages naming each other as children sent it back and forth indefinitely. The write path does not validate the structure of a chat's history, and the child-link rebuild that runs on other write paths does not apply when a chat is created, so a history whose `childrenIds` form a cycle was persisted exactly as submitted. ## Proof of concept As a default-role user on a running instance, store one chat of roughly 300 bytes whose messages reference each other as children: ```json {"chat":{"title":"poc","history":{"currentId":"C","messages":{ "A":{"id":"A","parentId":null,"role":"user","content":"a","childrenIds":["B","C"],"timestamp":1}, "B":{"id":"B","parentId":"A","role":"assistant","content":"b","childrenIds":["A"],"timestamp":2}, "C":{"id":"C","parentId":"A","role":"user","content":"c","childrenIds":[],"timestamp":3}}}}} ``` `POST /api/v1/chats/new` stores it verbatim, with the child links unchanged. A single `DELETE /api/v1/chats/{id}/messages/C` as the same user then never returns: ``` unauthenticated GET /health -> HTTP 000 after 10.007s DELETE -> HTTP 000 after 20.007s ``` Sampled during the hang, the worker had consumed 42.9 seconds of CPU on one fully occupied core with flat resident memory, and unauthenticated `GET /health` timed out for as long as the process lived, including after the attacker's connection closed. On 0.11.1 the same payload returns HTTP 200 in 0.011s, `/health` stays available throughout, and deleting a middle message from a well-formed four-message chain still resolves the current message correctly. ## Credits @Classic298, who found the unguarded descent through the chat's child links, demonstrated the resulting server-wide outage end to end against a live instance, and supplied the fix.

Exploitation Scenario

An attacker who holds any low-privilege 'user' account — via open self-service signup, phished credentials, or a legitimate internal account — crafts a small JSON chat object where two messages list each other in childrenIds, forming a cycle, and submits it via POST /api/v1/chats/new, which stores it verbatim since chat structure isn't validated on write. The attacker then sends DELETE /api/v1/chats/{id}/messages/{message_id} against the cyclic message and immediately disconnects; because the walk is not cancelled on client disconnect, the server keeps executing the now-infinite traversal on its event loop. Every other request routed to that worker — other users' chats, unauthenticated health checks, and admin cockpit pages — hangs until an operator kills the process, and since the malformed chat remains in the database, the attacker (or anyone able to reach that chat) can re-trigger the outage at will.

Weaknesses (CWE)

CWE-835 — Loop with Unreachable Exit Condition ('Infinite Loop'): The product contains an iteration or loop with an exit condition that cannot be reached, i.e., an infinite loop.

Source: MITRE CWE corpus.

CVSS Vector

CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H

Timeline

Published
September 9, 2026
Last Modified
September 10, 2026
First Seen
September 10, 2026

Related Vulnerabilities