Skip to main content
CriticalProtected by PowerWAF

Ataque HTTP/2 Rapid Reset

CategoríaDDoSPrimera aparición2023Tiempo de lectura11 minVerificado2026-03-11
DEFINICIÓN

El ataque HTTP/2 Rapid Reset (CVE-2023-44487) explota el mecanismo de multiplexación y cancelación de streams en HTTP/2 para lanzar ataques DDoS a nivel de aplicación sin precedentes. El atacante abre streams HTTP/2 enviando frames HEADERS e inmediatamente los cancela con frames RST_STREAM, creando un ciclo asimétrico de agotamiento de recursos donde el servidor asigna y libera recursos para cada stream mientras el cliente prácticamente no tiene costo — alcanzando tasas de solicitud que superan los 200 millones por segundo desde botnets relativamente pequeñas.

Cómo Funciona Ataque HTTP/2 Rapid Reset

HTTP/2 introdujo la multiplexación de streams: múltiples intercambios concurrentes de solicitud/respuesta sobre una sola conexión TCP, identificados por IDs de stream. El protocolo incluye frames RST_STREAM para cancelar streams individuales — un mecanismo legítimo para cancelar descargas o abortar solicitudes innecesarias. El ataque Rapid Reset lo convierte en arma explotando una asimetría en el diseño del protocolo: enviar un frame HEADERS (abriendo un stream) le cuesta al cliente aproximadamente 9 bytes de sobrecarga de framing, mientras que el servidor debe asignar memoria para el estado del stream, analizar los encabezados (potencialmente descomprimiendo encabezados codificados con HPACK), inicializar la lógica de enrutamiento de solicitudes, asignar buffers y comenzar a procesar la solicitud. Cuando el RST_STREAM llega milisegundos después, el servidor debe entonces liberar todas esas asignaciones y limpiar los recursos. Este ciclo de asignación-liberación, repetido millones de veces por segundo a través de miles de conexiones, abruma la CPU y la memoria del servidor sin generar tráfico de respuesta significativo — el servidor queda atrapado en un bucle infinito de configuración y limpieza.

1

Establecer conexiones HTTP/2 legítimas al objetivo

El atacante completa handshakes TCP normales y negociaciones TLS con el servidor objetivo, estableciendo conexiones HTTP/2 válidas. Cada conexión pasa por el handshake completo de TLS 1.2/1.3, haciéndola indistinguible de un cliente legítimo a nivel de conexión. El atacante envía el preámbulo de conexión HTTP/2 (la cadena mágica 'PRI * HTTP/2.0' y el frame SETTINGS inicial) y negocia los parámetros de conexión. Una botnet de 20,000 nodos cada uno manteniendo 100 conexiones crea 2 millones de conexiones HTTP/2 concurrentes al objetivo.

2

Abrir streams rápidamente con HEADERS y cancelar con RST_STREAM

En cada conexión, el atacante envía un frame HEADERS para abrir un nuevo stream, inmediatamente seguido de un frame RST_STREAM (código de error CANCEL, 0x8) para cerrarlo. El frame HEADERS contiene una solicitud HTTP mínima pero válida (GET / HTTP/2), y el RST_STREAM llega antes de que el servidor complete el procesamiento. Los IDs de stream se incrementan con cada solicitud (1, 3, 5, 7...), y el atacante puede abrir y cancelar streams tan rápido como lo permita la conexión TCP — típicamente miles por segundo por conexión. El RST_STREAM llega dentro del mismo segmento TCP o en el inmediatamente siguiente.

3

Explotar la asimetría de asignación de recursos del lado del servidor

Por cada frame HEADERS, la implementación HTTP/2 del servidor debe: asignar memoria para la estructura de estado del stream (típicamente 1-4 KB), descomprimir encabezados codificados con HPACK, crear objetos de contexto de solicitud, inicializar la recolección de registros/métricas y comenzar a enrutar la solicitud al handler apropiado. Cuando llega el RST_STREAM, el servidor debe: abortar cualquier procesamiento en curso, liberar todos los recursos del stream, actualizar la contabilidad a nivel de conexión y potencialmente registrar la solicitud cancelada. Este ciclo de asignar-y-luego-liberar-inmediatamente es mucho más costoso que simplemente ignorar la solicitud, porque el servidor no tiene mecanismo para diferir la asignación hasta confirmar que el stream no será inmediatamente cancelado.

4

