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-73556

CVE-2026-73556: Regular Expression Denial of Service (ReDoS) in vLLM lm-format-enforcer Backend

Amit Schendel
Amit Schendel
Senior Security Researcher

Sep 5, 2026·5 min read·50 visits

Executive Summary (TL;DR)

Unauthenticated remote attackers can cause a complete Denial of Service (DoS) in vLLM by submitting a maliciously crafted regular expression that triggers exponential backtracking in the lm-format-enforcer backend, pinning the CPU at 100%.

CVE-2026-73556 is a Regular Expression Denial of Service (ReDoS) vulnerability in the vLLM inference engine's lm-format-enforcer structured-output backend. Prior to version 0.26.0, lack of compilation timeouts or complexity validation for user-supplied regular expressions in the structured_outputs.regex parameter allowed unauthenticated remote attackers to trigger CPU exhaustion and block the core execution loop.

Vulnerability Overview

vLLM is a high-throughput and memory-efficient inference engine for Large Language Models (LLMs). To ensure that model outputs adhere to strict structural constraints, such as JSON schemas or regular expressions, vLLM provides a structured output decoding capability. This execution pathway relies on various parsing backends, including lm-format-enforcer, which translates regular expressions into Finite State Machines (FSMs) to guide the token-generation process.\n\nThe vulnerability lies within this structured decoding pipeline when utilizing the lm-format-enforcer engine. Specifically, the engine accepts user-controlled regular expressions through the structured_outputs.regex parameter at OpenAI-compatible endpoints like /v1/chat/completions and /v1/completions. Prior to version 0.26.0, vLLM failed to validate the execution complexity of these regex expressions or enforce compile-time resource limits on this backend.\n\nThis omission exposes vLLM servers to a remote, unauthenticated Regular Expression Denial of Service (ReDoS). When an attacker submits a highly complex or catastrophic regular expression, the backend thread attempts to parse and compile the expression into an FSM. This operation blocks the thread synchronously, forcing the CPU core to spin at maximum utilization and stalling the entire inference execution pipeline for concurrent requests.

Root Cause Analysis

The root cause of CVE-2026-73556 is the uncontrolled resource consumption during the parsing and state compilation of user-supplied regular expressions within lm-format-enforcer. This backend translates regex patterns into state-machine constraints via underlying libraries such as interegular. Because compiling irregular regular expressions (such as those containing nested quantifiers or overlapping loops) requires calculating complex state transitions, the compilation time scales exponentially relative to the expression structure.\n\nIn vulnerable versions, vLLM lacked validation steps or timeout guards when passing input to lmformatenforcer.RegexParser. During normal operation, the parsing of clean schemas is instantaneous. However, an attacker can specify a pattern containing overlapping groupings, such as (a+)+$, which causes catastrophic backtracking or extreme state-space explosion when parsed into an FSM.\n\nBecause Python executes this parsing synchronously on the thread servicing the request, the process consumes 100% of a CPU core. In multi-tenant environments or standard inference pools, this blockage prevents the worker from handling other token-generation streams. This flaw represents a "missed sibling" of CVE-2026-55574; while timeouts were implemented for other structured engines like xgrammar and outlines, lm-format-enforcer was left unprotected.

Code Analysis & Patch Deep Dive

