Cloudanix VulnDB

CVE-2024-22189

High · 7.5

CVSS

7.5

EPSS

1.1%

Published

Apr 4, 2024

CISA due date

—

Cloudanix analysis

Monitor only SSVC: Track

Attackers can crash servers that use a popular Go library for fast internet connections by overwhelming them with special connection-management messages until they run out of memory.

Exploitation
Remote Unauthenticated
Attacker needs
None
Complexity
Moderate
Impact
Denial Of Service
Component
Library
Class
Denial of service
Remediation
Upgrade
Effort
Medium
Patch risk
Low

What it actually does

Allows remote attacker to exhaust peer memory by flooding NEW_CONNECTION_ID frames that retire connection IDs while suppressing the expected RETIRE_CONNECTION_ID responses through congestion window collapse via selective ACKs and RTT manipulation.

Why it matters to the business

Denial of service against any service using vulnerable quic-go, causing outages for QUIC-based applications with no available workarounds until patched.

How an attack unfolds

Attacker establishes a QUIC connection then sends a large volume of NEW_CONNECTION_ID frames; by selectively acknowledging packets the attacker shrinks the receiver congestion window and skews RTT estimates so that the vast majority of required RETIRE_CONNECTION_ID responses are never sent, accumulating memory until the peer OOMs.

How to fix it

Upgrade quic-go to version 0.42.0 or later (commit 4a99b816ae3ab03ae5449d15aac45147c85ed47a). No workarounds exist.

How to confirm the fix worked

Verify deployed quic-go version is at least 0.42.0; monitor process memory usage under sustained NEW_CONNECTION_ID load after upgrade to confirm stability.

Typical attack path

  1. Establish QUIC connection to target
  2. Transmit large numbers of NEW_CONNECTION_ID frames retiring old connection IDs
  3. Selectively acknowledge received packets to collapse peer congestion window
  4. Manipulate observed RTT to further delay or suppress responses
  5. Continue frame flood until receiver memory exhaustion

How to detect it

Inspect QUIC connection logs or packet captures for abnormally high volumes of NEW_CONNECTION_ID frames without corresponding RETIRE_CONNECTION_ID responses; correlate with sudden memory growth in quic-go processes.

What your security team should do

  • Immediately upgrade all quic-go deployments to 0.42.0 or newer
  • Monitor memory consumption of QUIC services for anomalous growth
  • Add rate limiting or connection ID retirement validation in front of unpatched instances if upgrade cannot be immediate

The record

quic-go is an implementation of the QUIC protocol in Go. Prior to version 0.42.0, an attacker can cause its peer to run out of memory sending a large number of `NEW_CONNECTION_ID` frames that retire old connection IDs. The receiver is supposed to respond to each retirement frame with a `RETIRE_CONNECTION_ID` frame. The attacker can prevent the receiver from sending out (the vast majority of) these `RETIRE_CONNECTION_ID` frames by collapsing the peers congestion window (by selectively acknowledging received packets) and by manipulating the peer's RTT estimate. Version 0.42.0 contains a patch for the issue. No known workarounds are available.

Affected packages

