Every CVE Search/ Get API key

CVE-2024-53259

quic-go affected by an ICMP Packet Too Large Injection Attack on Linux

6.5 MediumPublic exploitFix available

quic-go is an implementation of the QUIC protocol in Go. An off-path attacker can inject an ICMP Packet Too Large packet. Since affected quic-go versions used IP_PMTUDISC_DO, the kernel would then return a "message too large" error on sendmsg, i.e. when quic-go attempts to send a packet that exceeds the MTU claimed in that ICMP packet. By setting this value to smaller than 1200 bytes (the minimum MTU for QUIC), the attacker can disrupt a QUIC connection. Crucially, this can be done after completion of the handshake, thereby circumventing any TCP fallback that might be implemented on the application layer (for example, many browsers fall back to HTTP over TCP if they're unable to establish a QUIC connection). The attacker needs to at least know the client's IP and port tuple to mount an attack. This vulnerability is fixed in 0.48.2.

Attack profile

How easy it is to exploit

Attack vector
Adjacent network
Complexity
Low
Privileges needed
None
User interaction
None

What an attacker can affect

Confidentiality
None
Integrity
None
Availability
High

Exploit likelihood

0.60%Up 0.6 points since Dec 3, 2024
90%50%10%1%

What each source reports

CVE List Score used 6.5

quic-go affected by an ICMP Packet Too Large Injection Attack on Linux

quic-go is an implementation of the QUIC protocol in Go. An off-path attacker can inject an ICMP Packet Too Large packet. Since affected quic-go versions used IP_PMTUDISC_DO, the kernel would then return a "message too large" error on sendmsg, i.e. when quic-go attempts to send a packet that exceeds the MTU claimed in that ICMP packet. By setting this value to smaller than 1200 bytes (the minimum MTU for QUIC), the attacker can disrupt a QUIC connection. Crucially, this can be done after completion of the handshake, thereby circumventing any TCP fallback that might be implemented on the application layer (for example, many browsers fall back to HTTP over TCP if they're unable to establish a QUIC connection). The attacker needs to at least know the client's IP and port tuple to mount an attack. This vulnerability is fixed in 0.48.2.

Record
CVE-2024-53259
CVSS 3.1
6.5 MediumCVSS:3.1/AV:A/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
Weakness
CWE-345
Updated
2026-11-02
EUVDEUVD-2024-3494 6.5

quic-go is an implementation of the QUIC protocol in Go. An off-path attacker can inject an ICMP Packet Too Large packet. Since affected quic-go versions used IP_PMTUDISC_DO, the kernel would then return a "message too large" error on sendmsg, i.e. when quic-go attempts to send a packet that exceeds the MTU claimed in that ICMP packet. By setting this value to smaller than 1200 bytes (the minimum MTU for QUIC), the attacker can disrupt a QUIC connection. Crucially, this can be done after completion of the handshake, thereby circumventing any TCP fallback that might be implemented on the application layer (for example, many browsers fall back to HTTP over TCP if they're unable to establish a QUIC connection). The attacker needs to at least know the client's IP and port tuple to mount an attack. This vulnerability is fixed in 0.48.2.

Record
EUVD-2024-3494
CVSS 3.1
6.5 MediumCVSS:3.1/AV:A/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
Updated
2026-11-03
GitHub AdvisoriesGHSA-px8v-pp82-rcvr 6.0

quic-go affected by an ICMP Packet Too Large Injection Attack on Linux

Impact

An off-path attacker can inject an ICMP Packet Too Large packet. Since affected quic-go versions used IP_PMTUDISC_DO, the kernel would then return a "message too large" error on sendmsg, i.e. when quic-go attempts to send a packet that exceeds the MTU claimed in that ICMP packet.

By setting this value to smaller than 1200 bytes (the minimum MTU for QUIC), the attacker can disrupt a QUIC connection. Crucially, this can be done after completion of the handshake, thereby circumventing any TCP fallback that might be implemented on the application layer (for example, many browsers fall back to HTTP over TCP if they're unable to establish a QUIC connection).

As far as I understand, the kernel tracks the MTU per 4-tuple, so the attacker needs to at least know the client's IP and port tuple to mount an attack (assuming that it knows the server's IP and port).

Patches

The fix is easy: Use IP_PMTUDISC_PROBE instead of IP_PMTUDISC_DO. This socket option only sets the DF bit, but disables the kernel's MTU tracking.

Has the problem been patched? What versions should users upgrade to?

Fixed in https://github.com/quic-go/quic-go/pull/4729 Released in https://github.com/quic-go/quic-go/releases/tag/v0.48.2

Workarounds

Is there a way for users to fix or remediate the vulnerability without upgrading?

Use iptables to drop ICMP Unreachable packets.

References

Are there any links users can visit to find out more?

This bug was discovered while doing research for my new IETF draft on IP fragmentation: https://datatracker.ietf.org/doc/draft-seemann-tsvwg-udp-fragmentation/

Record
GHSA-px8v-pp82-rcvr
CVSS 4.0
6.0 MediumCVSS:4.0/AV:A/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N
CVSS 3.1
6.5 MediumCVSS:3.1/AV:A/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
Weakness
CWE-345
Updated
2026-11-02
NVD 6.5

quic-go is an implementation of the QUIC protocol in Go. An off-path attacker can inject an ICMP Packet Too Large packet. Since affected quic-go versions used IP_PMTUDISC_DO, the kernel would then return a "message too large" error on sendmsg, i.e. when quic-go attempts to send a packet that exceeds the MTU claimed in that ICMP packet. By setting this value to smaller than 1200 bytes (the minimum MTU for QUIC), the attacker can disrupt a QUIC connection. Crucially, this can be done after completion of the handshake, thereby circumventing any TCP fallback that might be implemented on the application layer (for example, many browsers fall back to HTTP over TCP if they're unable to establish a QUIC connection). The attacker needs to at least know the client's IP and port tuple to mount an attack. This vulnerability is fixed in 0.48.2.

Record
CVE-2024-53259
CVSS 3.1
6.5 MediumCVSS:3.1/AV:A/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
Weakness
CWE-345
Updated
2026-11-02
OSV 6.5

quic-go affected by an ICMP Packet Too Large Injection Attack on Linux

quic-go is an implementation of the QUIC protocol in Go. An off-path attacker can inject an ICMP Packet Too Large packet. Since affected quic-go versions used IP_PMTUDISC_DO, the kernel would then return a "message too large" error on sendmsg, i.e. when quic-go attempts to send a packet that exceeds the MTU claimed in that ICMP packet. By setting this value to smaller than 1200 bytes (the minimum MTU for QUIC), the attacker can disrupt a QUIC connection. Crucially, this can be done after completion of the handshake, thereby circumventing any TCP fallback that might be implemented on the application layer (for example, many browsers fall back to HTTP over TCP if they're unable to establish a QUIC connection). The attacker needs to at least know the client's IP and port tuple to mount an attack. This vulnerability is fixed in 0.48.2.

Record
CVE-2024-53259
CVSS 3.1
6.5 MediumCVSS:3.1/AV:A/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
Weakness
CWE-345
Updated
2026-11-02
OSVDEBIAN-CVE-2024-53259 6.5

quic-go is an implementation of the QUIC protocol in Go. An off-path attacker can inject an ICMP Packet Too Large packet. Since affected quic-go versions used IP_PMTUDISC_DO, the kernel would then return a "message too large" error on sendmsg, i.e. when quic-go attempts to send a packet that exceeds the MTU claimed in that ICMP packet. By setting this value to smaller than 1200 bytes (the minimum MTU for QUIC), the attacker can disrupt a QUIC connection. Crucially, this can be done after completion of the handshake, thereby circumventing any TCP fallback that might be implemented on the application layer (for example, many browsers fall back to HTTP over TCP if they're unable to establish a QUIC connection). The attacker needs to at least know the client's IP and port tuple to mount an attack. This vulnerability is fixed in 0.48.2.

Record
DEBIAN-CVE-2024-53259
CVSS 3.1
6.5 MediumCVSS:3.1/AV:A/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
Updated
2026-11-02
Show 8 moreShow less
OSVGHSA-px8v-pp82-rcvr 6.0

quic-go affected by an ICMP Packet Too Large Injection Attack on Linux

Impact

An off-path attacker can inject an ICMP Packet Too Large packet. Since affected quic-go versions used IP_PMTUDISC_DO, the kernel would then return a "message too large" error on sendmsg, i.e. when quic-go attempts to send a packet that exceeds the MTU claimed in that ICMP packet.

By setting this value to smaller than 1200 bytes (the minimum MTU for QUIC), the attacker can disrupt a QUIC connection. Crucially, this can be done after completion of the handshake, thereby circumventing any TCP fallback that might be implemented on the application layer (for example, many browsers fall back to HTTP over TCP if they're unable to establish a QUIC connection).

As far as I understand, the kernel tracks the MTU per 4-tuple, so the attacker needs to at least know the client's IP and port tuple to mount an attack (assuming that it knows the server's IP and port).

Patches

The fix is easy: Use IP_PMTUDISC_PROBE instead of IP_PMTUDISC_DO. This socket option only sets the DF bit, but disables the kernel's MTU tracking.

Has the problem been patched? What versions should users upgrade to?

Fixed in https://github.com/quic-go/quic-go/pull/4729 Released in https://github.com/quic-go/quic-go/releases/tag/v0.48.2

Workarounds

Is there a way for users to fix or remediate the vulnerability without upgrading?

Use iptables to drop ICMP Unreachable packets.

References

Are there any links users can visit to find out more?

This bug was discovered while doing research for my new IETF draft on IP fragmentation: https://datatracker.ietf.org/doc/draft-seemann-tsvwg-udp-fragmentation/

Record
GHSA-px8v-pp82-rcvr
CVSS 4.0
6.0 MediumCVSS:4.0/AV:A/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N
CVSS 3.1
6.5 MediumCVSS:3.1/AV:A/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
Weakness
CWE-345
Updated
2026-11-02
OSVRHSA-2024:10766 6.5

Red Hat Security Advisory: Red Hat Ansible Automation Platform 2.5 Product Security and Bug Fix Update

Record
RHSA-2024:10766
CVSS 3.1
6.5 MediumCVSS:3.1/AV:A/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
Updated
2026-11-02
OSVUBUNTU-CVE-2024-53259 6.5

quic-go is an implementation of the QUIC protocol in Go. An off-path attacker can inject an ICMP Packet Too Large packet. Since affected quic-go versions used IP_PMTUDISC_DO, the kernel would then return a "message too large" error on sendmsg, i.e. when quic-go attempts to send a packet that exceeds the MTU claimed in that ICMP packet. By setting this value to smaller than 1200 bytes (the minimum MTU for QUIC), the attacker can disrupt a QUIC connection. Crucially, this can be done after completion of the handshake, thereby circumventing any TCP fallback that might be implemented on the application layer (for example, many browsers fall back to HTTP over TCP if they're unable to establish a QUIC connection). The attacker needs to at least know the client's IP and port tuple to mount an attack. This vulnerability is fixed in 0.48.2.

Record
UBUNTU-CVE-2024-53259
CVSS 3.1
6.5 MediumCVSS:3.1/AV:A/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
Updated
2026-11-02
OSVAZL-53807 No score

CVE-2024-53259 affecting package coredns for versions less than 1.11.1-16

quic-go is an implementation of the QUIC protocol in Go. An off-path attacker can inject an ICMP Packet Too Large packet. Since affected quic-go versions used IP_PMTUDISC_DO, the kernel would then return a "message too large" error on sendmsg, i.e. when quic-go attempts to send a packet that exceeds the MTU claimed in that ICMP packet. By setting this value to smaller than 1200 bytes (the minimum MTU for QUIC), the attacker can disrupt a QUIC connection. Crucially, this can be done after completion of the handshake, thereby circumventing any TCP fallback that might be implemented on the application layer (for example, many browsers fall back to HTTP over TCP if they're unable to establish a QUIC connection). The attacker needs to at least know the client's IP and port tuple to mount an attack. This vulnerability is fixed in 0.48.2.

Record
AZL-53807
Updated
2026-11-02
OSVAZL-53818 No score

CVE-2024-53259 affecting package coredns for versions less than 1.11.4-1

quic-go is an implementation of the QUIC protocol in Go. An off-path attacker can inject an ICMP Packet Too Large packet. Since affected quic-go versions used IP_PMTUDISC_DO, the kernel would then return a "message too large" error on sendmsg, i.e. when quic-go attempts to send a packet that exceeds the MTU claimed in that ICMP packet. By setting this value to smaller than 1200 bytes (the minimum MTU for QUIC), the attacker can disrupt a QUIC connection. Crucially, this can be done after completion of the handshake, thereby circumventing any TCP fallback that might be implemented on the application layer (for example, many browsers fall back to HTTP over TCP if they're unable to establish a QUIC connection). The attacker needs to at least know the client's IP and port tuple to mount an attack. This vulnerability is fixed in 0.48.2.

Record
AZL-53818
Updated
2026-11-05
OSVGO-2024-3302 No score

ICMP Packet Too Large Injection Attack on Linux in github.com/quic-go/quic-go

ICMP Packet Too Large Injection Attack on Linux in github.com/quic-go/quic-go

Record
GO-2024-3302
Updated
2026-11-02
OSVopenSUSE-SU-2024:14544-1 No score

teleport-17.0.3-1.1 on GA media

These are all security issues fixed in the teleport-17.0.3-1.1 package on the GA media of openSUSE Tumbleweed.

Record
openSUSE-SU-2024:14544-1
Updated
2026-11-02
OSVopenSUSE-SU-2024:14567-1 No score

govulncheck-vulndb-0.0.20241209T183251-1.1 on GA media

These are all security issues fixed in the govulncheck-vulndb-0.0.20241209T183251-1.1 package on the GA media of openSUSE Tumbleweed.

Record
openSUSE-SU-2024:14567-1
Updated
2026-11-02

Affected products

Affected packages

Affected packages
PackageAffectedFixed
github.com/quic-go/quic-go
Go
before 0.48.2
0.48.2
coredns
Azure Linux:2
before 1.11.1-16
1.11.1-16
coredns
Azure Linux:3
before 1.11.4-1
1.11.4-1
golang-github-lucas-clemente-quic-go
Debian:12
All versions, plus listed versions
0.29.0-10.29.2-10.29.2-20.29.2-30.37.0-1
Show 19 moreShow less
0.37.4-10.37.4-1~bpo12+10.38.2-10.38.2-20.46.0-10.46.0-20.46.0-2~bpo12+10.50.0-10.50.1-10.50.1-20.54.0-10.54.0-20.54.0-30.54.1-10.55.0-10.59.0-10.59.0-20.59.0-2~bpo13+10.64.1-1
None known
golang-github-lucas-clemente-quic-go
Debian:13
before 0.50.0-1
0.50.0-1
golang-github-lucas-clemente-quic-go
Debian:14
before 0.50.0-1
0.50.0-1
automation-controller-venv-tower
Red Hat:ansible_automation_platform:2.5::el8
From an advisory covering 2 CVEs
before 0:4.6.3-1.el8ap
0:4.6.3-1.el8ap
automation-controller-venv-tower
Red Hat:ansible_automation_platform:2.5::el9
From an advisory covering 2 CVEs
before 0:4.6.3-1.el9ap
0:4.6.3-1.el9ap
receptor
Red Hat:ansible_automation_platform_developer:2.5::el8
From an advisory covering 2 CVEs
before 0:1.5.1-2.el8ap
0:1.5.1-2.el8ap
receptorctl
Red Hat:ansible_automation_platform_developer:2.5::el8
From an advisory covering 2 CVEs
before 0:1.5.1-2.el8ap
0:1.5.1-2.el8ap
Show 21 moreShow less
Affected packages
PackageAffectedFixed
receptor
Red Hat:ansible_automation_platform_inside:2.5::el8
From an advisory covering 2 CVEs
before 0:1.5.1-2.el8ap
0:1.5.1-2.el8ap
receptorctl
Red Hat:ansible_automation_platform_inside:2.5::el8
From an advisory covering 2 CVEs
before 0:1.5.1-2.el8ap
0:1.5.1-2.el8ap
receptor
Red Hat:ansible_automation_platform:2.5::el8
From an advisory covering 2 CVEs
before 0:1.5.1-2.el8ap
0:1.5.1-2.el8ap
receptor-debuginfo
Red Hat:ansible_automation_platform:2.5::el8
From an advisory covering 2 CVEs
before 0:1.5.1-2.el8ap
0:1.5.1-2.el8ap
receptor-debugsource
Red Hat:ansible_automation_platform:2.5::el8
From an advisory covering 2 CVEs
before 0:1.5.1-2.el8ap
0:1.5.1-2.el8ap
receptorctl
Red Hat:ansible_automation_platform:2.5::el8
From an advisory covering 2 CVEs
before 0:1.5.1-2.el8ap
0:1.5.1-2.el8ap
receptor
Red Hat:ansible_automation_platform_developer:2.5::el9
From an advisory covering 2 CVEs
before 0:1.5.1-2.el9ap
0:1.5.1-2.el9ap
receptorctl
Red Hat:ansible_automation_platform_developer:2.5::el9
From an advisory covering 2 CVEs
before 0:1.5.1-2.el9ap
0:1.5.1-2.el9ap
receptor
Red Hat:ansible_automation_platform_inside:2.5::el9
From an advisory covering 2 CVEs
before 0:1.5.1-2.el9ap
0:1.5.1-2.el9ap
receptorctl
Red Hat:ansible_automation_platform_inside:2.5::el9
From an advisory covering 2 CVEs
before 0:1.5.1-2.el9ap
0:1.5.1-2.el9ap
receptor
Red Hat:ansible_automation_platform:2.5::el9
From an advisory covering 2 CVEs
before 0:1.5.1-2.el9ap
0:1.5.1-2.el9ap
receptor-debuginfo
Red Hat:ansible_automation_platform:2.5::el9
From an advisory covering 2 CVEs
before 0:1.5.1-2.el9ap
0:1.5.1-2.el9ap
receptor-debugsource
Red Hat:ansible_automation_platform:2.5::el9
From an advisory covering 2 CVEs
before 0:1.5.1-2.el9ap
0:1.5.1-2.el9ap
receptorctl
Red Hat:ansible_automation_platform:2.5::el9
From an advisory covering 2 CVEs
before 0:1.5.1-2.el9ap
0:1.5.1-2.el9ap
golang-github-lucas-clemente-quic-go
Ubuntu:22.04:LTS
All versions, plus listed versions
0.18.0-30.24.0-10.25.0-1
None known
golang-github-lucas-clemente-quic-go
Ubuntu:24.04:LTS
All versions, plus listed versions
0.37.4-10.38.2-1
None known
golang-github-lucas-clemente-quic-go
Ubuntu:25.10
All versions, plus listed versions
0.50.0-10.50.1-2
None known
golang-github-lucas-clemente-quic-go
Ubuntu:26.10
All versions, plus listed versions
0.59.0-2
None known
golang-github-lucas-clemente-quic-go
Ubuntu:26.04:LTS
All versions, plus listed versions
0.50.1-20.59.0-2
None known
teleport
openSUSE:Tumbleweed
before 17.0.3-1.1
17.0.3-1.1
govulncheck-vulndb
openSUSE:Tumbleweed
From an advisory covering 21 CVEs
before 0.0.20241209T183251-1.1
0.0.20241209T183251-1.1

Public exploits

Links only. Every CVE stores no exploit code.

Public exploits
SourceLinkDate
PoC in GitHubkota-yata/cve-2024-532592024-12-04

History

History
RecordedChangedSources
affected
factsOSV
aliases, publishedEUVD
first indexedCVE List, GitHub Advisories, NVD, OSV, PoC in GitHub

Dates are when Every CVE recorded each change. Upstream dates may differ.

In short

CVE-2024-53259 is a medium vulnerability (CVSS 6.5) in Quic-go, published December 2, 2024. Public exploit code exists. EPSS puts the chance of exploitation in the next 30 days at 0.60%, the 49th percentile. Fixed in github.com/quic-go/quic-go 0.48.2.

References

Show 41 moreShow less
MoveEnter Open