The vulnerability was addressed in Pull Request #47595 (Commit c9a788eedc412acceaa5112e0d44624b49841577) by implementing validation and compilation timeouts using a utility function compile_regex_with_timeout.\n\nIn vllm/v1/structured_output/backend_lm_format_enforcer.py, the original implementation directly instantiated the regex parser:\n\npython\n# Vulnerable Code Path\nelif request_type == StructuredOutputOptions.REGEX:\n character_level_parser = lmformatenforcer.RegexParser(grammar_spec)\n\n\nThis instruction ran without any thread intervention or timer. The patched version wraps this initialization using a timeout-safe compiler:\n\npython\n# Patched Code Path\nelif request_type == StructuredOutputOptions.REGEX:\n character_level_parser = compile_regex_with_timeout(\n lmformatenforcer.RegexParser,\n grammar_spec,\n )\n\n\nAdditionally, early input validation was introduced to reject malicious inputs at the API gateway layer before they schedule worker threads:\n\npython\n# Early validation in backend_lm_format_enforcer.py\ndef validate_structured_output_request_lm_format_enforcer(params: SamplingParams):\n so_params = params.structured_outputs\n\n if so_params.regex:\n try:\n compile_regex_with_timeout(\n lmformatenforcer.RegexParser,\n so_params.regex,\n )\n except Exception as err:\n raise ValueError(\n f"Failed to compile regex for lm-format-enforcer: {err}"\n ) from err\n\n\nBy testing compile time inside validate_structured_output_request_lm_format_enforcer, the server catches ReDoS inputs early. If compilation exceeds the threshold, the system throws a ValueError, returning an HTTP 400 response and preventing resource exhaustion.

Exploitation Methodology

An attacker can trigger this vulnerability by making a single, unauthenticated POST request to the vLLM server's OpenAI-compatible completions endpoints. No special privileges or structural knowledge of the underlying model are required. The attack relies entirely on the inclusion of the structured_outputs JSON block.\n\njson\nPOST /v1/completions HTTP/1.1\nHost: target-vllm-server:8000\nContent-Type: application/json\n\n{\n "model": "meta-llama/Meta-Llama-3-8B-Instruct",\n "prompt": "Synthesize a structured response.",\n "stream": false,\n "structured_outputs": {\n "regex": "(([a-zA-Z0-9])+)+$"\n }\n}\n\n\nWhen the request is processed, the system maps the structured_outputs.regex option to the lm-format-enforcer backend. As the regex engine attempts to expand the FSM states for the catastrophic sub-pattern (([a-zA-Z0-9])+)+$, the calculation complexity balloons.\n\nmermaid\ngraph LR\n Client["Unauthenticated Client"] -->|"Catastrophic Regex"| vLLM["vLLM API Endpoints (/v1/completions)"]\n vLLM -->|"Extracts structured_outputs.regex"| LME["lm-format-enforcer Backend"]\n LME -->|"Synchronous FSM Compilation"| ReDoS["CPU Core Spin (100% Load)"]\n ReDoS -->|"Thread Stalled"| Block["Inference Pipeline Stalls"]\n\n\nThe resulting execution loop does not crash the server immediately with a memory fault but rather holds the designated CPU thread in a perpetual busy-wait state. Sustained attacks consisting of multiple requests can quickly exhaust all available CPU threads in the vLLM worker pool, rendering the service completely unresponsive.

Residual Risk Analysis

While the security patch effectively mitigates direct ReDoS attacks submitted via the structured_outputs.regex field, several architectural limitations could allow variant bypasses. Security researchers should pay close attention to nested structured outputs, particularly in complex JSON Schemas.\n\nUnder StructuredOutputOptions.JSON_OBJECT, users can supply complete JSON Schemas. If these schemas contain nested properties that use the "pattern" validation keyword (which also accepts regex constraints), the underlying JsonSchemaParser might compile these inner patterns. If the inner pattern compilation does not pass through the compile_regex_with_timeout utility, an attacker could hide a catastrophic regex inside a JSON schema parameter, bypassing the primary validation check.\n\nAnother concern resides in Python's signal-handling mechanism. Python's signal.alarm, which is often used to implement timeout wrapper mechanisms, is strictly limited to POSIX/Unix environments and must run on the process's main thread. If vLLM is deployed on non-POSIX runtimes (such as Windows environments) or schedules validation processes entirely inside worker threads rather than the main loop thread, standard timeout interrupts might be ignored, leaving the resource exhaustion path open.

Fix Analysis (1)

Technical Appendix

CVSS Score
5.3/ 10
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L
EPSS Probability
0.32%
Top 76% most exploited

Affected Systems

vLLM

Affected Versions Detail