Evadir los límites de streams concurrentes usando cancelación rápida

Las implementaciones HTTP/2 aplican un límite máximo de streams concurrentes (SETTINGS_MAX_CONCURRENT_STREAMS, típicamente 100-256). En operación normal, esto limita cuántas solicitudes puede tener un cliente en vuelo simultáneamente. Sin embargo, RST_STREAM cierra un stream instantáneamente, liberando su espacio. Al cancelar cada stream inmediatamente, el atacante nunca alcanza el límite de concurrencia — cada stream existe por microsegundos. Una sola conexión puede por lo tanto generar miles de ciclos de apertura/cierre de stream por segundo a pesar del límite de streams concurrentes. Este es el fallo central del protocolo: la tasa de creación de streams es ilimitada porque el límite de concurrencia solo cuenta los streams activos, no el total de streams creados.

5

Abrumar al servidor generando tráfico de red mínimo

A diferencia de los ataques volumétricos que requieren ancho de banda masivo, HTTP/2 Rapid Reset es computacionalmente asimétrico. El atacante envía aproximadamente 20-30 bytes por ciclo de stream (frame HEADERS de 9 bytes + frame RST_STREAM de 13 bytes), mientras que el servidor realiza miles de bytes en asignación de memoria y operaciones intensivas de CPU por ciclo. Una botnet de 20,000 nodos cada uno generando 10,000 ciclos de stream por segundo produce 200 millones de 'solicitudes' por segundo — excediendo con creces cualquier patrón de tráfico legítimo — mientras usa un ancho de banda total relativamente modesto. La CPU del servidor se satura procesando eventos del ciclo de vida de streams, y las solicitudes legítimas experimentan latencia extrema o rechazo directo.

Ejemplos Reales

2023

CVE-2023-44487 — explotación zero-day en todo internet

Entre agosto y octubre de 2023, actores de amenazas explotaron la vulnerabilidad HTTP/2 Rapid Reset como zero-day contra objetivos en múltiples industrias antes de que el CVE fuera divulgado públicamente. Los ataques alcanzaron tasas de solicitud de 201 millones de solicitudes por segundo en algunos casos — 3 veces más grande que cualquier ataque HTTP DDoS previamente registrado — usando botnets de solo 20,000 máquinas comprometidas. La vulnerabilidad afectó virtualmente a toda implementación HTTP/2: Nginx, Apache HTTP Server, Apache Tomcat, Microsoft IIS, HAProxy, Envoy, gRPC (Go, C++, Python), Node.js, Golang net/http y .NET Kestrel, todos requirieron parches.

2023

Emergencia de parcheo a nivel de internet

El 10 de octubre de 2023, la divulgación coordinada de CVE-2023-44487 desencadenó uno de los mayores eventos de parcheo simultáneo en la historia de internet. CISA emitió el aviso AA23-283A instando a la acción inmediata. Cada servidor web importante, proxy reverso, balanceador de carga y biblioteca HTTP/2 lanzó parches en días: Nginx 1.25.3, Apache 2.4.58, Node.js 18.18.2/20.8.1, Go 1.21.3, HAProxy 2.8.4 y docenas más. La puntuación CVSS de 7.5 (Alta) reflejó la facilidad de explotación y el impacto universal en toda la infraestructura HTTP de internet.

2024

Ataques sostenidos contra el sector de servicios financieros

Durante la primera mitad de 2024, las instituciones financieras y empresas fintech se convirtieron en objetivos principales de ataques HTTP/2 Rapid Reset, incluso después de que los parches estuvieran disponibles. Muchas organizaciones ejecutaban proxies reversos sin parchear, balanceadores de carga internos o middleware heredado que aún procesaba streams HTTP/2 sin limitación de tasa. Los ataques alcanzaron picos de 50-100 millones de solicitudes por segundo contra bancos y procesadores de pagos individuales, causando fallos en gateways de API, tiempos de espera en transacciones y caídas de banca móvil. Los incidentes demostraron que la cola larga de la vulnerabilidad — infraestructura interna sin parchear detrás de proxies de borde parcheados — seguía siendo explotable meses después de la divulgación.

Impacto y Evaluación de Riesgo

