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

CVE-2024-1410

CVE-2024-1410 Denial of Service in Cloudflare
📅 PUBLISHED: 2024-03-12 18:06 UTC 🔄 UPDATED: 2026-09-23 20:36 UTC
[ OFFICIAL PATCH DEPLOYED ↓ ] FIX: LIKELY — 2 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.66%
👁️
0.66% probability
16.6× above the median CVE
Tier: ELEVATED
30-day exploitation window · FIRST.org · updated daily
Country: USA License: Freemium
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
3.7
THREAT LEVEL
■ tracking this CVE ✓ independent patch confirmation ⧗ same-origin mirror (GHSA) ⚠ active exploitation verification policy →

Executive Summary

CVE-2024-1410 is a resource exhaustion vulnerability in Cloudflare's QUIC implementation, quiche. The flaw resides in the handling of connection ID retirement within the QUIC protocol. An unauthenticated remote attacker can exploit this by sending crafted NEW_CONNECTION_ID frames while artificially restricting the peer's congestion window, causing RETIRE_CONNECTION_ID frames to be sent slower than they are received. This leads to an unbounded queue of retired connection IDs, consuming excessive memory and potentially causing a denial of service (DoS). The vulnerability affects quiche versions prior to 0.19.2 and 0.20.1. The CVSS score is 3.7 (Low), reflecting the high complexity and low impact on availability, but the attack is remotely exploitable without authentication.

⚡ 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 quiche library, which is a Rust-based implementation of the QUIC protocol and HTTP/3, developed by Cloudflare. It is distributed as a Rust crate via crates.io. Organizations using quiche in their applications (e.g., proxies, CDN edge nodes, or custom QUIC servers) should verify their dependency version. The Rust ecosystem's supply chain is impacted, as any application depending on vulnerable quiche versions is susceptible. There is no known compromise of the package registry, but the vulnerability itself is a logic flaw in the library's code.

CVSS Breakdown & Threat Level

  • CVSS Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L
  • Base Score: 3.7 (Low)
  • Attack Vector: Network (AV:N) – Exploitable remotely.
  • Attack Complexity: Low (AC:L) – No special conditions required beyond sending crafted frames.
  • Privileges Required: None (PR:N) – No authentication needed.
  • User Interaction: None (UI:N) – No user action required.
  • Scope: Unchanged (S:U) – Impact is confined to the vulnerable component.
  • Confidentiality Impact: None (C:N) – No data exposure.
  • Integrity Impact: None (I:N) – No data modification.
  • Availability Impact: Low (A:L) – Resource exhaustion may degrade performance but not fully crash the system.

Threat Level: Low. The attack requires the attacker to control the congestion window of the peer, which is non-trivial in practice. However, in controlled environments (e.g., shared hosting, CDN edge), the impact could be more severe.

Deep Dive & Mechanics

The vulnerability is rooted in the QUIC protocol's connection ID management, as defined in RFC 9000, Section 5.1. Each QUIC connection uses connection IDs to identify the connection. Endpoints advertise a limit on the number of active connection IDs via the active_connection_id_limit transport parameter. The peer can issue new IDs using NEW_CONNECTION_ID frames, but must retire old ones to stay within the limit. Retirement is triggered by the retire_prior_to field in NEW_CONNECTION_ID, which prompts the recipient to send a RETIRE_CONNECTION_ID frame.

In vulnerable quiche versions, when the attacker sends NEW_CONNECTION_ID frames with a high retire_prior_to value, the victim enqueues retirement requests. If the attacker also restricts the victim's congestion window (e.g., by limiting the rate of acknowledgments or using other QUIC mechanisms), the victim cannot send RETIRE_CONNECTION_ID frames fast enough. The queue of pending retirements grows unboundedly, consuming memory. This is a classic resource exhaustion (CWE-770) scenario.

The fix in versions 0.19.2 and 0.20.1 likely imposes a limit on the number of pending retirement entries or ensures that retirement processing is not blocked by congestion control.

Vulnerable vs. Patched Code

The vulnerable code likely resides in the connection ID management module. Below is a conceptual comparison.

Vulnerable Code (simplified Rust pseudocode):

// In connection.rs
struct Connection {
    pending_retirements: Vec<u64>, // unbounded queue
    // ...
}

fn on_new_connection_id(&mut self, frame: NewConnectionId) {
    for id in frame.retire_prior_to..self.next_id {
        self.pending_retirements.push(id);
    }
    // No limit check on pending_retirements
}

fn send_retire_frames(&mut self) {
    // Only sends if congestion window allows, but does not limit queue size
    while self.congestion_window_available() && !self.pending_retirements.is_empty() {
        let id = self.pending_retirements.pop_front();
        self.send_retire_connection_id(id);
    }
}

Patched Code (conceptual):

const MAX_PENDING_RETIREMENTS: usize = 1000;

fn on_new_connection_id(&mut self, frame: NewConnectionId) {
    let new_ids: Vec<u64> = (frame.retire_prior_to..self.next_id).collect();
    if self.pending_retirements.len() + new_ids.len() > MAX_PENDING_RETIREMENTS {
        // Drop or reject excess retirements
        return;
    }
    self.pending_retirements.extend(new_ids);
}