Product
Affected Versions
Fixed Version
vllm
vllm-project
< 0.26.00.26.0
AttributeDetail
CWE IDCWE-1333 / CWE-400
Attack VectorNetwork (AV:N)
CVSS Score5.3 (Medium)
EPSS Score0.00315 (Percentile: 23.90%)
ImpactDenial of Service (CPU Exhaustion)
Exploit StatusNo Public PoC Found
KEV StatusNot Listed

MITRE ATT&CK Mapping

T1499Endpoint Denial of Service
Impact
CWE-1333
Inefficient Regular Expression Complexity

The software uses a regular expression that can require exponential or polynomial time to evaluate against certain inputs, leading to a Denial of Service.

Vulnerability Timeline

Vulnerability patched in PR 47595
2026-07-14
CVE-2026-73556 / GHSA-48jh-3gj7-fg8v published
2026-08-13
NVD entry updated with CVSS evaluations
2026-08-14

References & Sources

  • [1]vLLM Security Advisory (GHSA-48jh-3gj7-fg8v)
  • [2]vLLM Pull Request #47595
  • [3]vLLM Fix Commit
  • [4]vLLM Release v0.26.0
  • [5]NVD CVE-2026-73556 Detail
  • [6]CVE.org Record for CVE-2026-73556

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

•2 minutes ago•CVE-2026-109619
9.2

CVE-2026-109619: Remote Code Execution in PHP Core via Stale Global State Memory Corruption (PHP2Shell)

CVE-2026-109619 (PHP2Shell) is a critical Use-After-Free vulnerability in the core PHP engine caused by improper global state cleanup during out-of-memory exception handling across persistent worker requests.

Alon Barad
Alon Barad
1 views•6 min read
•5 minutes ago•CVE-2026-113721
4.5

CVE-2026-113721: Unsafe Link Resolution in virtualenv File Generation

In Python virtualenv prior to version 21.14.9, activation script generators and configuration writers use Path.exists() before writing files. Because Path.exists() resolves symbolic links, it returns False for dangling symlinks. Consequently, virtualenv skips unlinking pre-planted symbolic links or hard links, writing data directly to target locations outside the intended virtual environment directory.

Amit Schendel
Amit Schendel
1 views•5 min read
•9 days ago•CVE-2026-87697
8.8

CVE-2026-87697: Untrusted Deserialization in .NET PresentationCore Clipboard Handling

A remote code execution vulnerability exists in Microsoft .NET due to untrusted data deserialization within the PresentationCore component. The flaw stems from implicit auto-conversion flags during clipboard data retrieval operations.

Alon Barad
Alon Barad
31 views•5 min read
•9 days ago•CVE-2026-70007
8.8

CVE-2026-70007: Out-of-Bounds Write Vulnerability in .NET Framework and WPF Subsystem

An out-of-bounds write vulnerability in Microsoft .NET Framework, .NET runtime, and Visual Studio allows unauthenticated remote attackers to execute arbitrary code via crafted pixel-shader bytecode or auto-converted clipboard payloads.

Amit Schendel
Amit Schendel
19 views•6 min read
•10 days ago•CVE-2026-70186
7.5

CVE-2026-70186: ASP.NET Core Denial of Service Vulnerability via Framework Deadlock

ASP.NET Core contains a thread deadlock vulnerability (CWE-833) that allows an unauthenticated remote attacker to cause a denial of service over the network by exhausting server thread pool resources.

Amit Schendel
Amit Schendel
18 views•5 min read
•10 days ago•CVE-2026-70035
8.8

CVE-2026-70035: Insecure Deserialization Remote Code Execution in Microsoft .NET Framework and .NET Runtime

CVE-2026-70035 is a high-severity Remote Code Execution (RCE) vulnerability in Microsoft .NET Framework, .NET runtime, and Visual Studio caused by improper handling during the deserialization of untrusted data (CWE-502). An unauthenticated attacker can execute arbitrary code within the context of the affected process by delivering a crafted serialized payload.

Amit Schendel
Amit Schendel
24 views•6 min read