HTTP/2 Rapid Reset representa un cambio de paradigma en DDoS a nivel de aplicación porque explota un fallo de diseño del protocolo en lugar de abrumar el ancho de banda o explotar errores de implementación. El ataque logra tasas de solicitud 10-100 veces más altas que las inundaciones HTTP tradicionales mientras usa una fracción del ancho de banda, haciéndolo excepcionalmente rentable para los atacantes. El impacto se amplifica por el despliegue casi universal de HTTP/2: más del 35% de todos los sitios web usan HTTP/2 a partir de 2024, y virtualmente cada servidor web moderno, nodo de borde de CDN, gateway de API y balanceador de carga implementa el protocolo. El costo del lado del servidor está dominado por el consumo de CPU (gestión del ciclo de vida de streams, descompresión HPACK, enrutamiento de solicitudes) en lugar del ancho de banda, lo que significa que las mitigaciones DDoS volumétricas tradicionales son ineficaces. Las fallas en cascada son comunes: los proxies frontend abrumados pasan solicitudes parciales a los backends, saturando los servidores de aplicación y los pools de conexiones a base de datos. La sigilosidad del ataque es notable — porque RST_STREAM cancela la solicitud antes de que se genere una respuesta, los registros de acceso pueden no capturar el tráfico de ataque, y la limitación de tasa tradicional basada en solicitudes no se activa porque ninguna solicitud se 'completa.'

Cómo Detectar Ataque HTTP/2 Rapid Reset

Monitorear métricas a nivel de frames HTTP/2, no solo conteos de solicitudes/respuestas. El indicador definitivo es una alta proporción de frames RST_STREAM respecto a respuestas completadas — durante la operación normal, RST_STREAM representa menos del 1% de los cierres de stream; durante un ataque Rapid Reset, se acerca al 100%. Rastrear la tasa de creación de streams por conexión: los clientes legítimos rara vez exceden 10-20 streams concurrentes, mientras que las conexiones de ataque reciclan miles de IDs de stream por segundo. Monitorear la brecha entre frames HEADERS y RST_STREAM — durante los ataques, RST_STREAM llega dentro del mismo segmento TCP o dentro de 1-2 RTTs del frame HEADERS, un patrón nunca visto en la navegación legítima. Correlacionar los picos de utilización de CPU con las métricas de conexión HTTP/2: un aumento de CPU sin un aumento correspondiente en solicitudes completadas o bytes de respuesta indica sobrecarga de procesamiento por la rotación del ciclo de vida de streams. Verificar los registros de error del servidor web en busca de patrones de reinicio de conexión y altas tasas de estado 499 (cliente cerró la conexión) o entradas de cancelación de stream. Implementar registro a nivel de frames HTTP/2 (disponible en compilaciones de depuración de Nginx y HAProxy a nivel de registro de tráfico) para capturar secuencias de frames HEADERS/RST_STREAM para análisis forense.

Cómo Prevenir Ataque HTTP/2 Rapid Reset

Parchear todas las implementaciones HTTP/2 inmediatamente — esta es la acción más crítica. Aplicar parches de proveedores para: Nginx (directiva http2_max_concurrent_streams + limitación de tasa de RST_STREAM), Apache (mod_http2 con limitación de tasa de streams), HAProxy (tune.h2.max-concurrent-streams + contabilidad de RST_STREAM), Node.js, Go, .NET Kestrel y todas las demás bibliotecas HTTP/2 en su stack. Configurar límites de tasa de streams por conexión: limitar el número total de streams creados (no solo concurrentes) dentro de una ventana de tiempo — por ejemplo, no más de 100 nuevos streams por segundo por conexión. Implementar limitación de tasa de RST_STREAM: desconectar conexiones que envían frames RST_STREAM a una tasa que exceda un umbral configurable (por ejemplo, 50 RST_STREAMs por segundo). Reducir SETTINGS_MAX_CONCURRENT_STREAMS al mínimo requerido para su aplicación (típicamente 64-128 en lugar del valor predeterminado de 256). Desplegar un proxy reverso o balanceador de carga como frontend que absorba la complejidad de conexiones HTTP/2 y reenvíe solo solicitudes validadas y completas a los servidores backend usando HTTP/1.1. Habilitar limitación de tasa a nivel de conexión basada en patrones de ciclo de vida de streams en lugar de solo conteo de solicitudes. Para entornos donde HTTP/2 no es requerido, considerar degradar a HTTP/1.1 como mitigación temporal hasta que toda la infraestructura esté parcheada. Desplegar un WAF con inspección a nivel de protocolo HTTP/2 que pueda detectar y bloquear patrones Rapid Reset en tiempo real.