Ecosystem Package Introduced Fixed
Go github.com/quic-go/quic-go 0 0.42.0
Chainguard caddy 0 2.7.6-r6
Chainguard caddy-fips 0 2.7.6-r4
Chainguard caddy-man 0 2.7.6-r6
Chainguard caddy-man 0 2.7.6-r4
Chainguard caddy-src 0 2.7.6-r6
Chainguard cloudflared 0 2024.1.0-r7
Chainguard coredns 0 1.11.1-r12
Chainguard coredns-compat 0 1.11.1-r12
Chainguard coredns-fips 0 1.12.0-r9
Chainguard eks-distro-coredns-1.9 0 1.9.3-r4
Chainguard go-ipfs-fips 0 0.27.0-r3
Chainguard ipfs 0 0.28.0-r0
Chainguard k3s 0 1.29.3-r3
Chainguard k3s-embedded 0 1.29.3-r3
Chainguard k3s-images 0 1.29.3-r3
Chainguard k3s-multicall 0 1.29.3-r3
Chainguard k3s-static 0 1.29.3-r3
Chainguard kuma-coredns 0 1.11.1-r12
Chainguard q 0 0.19.2-r2
Debian:11 golang-github-lucas-clemente-quic-go 0 No fix
Debian:12 golang-github-lucas-clemente-quic-go 0 No fix
Debian:13 golang-github-lucas-clemente-quic-go 0 No fix
Red Hat:ansible_automation_platform:2.5::el8 automation-controller-venv-tower 0 0:4.6.2-1.el8ap
Red Hat:ansible_automation_platform:2.5::el8 automation-gateway-server 0 0:2.5.3-1.el8ap
Red Hat:ansible_automation_platform:2.5::el8 receptor 0 0:1.4.9-2.el8ap
Red Hat:ansible_automation_platform:2.5::el8 receptor-debuginfo 0 0:1.4.9-2.el8ap
Red Hat:ansible_automation_platform:2.5::el8 receptor-debugsource 0 0:1.4.9-2.el8ap
Red Hat:ansible_automation_platform:2.5::el8 receptorctl 0 0:1.4.9-2.el8ap
Red Hat:ansible_automation_platform:2.5::el9 automation-controller-venv-tower 0 0:4.6.2-1.el9ap
Red Hat:ansible_automation_platform:2.5::el9 automation-gateway-server 0 0:2.5.3-1.el9ap
Red Hat:ansible_automation_platform:2.5::el9 receptor 0 0:1.4.9-2.el9ap
Red Hat:ansible_automation_platform:2.5::el9 receptor-debuginfo 0 0:1.4.9-2.el9ap
Red Hat:ansible_automation_platform:2.5::el9 receptor-debugsource 0 0:1.4.9-2.el9ap
Red Hat:ansible_automation_platform:2.5::el9 receptorctl 0 0:1.4.9-2.el9ap
Red Hat:ansible_automation_platform_developer:2.5::el8 automation-controller-venv-tower 0 0:4.6.2-1.el8ap
Red Hat:ansible_automation_platform_developer:2.5::el8 receptor 0 0:1.4.9-2.el8ap
Red Hat:ansible_automation_platform_developer:2.5::el8 receptor-debuginfo 0 0:1.4.9-2.el8ap
Red Hat:ansible_automation_platform_developer:2.5::el8 receptor-debugsource 0 0:1.4.9-2.el8ap
Red Hat:ansible_automation_platform_developer:2.5::el8 receptorctl 0 0:1.4.9-2.el8ap
Red Hat:ansible_automation_platform_developer:2.5::el9 automation-controller-venv-tower 0 0:4.6.2-1.el9ap
Red Hat:ansible_automation_platform_developer:2.5::el9 receptor 0 0:1.4.9-2.el9ap
Red Hat:ansible_automation_platform_developer:2.5::el9 receptor-debuginfo 0 0:1.4.9-2.el9ap
Red Hat:ansible_automation_platform_developer:2.5::el9 receptor-debugsource 0 0:1.4.9-2.el9ap
Red Hat:ansible_automation_platform_developer:2.5::el9 receptorctl 0 0:1.4.9-2.el9ap
Red Hat:ansible_automation_platform_inside:2.5::el8 receptor 0 0:1.4.9-2.el8ap
Red Hat:ansible_automation_platform_inside:2.5::el8 receptor-debuginfo 0 0:1.4.9-2.el8ap
Red Hat:ansible_automation_platform_inside:2.5::el8 receptor-debugsource 0 0:1.4.9-2.el8ap
Red Hat:ansible_automation_platform_inside:2.5::el8 receptorctl 0 0:1.4.9-2.el8ap
Red Hat:ansible_automation_platform_inside:2.5::el9 receptor 0 0:1.4.9-2.el9ap
Red Hat:ansible_automation_platform_inside:2.5::el9 receptor-debuginfo 0 0:1.4.9-2.el9ap
Red Hat:ansible_automation_platform_inside:2.5::el9 receptor-debugsource 0 0:1.4.9-2.el9ap
Red Hat:ansible_automation_platform_inside:2.5::el9 receptorctl 0 0:1.4.9-2.el9ap
SUSE:Package Hub 15 SP5 caddy 0 2.8.4-bp155.2.3.1
SUSE:Package Hub 15 SP6 caddy 0 2.8.4-bp156.3.3.1
SUSE:Package Hub 15 SP6 coredns 0 1.11.3-bp156.4.3.1
Ubuntu:22.04:LTS golang-github-lucas-clemente-quic-go 0 No fix
Ubuntu:24.04:LTS golang-github-lucas-clemente-quic-go 0 0.38.2-1
Ubuntu:24.10 golang-github-lucas-clemente-quic-go 0 0.38.2-1
Wolfi caddy 0 2.7.6-r6
Wolfi caddy-man 0 2.7.6-r6
Wolfi caddy-src 0 2.7.6-r6
Wolfi cloudflared 0 2024.1.0-r7
Wolfi coredns 0 1.11.1-r12
Wolfi coredns-compat 0 1.11.1-r12
Wolfi ipfs 0 0.28.0-r0
Wolfi k3s 0 1.29.3-r3
Wolfi k3s-embedded 0 1.29.3-r3
Wolfi k3s-images 0 1.29.3-r3
Wolfi k3s-multicall 0 1.29.3-r3
Wolfi k3s-static 0 1.29.3-r3
Wolfi kuma-coredns 0 1.11.1-r12
Wolfi q 0 0.19.2-r2
openSUSE:Leap 15.5 caddy 0 2.8.4-bp155.2.3.1
openSUSE:Leap 15.6 caddy 0 2.8.4-bp156.3.3.1
openSUSE:Leap 15.6 coredns 0 1.11.3-bp156.4.3.1
openSUSE:Leap 16.0 dnscrypt-proxy 0 2.1.16-bp160.1.1
openSUSE:Tumbleweed caddy 0 2.8.4-1.1
openSUSE:Tumbleweed coredns 0 1.11.1-5.1
openSUSE:Tumbleweed kubo 0 0.27.0-2.1
openSUSE:Tumbleweed syncthing 0 1.27.6-1.1

Related vulnerabilities