CVEReports
CVEReports

Automated vulnerability intelligence platform. Comprehensive reports for high-severity CVEs generated by AI.

Product

  • Home
  • Sitemap
  • RSS Feed

Company

  • About
  • Contact
  • Privacy Policy
  • Terms of Service

© 2026 CVEReports. All rights reserved.

Made with love by Amit Schendel & Alon Barad



CVE-2026-88000

CVE-2026-88000: Denial of Service via Infinite Loop in Open WebUI Chat History Deletion

Alon Barad
Alon Barad
Software Engineer

Sep 10, 2026·6 min read·6 visits

Executive Summary (TL;DR)

An authenticated user can permanently freeze an Open WebUI server by creating a circular message reference and initiating a deletion, causing an infinite CPU-bound loop that blocks the application's single asyncio thread.

An authenticated denial-of-service vulnerability exists in Open WebUI versions 0.10.0 up to 0.11.0. By uploading a malformed chat history containing cyclical child message references and requesting a message deletion, an attacker can trigger an infinite loop. Since Open WebUI relies on Python's single-threaded asyncio event loop, the CPU-bound loop blocks all incoming connections, freezing the service for all users.

Vulnerability Overview

Open WebUI is an extensible, user-friendly, self-hosted interface for managing artificial intelligence workloads and interacting with Large Language Models. To support deep branching conversations, the application structures conversation logs as hierarchical tree networks. Each message node links dynamically to its predecessor and successor nodes, storing child pointers in an internal configuration dictionary.

This backend architecture exposes an attack surface within its chat management API endpoints. Specifically, the message deletion pipeline retrieves and reorganizes child message links when a node is removed. A standard authenticated user can access these interfaces to update, modify, or remove messages from their own personal chat logs.

Because the backend fails to validate structural integrity during JSON document ingestion, users can save chat records that violate directed acyclic graph guidelines. If an attacker introduces cyclic child-parent relationships into their chat history, the deletion logic breaks down. When a deletion is requested, the system enters an infinite loop, starving the runtime environment of CPU resources.

Root Cause Analysis

The underlying flaw resides in the recursive traversal logic inside backend/open_webui/models/chats.py. When a user deletes a message, the server attempts to recalculate the chat state. It seeks to resolve the new terminal leaf node (currentId) by stepping down through the list of child references.

The application implements this search via a standard while loop that resolves the last element of the child identifier list. If a cycle exists, such as Message 1 declaring Message 2 as its child, and Message 2 declaring Message 1 as its child, the loop becomes unbounded. The traversal shifts back and forth between these nodes without ever encountering a terminal state.

This behavior has severe consequences because of Python's execution architecture. Open WebUI operates on a single-threaded asynchronous runtime powered by asyncio. A synchronous, CPU-bound infinite loop executes continuously on the main thread without yielding control to other scheduled tasks. Consequently, the entire web server locks up, denying service to all concurrent users on the platform.

Code Analysis

The flaw is situated inside the delete_message_from_history() helper function. This function parses the raw chat dictionary and updates pointers. Reviewing the vulnerable implementation reveals a standard unbounded iteration strategy:

def delete_message_from_history(history: dict, message_id: str) -> set[str]:
    # ...
    # Retrieve child messages starting from the target location
    child_ids = (
        messages.get(current_id, {}).get('childrenIds', [])
        if current_id is None
        else messages.get(current_id, {}).get('childrenIds', [])
    )
    
    # Vulnerable loop: Traverses down without tracking visited nodes
    while child_ids:
        current_id = child_ids[-1]
        child_ids = messages.get(current_id, {}).get('childrenIds', [])
        
    history['currentId'] = current_id if current_id in messages else None
    return deleted_ids

The patched version addresses the issue by implementing a cycle-detection tracker. A Python set is initialized to track every node identifier that has already been visited during the execution scope. If the next resolved child ID is identified within this set, the execution breaks the iteration immediately:

def delete_message_from_history(history: dict, message_id: str) -> set[str]:
    # ...
    child_ids = (
        messages.get(current_id, {}).get('childrenIds', [])
        if current_id is None
        else messages.get(current_id, {}).get('childrenIds', [])
    )
    
    # Patched loop: Introduces visited tracking to detect cycles
    visited_ids = set()
    while child_ids and child_ids[-1] not in visited_ids:
        current_id = child_ids[-1]
        visited_ids.add(current_id)
        child_ids = messages.get(current_id, {}).get('childrenIds', [])
        
    history['currentId'] = current_id if current_id in messages else None
    return deleted_ids

Although the local fix stops the execution thread from hanging, it represents a reactive mitigation. The backend database layer still does not validate structural constraints during direct write operations. Therefore, other components that traverse the chat log trees using distinct search functions might also be vulnerable to cycle exploitation.

Exploitation and Attack Methodology

Exploiting this vulnerability does not require administrative privileges. Any registered user can trigger the vulnerability by submitting standard HTTP API commands to the server. The attacker first crafts a custom JSON payload representing a cyclic graph structure.

The attacker uploads the malformed chat data structure using a POST request to /api/v1/chats/new. Once the chat object is created, the database updates to store the cyclic relationships. The attacker then targets the deletion route to trigger the loop:

DELETE /api/v1/chats/{id}/messages/msg_1

Upon receiving this request, the backend executes the deletion helper. The loop runs indefinitely, consuming 100% of the assigned CPU core resources. Because the async scheduler cannot execute other tasks, all concurrent client requests fail to resolve.

Impact Assessment

The primary impact of this vulnerability is total denial of service. Because the application uses a single process worker pool by default in many self-hosted environments, a single request can render the entire system offline. This impacts all registered users on the system, regardless of their role.

The vulnerability does not allow remote code execution, database compromise, or unauthorized reading of other users' confidential histories. Therefore, the Confidentiality and Integrity metrics remain at None. However, because the attack is trivial to execute and requires zero user interaction from other victims, the Availability impact is High.

In environments where Open WebUI is exposed to public registration or shared across corporate networks, this flaw allows low-privilege actors to disrupt operational workflows. Recovery requires administrative shell access to terminate the container or server process manually.

Remediation and Defenses

The primary solution is to upgrade Open WebUI to version 0.11.1 or higher. This release integrates cycle-detection logic into the deletion backend. Self-hosted instances running on Docker can pull the latest image to apply the updates:

docker pull ghcr.io/open-webui/open-webui:main
docker stop open-webui-container
docker rm open-webui-container
docker run -d -p 3000:8080 -v open-webui:/app/backend/data --name open-webui ghcr.io/open-webui/open-webui:main