Ejemplos de Código

Mitigation: Nginx HTTP/2 hardening against Rapid Reset
# Nginx configuration hardened against HTTP/2 Rapid Reset (CVE-2023-44487)
# Requires Nginx ≥ 1.25.3 (or backported security patch)

worker_processes auto;
worker_rlimit_nofile 65535;

events {
worker_connections 65535;
multi_accept on;
use epoll;
}

http {
# === HTTP/2 stream limits ===

# Maximum concurrent streams per connection (default 128)
# Lower values reduce Rapid Reset impact but may slow legitimate multiplexing
http2_max_concurrent_streams 64;

# Maximum number of requests per HTTP/2 connection before forcing reconnect
# Limits total stream IDs an attacker can cycle through
keepalive_requests 1000;

# Connection idle timeout — close unused connections quickly
keepalive_timeout 15s;

# === Rate limiting at the request level ===
limit_req_zone $binary_remote_addr zone=http2_rate:10m rate=50r/s;
limit_conn_zone $binary_remote_addr zone=http2_conn:10m;

server {
listen 443 ssl;
http2 on;

ssl_certificate /etc/ssl/certs/server.crt;
ssl_certificate_key /etc/ssl/private/server.key;

# TLS 1.2+ only (HTTP/2 requires TLS)
ssl_protocols TLSv1.2 TLSv1.3;

# Limit connections per IP
limit_conn http2_conn 20;

# Limit request rate per IP
limit_req zone=http2_rate burst=100 nodelay;

# Aggressive timeouts for request processing
client_header_timeout 5s;
client_body_timeout 10s;
send_timeout 10s;

location / {
proxy_pass http://backend;
proxy_http_version 1.1; # Forward to backends as HTTP/1.1
proxy_set_header Connection "";
proxy_connect_timeout 3s;
proxy_read_timeout 15s;
}
}
}
Detection: HTTP/2 Rapid Reset pattern analysis from access logs
import re
import time
import logging
from collections import defaultdict
from datetime import datetime, timedelta

logger = logging.getLogger('rapid_reset_detector')

def parse_nginx_log_line(line):
"""Parse Nginx combined log format with HTTP/2 info"""
# Pattern: IP - - [timestamp] "METHOD URI PROTO" status bytes "ref" "ua"
pattern = (
r'(\S+) \S+ \S+ \[([^\]]+)\] '
r'"(\S+) (\S+) (\S+)" (\d+) (\d+) '
r'"([^"]*)" "([^"]*)"'
)
match = re.match(pattern, line)
if not match:
return None
return {
'ip': match.group(1),
'timestamp': match.group(2),
'method': match.group(3),
'uri': match.group(4),
'protocol': match.group(5),
'status': int(match.group(6)),
'bytes': int(match.group(7)),
'user_agent': match.group(9)
}

def detect_rapid_reset_patterns(
log_file='/var/log/nginx/access.log',
window_seconds=10,
status_499_threshold=50,
zero_bytes_threshold=100
):
"""Detect HTTP/2 Rapid Reset indicators in Nginx access logs.

Key indicators:
- Status 499: client closed connection before response (RST_STREAM)
- Status 0: connection reset with no response sent
- 0-byte responses: request cancelled before body sent
- HTTP/2 protocol with high request rates from single IPs
"""
ip_windows = defaultdict(lambda: {
'total': 0, 'status_499': 0, 'status_0': 0,
'zero_bytes': 0, 'http2_requests': 0,
'user_agents': set()
})

with open(log_file, 'r') as f:
for line in f:
entry = parse_nginx_log_line(line.strip())
if not entry:
continue

ip = entry['ip']
stats = ip_windows[ip]
stats['total'] += 1

if entry['status'] == 499:
stats['status_499'] += 1
elif entry['status'] == 0:
stats['status_0'] += 1

if entry['bytes'] == 0:
stats['zero_bytes'] += 1

if 'HTTP/2' in entry['protocol']:
stats['http2_requests'] += 1

stats['user_agents'].add(entry['user_agent'])

# Analyze for Rapid Reset patterns
alerts = []
for ip, stats in ip_windows.items():
if stats['total'] < 10:
continue

cancelled_pct = (stats['status_499'] + stats['status_0']) / stats['total'] * 100
zero_bytes_pct = stats['zero_bytes'] / stats['total'] * 100