The patch adds a hard limit on the pending retirement queue, preventing unbounded growth.

Exploitation & Lab Setup

Red Team

Prerequisites:

  • A target running quiche < 0.19.2 or < 0.20.1 (e.g., a custom QUIC server or proxy).
  • Network access to the target.
  • Ability to send crafted QUIC packets (e.g., using a custom script or Scapy).

Exploitation Steps:

  1. Establish a QUIC connection to the target.
  2. Send a series of NEW_CONNECTION_ID frames with increasing retire_prior_to values, forcing the target to enqueue many retirement requests.
  3. Simultaneously, manipulate the congestion window by sending packets that are not acknowledged, or by using a small initial window, to slow down the victim's ability to send RETIRE_CONNECTION_ID frames.
  4. Monitor memory usage on the target. The queue will grow, consuming memory until the process is killed or becomes unresponsive.

Example Python script (using a QUIC library like aioquic):

# Note: This is a conceptual example. Actual exploitation requires deep QUIC knowledge.
import asyncio
from aioquic.asyncio import connect
from aioquic.quic.connection import QuicConnection

async def exploit(host, port):
    async with connect(host, port, create_protocol=QuicConnection) as conn:
        # Send many NEW_CONNECTION_ID frames
        for i in range(10000):
            frame = QuicFrame(type=0x18, data=...)  # NEW_CONNECTION_ID
            conn.send_frame(frame)
            await asyncio.sleep(0.001)  # Rate limit to avoid immediate detection
        # Keep connection alive to prevent cleanup
        await asyncio.sleep(60)

Blue Team

Detection:

  • Monitor memory usage of quiche processes. A sudden increase in memory without corresponding traffic may indicate exploitation.
  • Look for a high number of NEW_CONNECTION_ID frames relative to RETIRE_CONNECTION_ID frames in network logs.
  • Use the detection rules below.

Mitigation:

  • Immediately upgrade to quiche 0.19.2 or 0.20.1.
  • If patching is not possible, implement a rate limiter on NEW_CONNECTION_ID frames at the application or network level.
  • Monitor for anomalous QUIC frame patterns.

Indicators of Compromise (IOCs)

  • Network IOCs:

    • High volume of NEW_CONNECTION_ID frames (QUIC frame type 0x18) from a single source.
    • Low volume of RETIRE_CONNECTION_ID frames (type 0x19) relative to NEW_CONNECTION_ID.
    • Unusual QUIC connection patterns with many ID rotations.
  • Host IOCs:

    • Excessive memory consumption by the quiche process.
    • Log entries indicating "pending retirements queue full" or similar errors (if patched version logs such events).
    • CPU spikes due to garbage collection or memory pressure.
  • File IOCs:

    • Core dumps from quiche processes due to out-of-memory (OOM) kills.

Detection Engineering

YARA Rule

rule CVE_2024_1410_quiche_memory_exhaustion {
    meta:
        description = "Detects quiche processes with excessive memory usage indicative of CVE-2024-1410 exploitation"
        author = "Valters IT"
        date = "2025-04-10"
        reference = "CVE-2024-1410"
    strings:
        $quiche = "quiche" nocase
        $memory = /memory:\s*\d+[MG]B/  // Simplified; real rule would use process memory
    condition:
        $quiche and $memory
}

Sigma Rule

title: CVE-2024-1410 - Quiche Memory Exhaustion via Connection ID Retirement
id: 8a9b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d
status: experimental
description: Detects excessive memory usage in quiche processes, potentially indicating exploitation of CVE-2024-1410.
author: Valters IT
date: 2025-04-10
references:
    - https://nvd.nist.gov/vuln/detail/CVE-2024-1410
logsource:
    category: process_creation
    product: linux
detection:
    selection:
        Image|endswith: '/quiche'
    condition: selection
    # Note: This is a placeholder. Real detection would require memory monitoring.
falsepositives:
    - Legitimate high-traffic QUIC servers
level: medium

Suricata Rule

alert udp any any -> any 443 (msg:"CVE-2024-1410 - Excessive NEW_CONNECTION_ID frames"; content:"|18|"; depth:1; threshold: type both, track by_src, count 100, seconds 10; sid:1000001; rev:1;)

Note: This rule detects a high rate of NEW_CONNECTION_ID frames (type 0x18) from a single source, which may indicate exploitation.

Remediation & Mitigation

Immediate Actions:

  1. Patch: Upgrade quiche to version 0.19.2 or 0.20.1 (or later). These versions include a fix that limits the pending retirement queue.
  2. Workaround: If patching is not possible, implement a rate limiter on incoming NEW_CONNECTION_ID frames at the application layer. For example, reject frames if the number of pending retirements exceeds a threshold.
  3. Monitor: Enable logging for connection ID management and monitor for excessive retirement activity.

Long-Term Measures:

  • Conduct a code review of QUIC implementations to ensure similar resource exhaustion vulnerabilities are not present.
  • Implement resource limits (e.g., memory caps) for each QUIC connection.
  • Use network-level rate limiting for QUIC frames.

Valters IT Signature: This report was generated by Valters IT DevSecOps AI. For questions, contact security@valters-it.com.

◈ SOURCE Analysis & enrichment: valtersit.com/cve/CVE-2024-1410/ · 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.