If upgrading is not immediately possible, administrators can mitigate the risk by disabling public registration to limit exposure to trusted individuals. Additionally, configuring external reverse-proxy rate limiting on the /api/v1/chats/*/messages endpoint helps block automated exploitation attempts.

Automated tools can monitor server health to identify exploitation. Administrators should configure resource-monitoring rules to alert on sustained high CPU consumption accompanied by unhandled API request timeouts.

Official Patches

open-webuiOfficial Git patch to prevent loops by tracking traversed message IDs.

Fix Analysis (1)

Technical Appendix

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

Affected Systems

Self-hosted Open WebUI installations utilizing message history APIs

Affected Versions Detail

Product
Affected Versions
Fixed Version
open-webui
open-webui
>= 0.10.0, < 0.11.10.11.1
AttributeDetail
CWE IDCWE-835
Attack VectorNetwork (AV:N)
CVSS v3.1 Score6.5
EPSS ScoreNot available
ImpactHigh Availability Impact (Complete Denial of Service)
Exploit StatusProof of Concept
KEV StatusNot Listed

MITRE ATT&CK Mapping

T1499Endpoint Denial of Service
Impact
T1499.004Endpoint Denial of Service: Application Exhaustion
Impact
CWE-835
Loop with Unreachable Exit Condition ('Infinite Loop')

The program contains an iteration loop for which the exit condition is never satisfied, leading to infinite execution and resource exhaustion.

Known Exploits & Detection

AdvisoryProof of Concept structural overview detailing the payload creation of cyclic child dependencies and triggering of the deletion endpoint.

Vulnerability Timeline

Patch commit b933292d63d12be3fd1416fe55519ddc7aa336bc pushed to main repository
2026-08-17
Open WebUI v0.11.1 released with security remediation
2026-09-09
Public disclosure of CVE-2026-88000 / GHSA-3cgp-3cqx-j8w2
2026-09-09

References & Sources

  • [1]GitHub Security Advisory GHSA-3cgp-3cqx-j8w2
  • [2]Fix Commit b933292d63d12be3fd1416fe55519ddc7aa336bc
  • [3]Pull Request #28035
  • [4]Release Notes v0.11.1
  • [5]CVE-2026-88000 Record

Attack Flow Diagram

Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.

More Reports

•about 1 hour ago•CVE-2026-88002
6.5

CVE-2026-88002: Infinite Loop Denial of Service in Open WebUI Chat History Reconstruction

An infinite loop vulnerability (CWE-835) in Open WebUI versions 0.5.0 through 0.11.0 allows authenticated attackers to cause a complete and persistent Denial of Service (DoS) of the backend. By submitting a specially crafted chat history containing cyclic message references that omit internal message identifiers, the cycle detection mechanism is bypassed. This triggers an infinite synchronous traversal that blocks the single-threaded asyncio event loop and exhausts system memory, causing the application to crash.

Alon Barad
Alon Barad
3 views•7 min read
•about 2 hours ago•CVE-2026-88001
5.0

CVE-2026-88001: Server-Side Request Forgery via Redirect Bypass in Open WebUI

Server-Side Request Forgery (SSRF) vulnerability in Open WebUI (v0.9.5 to v0.11.1) allows authenticated users to bypass private IP and host filter lists by abusing HTTP redirect handling or using IP literals with the aiohttp client.

Alon Barad
Alon Barad
5 views•7 min read
•about 6 hours ago•CVE-2026-71328
8.8

CVE-2026-71328: Heap-Based Buffer Overflow in Microsoft .NET and Visual Studio Parser

A heap-based buffer overflow vulnerability (CVE-2026-71328) exists within the parser component of Microsoft Visual Studio and Microsoft .NET runtimes. This vulnerability permits an unauthenticated remote attacker to execute arbitrary code with the privileges of the running application, provided they can convince a user to load a maliciously crafted project file, solution, or stream.

Alon Barad
Alon Barad
7 views•7 min read
•about 7 hours ago•CVE-2026-69439
8.8

CVE-2026-69439: Heap-based Buffer Overflow in Microsoft .NET and Visual Studio

CVE-2026-69439 is a high-severity elevation of privilege vulnerability in Microsoft .NET and Visual Studio, originating from a heap-based buffer overflow (CWE-122) within native parsing libraries. An unauthenticated attacker can achieve code execution under the privileges of the active process by convincing a user to open a specially crafted project, metadata stream, or dependency.

Amit Schendel
Amit Schendel
9 views•6 min read
•about 8 hours ago•CVE-2026-85730
8.2

CVE-2026-85730: Infinite Loop Denial of Service in smol-toml Parser

Prior to version 1.7.1, smol-toml is vulnerable to an infinite loop Denial of Service when parsing a malformed TOML payload containing an unclosed comment inside an array or inline table.

Amit Schendel
Amit Schendel
7 views•7 min read
•about 9 hours ago•CVE-2026-69522
8.8

.NET and Visual Studio Remote Code Execution Vulnerability (CVE-2026-69522)

CVE-2026-69522 is a high-severity Remote Code Execution (RCE) vulnerability in Microsoft .NET runtimes, .NET Framework, and Visual Studio caused by a heap-based buffer overflow (CWE-122). An unauthenticated attacker can exploit this flaw by inducing a user to open a malicious project file or by transmitting crafted payloads over the network, leading to arbitrary code execution within the context of the running application.

Amit Schendel
Amit Schendel
10 views•7 min read