# Rapid Reset signature: high cancellation rate + HTTP/2 + high volume
is_suspicious = (
cancelled_pct > 80 and
stats['http2_requests'] > stats['total'] * 0.5 and
stats['total'] > status_499_threshold
)

if is_suspicious:
alerts.append({
'ip': ip,
'total_requests': stats['total'],
'cancelled_pct': round(cancelled_pct, 1),
'zero_bytes_pct': round(zero_bytes_pct, 1),
'http2_pct': round(stats['http2_requests'] / stats['total'] * 100, 1),
'user_agents': len(stats['user_agents']),
'severity': 'critical' if stats['total'] > 1000 else 'high'
})
logger.critical(
f'RAPID RESET PATTERN: {ip}{stats["total"]} requests, '
f'{cancelled_pct:.0f}% cancelled, {stats["http2_requests"]} HTTP/2'
)

return alerts

if __name__ == '__main__':
logging.basicConfig(level=logging.INFO)
alerts = detect_rapid_reset_patterns()
print(f'Detected {len(alerts)} suspicious IPs')
for alert in alerts:
print(f' {alert["ip"]}: {alert["total_requests"]} req, '
f'{alert["cancelled_pct"]}% cancelled')
Audit: Check HTTP/2 implementation versions for CVE-2023-44487 patches
#!/bin/bash
# Audit script to verify HTTP/2 components are patched against
# CVE-2023-44487 (Rapid Reset). Run on each server in your infrastructure.

echo "=== HTTP/2 Rapid Reset (CVE-2023-44487) Patch Audit ==="
echo

# Check Nginx
if command -v nginx &>/dev/null; then
version=$(nginx -v 2>&1 | grep -oP '[\d.]+')
echo "Nginx: $version"
if [[ "$(printf '%s\n' "1.25.3" "$version" | sort -V | head -1)" == "1.25.3" ]]; then
echo " ✓ Patched (≥ 1.25.3)"
else
echo " ✗ VULNERABLE — update to ≥ 1.25.3"
fi
# Check if stream limits are configured
if nginx -T 2>/dev/null | grep -q 'http2_max_concurrent_streams'; then
echo " ✓ http2_max_concurrent_streams configured"
else
echo " ! http2_max_concurrent_streams not set (using default)"
fi
fi

# Check Apache
if command -v httpd &>/dev/null || command -v apache2 &>/dev/null; then
version=$(httpd -v 2>/dev/null || apache2 -v 2>/dev/null | grep -oP '[\d.]+')
echo "Apache: $version"
if [[ "$(printf '%s\n' "2.4.58" "$version" | sort -V | head -1)" == "2.4.58" ]]; then
echo " ✓ Patched (≥ 2.4.58)"
else
echo " ✗ VULNERABLE — update to ≥ 2.4.58"
fi
fi

# Check HAProxy
if command -v haproxy &>/dev/null; then
version=$(haproxy -v 2>&1 | grep -oP '[\d.]+')
echo "HAProxy: $version"
fi

# Check Node.js
if command -v node &>/dev/null; then
version=$(node -v | tr -d 'v')
echo "Node.js: $version"
major=$(echo "$version" | cut -d. -f1)
if [[ $major -ge 21 ]]; then
echo " ✓ Major version ≥ 21"
elif [[ $major -eq 20 ]]; then
if [[ "$(printf '%s\n' "20.8.1" "$version" | sort -V | head -1)" == "20.8.1" ]]; then
echo " ✓ Patched (≥ 20.8.1)"
else
echo " ✗ VULNERABLE — update to ≥ 20.8.1"
fi
elif [[ $major -eq 18 ]]; then
if [[ "$(printf '%s\n' "18.18.2" "$version" | sort -V | head -1)" == "18.18.2" ]]; then
echo " ✓ Patched (≥ 18.18.2)"
else
echo " ✗ VULNERABLE — update to ≥ 18.18.2"
fi
fi
fi

# Check Go
if command -v go &>/dev/null; then
version=$(go version | grep -oP '[\d.]+')
echo "Go: $version"
if [[ "$(printf '%s\n' "1.21.3" "$version" | sort -V | head -1)" == "1.21.3" ]]; then
echo " ✓ Patched (≥ 1.21.3)"
else
echo " ✗ VULNERABLE — update to ≥ 1.21.3"
fi
fi

# Check if HTTP/2 is enabled on common ports
echo
echo "=== HTTP/2 Exposure Check ==="
for port in 443 8443 8080; do
if ss -tlnp | grep -q ":${port} "; then
echo "Port $port: LISTENING"
fi
done

