CVE-2024-53259
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.
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
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 Medium
CVSS: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 Medium
CVSS: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 Medium
CVSS: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 Medium
CVSS: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 Medium
CVSS: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 Medium
CVSS: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 Medium
CVSS: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 Medium
CVSS: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 Medium
CVSS: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 Medium
CVSS: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 Medium
CVSS: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
| Package | Affected | Fixed |
|---|---|---|
github.com/quic-go/quic-goGo |
before 0.48.2 | 0.48.2 |
corednsAzure Linux:2 |
before 1.11.1-16 | 1.11.1-16 |
corednsAzure Linux:3 |
before 1.11.4-1 | 1.11.4-1 |
golang-github-lucas-clemente-quic-goDebian: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 less0.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-goDebian:13 |
before 0.50.0-1 | 0.50.0-1 |
golang-github-lucas-clemente-quic-goDebian:14 |
before 0.50.0-1 | 0.50.0-1 |
automation-controller-venv-towerRed 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-towerRed 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 |
receptorRed 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 |
receptorctlRed 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
| Package | Affected | Fixed |
|---|---|---|
receptorRed 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 |
receptorctlRed 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 |
receptorRed 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-debuginfoRed 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-debugsourceRed 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 |
receptorctlRed 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 |
receptorRed 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 |
receptorctlRed 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 |
receptorRed 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 |
receptorctlRed 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 |
receptorRed 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-debuginfoRed 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-debugsourceRed 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 |
receptorctlRed 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-goUbuntu: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-goUbuntu:24.04:LTS |
All versions, plus listed versions 0.37.4-10.38.2-1 |
None known |
golang-github-lucas-clemente-quic-goUbuntu:25.10 |
All versions, plus listed versions 0.50.0-10.50.1-2 |
None known |
golang-github-lucas-clemente-quic-goUbuntu:26.10 |
All versions, plus listed versions 0.59.0-2 |
None known |
golang-github-lucas-clemente-quic-goUbuntu:26.04:LTS |
All versions, plus listed versions 0.50.1-20.59.0-2 |
None known |
teleportopenSUSE:Tumbleweed |
before 17.0.3-1.1 | 17.0.3-1.1 |
govulncheck-vulndbopenSUSE: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.
| Source | Link | Date |
|---|---|---|
| PoC in GitHub | kota-yata/cve-2024-53259 | 2024-12-04 |
History
| Recorded | Changed | Sources |
|---|---|---|
| affected | ||
| facts | OSV | |
| aliases, published | EUVD | |
| first indexed | CVE 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
github.com/quic-go/quic-go/security/advisories/GHSA-px8v-pp82-rcvr
github.com/quic-go/quic-go/pull/4729
github.com/quic-go/quic-go/commit/ca31dd355cbe5fc6c5807992d9d1149c66c96a50
github.com/quic-go/quic-go/releases/tag/v0.48.2
nvd.nist.gov/vuln/detail/CVE-2024-53259
github.com/advisories/GHSA-px8v-pp82-rcvr
Show 41 moreShow less
github.com/CVEProject/cvelistV5/tree/main/cves/2024/53xxx/CVE-2024-53259.json
security-tracker.debian.org/tracker/CVE-2024-53259
github.com/quic-go/quic-go
datatracker.ietf.org/doc/draft-seemann-tsvwg-udp-fragmentation
access.redhat.com/errata/RHSA-2024:10766
access.redhat.com/security/updates/classification
bugzilla.redhat.com/show_bug.cgi?id=2327130
security.access.redhat.com/data/csaf/v2/advisories/2024/rhsa-2024_10766.json
access.redhat.com/security/cve/CVE-2024-52304
cve.org/CVERecord?id=CVE-2024-52304
nvd.nist.gov/vuln/detail/CVE-2024-52304
github.com/aio-libs/aiohttp/commit/259edc369075de63e6f3a4eaade058c62af0df71
github.com/aio-libs/aiohttp/security/advisories/GHSA-8495-4g3g-x7pr
access.redhat.com/security/cve/CVE-2024-53259
bugzilla.redhat.com/show_bug.cgi?id=2329991
cve.org/CVERecord?id=CVE-2024-53259
ubuntu.com/security/CVE-2024-53259
github.com/quic-go/quic-go/commit/34157e6455b07723d11385212a4e1328f57f1da5
lists.opensuse.org/archives/list/[email protected]/thread/4BHO6Y3CLIIC56622OVIQ4IETYGDAI4A
suse.com/security/cve/CVE-2024-53259
lists.opensuse.org/archives/list/[email protected]/thread/EK3MV2UFLDNRIXIWLVT5CJNSLB2MKFBU
suse.com/security/cve/CVE-2024-10220
suse.com/security/cve/CVE-2024-36620
suse.com/security/cve/CVE-2024-36621
suse.com/security/cve/CVE-2024-36623
suse.com/security/cve/CVE-2024-37820
suse.com/security/cve/CVE-2024-43784
suse.com/security/cve/CVE-2024-45719
suse.com/security/cve/CVE-2024-50948
suse.com/security/cve/CVE-2024-52003
suse.com/security/cve/CVE-2024-52529
suse.com/security/cve/CVE-2024-52801
suse.com/security/cve/CVE-2024-53264
suse.com/security/cve/CVE-2024-53858
suse.com/security/cve/CVE-2024-53862
suse.com/security/cve/CVE-2024-54131
suse.com/security/cve/CVE-2024-54132
suse.com/security/cve/CVE-2024-6156
suse.com/security/cve/CVE-2024-6219
suse.com/security/cve/CVE-2024-6538
suse.com/security/cve/CVE-2024-8676