PowerWAF bloquea automáticamente Ataque HTTP/2 Rapid Reset antes de que llegue a tu servidor.

Implementa en minutos. Sin cambios de código. Plan gratuito disponible.

Los cupos del plan gratuito son limitados

Preguntas Frecuentes

Las inundaciones HTTP tradicionales requieren completar handshakes TCP y enviar solicitudes HTTP completas, generando tráfico de respuesta que ayuda a la limitación de tasa del servidor y a los costos de ancho de banda del atacante. HTTP/2 Rapid Reset crea una asimetría: el atacante envía datos mínimos (HEADERS + RST_STREAM, ~30 bytes por ciclo) mientras que el servidor realiza operaciones costosas (asignación de memoria, descompresión de encabezados, enrutamiento de solicitudes, limpieza de recursos) por cada ciclo. Además, porque el stream se cancela antes de completarse, evade la limitación de tasa basada en solicitudes, el registro de acceso y las métricas basadas en respuestas. Una botnet de 20,000 nodos usando Rapid Reset logra más de 200M solicitudes/seg — una inundación HTTP/1.1 equivalente requeriría millones de bots.
Sí, pero con un costo de rendimiento significativo. HTTP/2 proporciona compresión de encabezados (HPACK), multiplexación de streams, server push y priorización de streams que mejoran los tiempos de carga de página un 15-50% y reducen la sobrecarga de conexiones. Deshabilitar HTTP/2 fuerza el retroceso a HTTP/1.1, requiriendo más conexiones TCP (una por solicitud concurrente), más ancho de banda (encabezados sin comprimir) y mayor latencia para páginas complejas. Un mejor enfoque: parchear su implementación HTTP/2 y configurar la limitación de tasa de streams. Si debe deshabilitar HTTP/2 como medida de emergencia, hágalo solo temporalmente hasta que los parches sean aplicados.
Verificar la versión de cada componente en su cadena HTTP/2: Nginx >= 1.25.3 (o parche retroportado), Apache >= 2.4.58, HAProxy >= 2.8.4/2.7.6/2.6.16, Node.js >= 18.18.2 o >= 20.8.1, Go >= 1.21.3, .NET >= 6.0.23/7.0.12/8.0.0, Tomcat >= 8.5.94/9.0.81/10.1.14. No solo verifique su proxy de borde — los balanceadores de carga internos, gateways de API, sidecars de service mesh (Envoy) y servidores gRPC también necesitan parcheo. Verificar que la limitación de tasa de streams esté realmente configurada, no solo que la versión parcheada esté instalada. Muchos parches añaden la capacidad pero no habilitan límites agresivos por defecto.
Sí, pero solo si el WAF tiene visibilidad a nivel de frames HTTP/2 — los WAFs tradicionales que solo inspeccionan contenido de solicitudes/respuestas HTTP no pueden ver los patrones subyacentes de frames HEADERS/RST_STREAM. Un WAF con inspección a nivel de protocolo puede detectar la firma del ataque: altas tasas de RST_STREAM, frames HEADERS inmediatamente seguidos de RST_STREAM sin esperar una respuesta, e IDs de stream incrementándose rápidamente sin ningún intercambio de solicitud/respuesta completado. PowerWAF proporciona protección HTTP/2 Rapid Reset a través del análisis comportamental de patrones del ciclo de vida de streams, identificando y bloqueando automáticamente conexiones que exhiben tasas de cancelación que indican comportamiento de ataque en lugar de navegación legítima.
HTTP/3 usa QUIC sobre UDP en lugar de TCP, y su mecanismo de cancelación de streams (frames STOP_SENDING + RESET_STREAM) difiere arquitectónicamente. QUIC incluye control de flujo integrado y migración de conexión que pueden limitar algunos patrones de rapid reset. Sin embargo, la asimetría fundamental — abrir un stream es barato para el cliente, costoso para el servidor — existe en cualquier protocolo basado en solicitudes. Las implementaciones QUIC deberían implementar proactivamente limitación de tasa de creación de streams y monitoreo de tasa de cancelación basándose en las lecciones aprendidas de CVE-2023-44487. A principios de 2026, no se ha demostrado ninguna vulnerabilidad equivalente de rapid reset en las principales implementaciones QUIC, pero el protocolo aún está madurando y los investigadores de seguridad continúan analizándolo.