CVE-2024-35884: udp: do not accept non-tunnel GSO skbs landing in a tunnel
In the Linux kernel, the following vulnerability has been resolved:
udp: do not accept non-tunnel GSO skbs landing in a tunnel
The Linux kernel CVE team has assigned CVE-2024-35884 to this issue.
Upstream advisory: https://lore.kernel.org/linux-cve-announce/2024051946-CVE-2024-35884-d4a4@gregkh/T
Other sources
In the Linux kernel, the following vulnerability has been resolved:
udp: do not accept non-tunnel GSO skbs landing in a tunnel
When rx-udp-gro-forwarding is enabled UDP packets might be GROed when being forwarded. If such packets might land in a tunnel this can cause various issues and udpgroreceive makes sure this isn't the case by looking for a matching socket. This is performed in udp4/6grolookupskb but only in the current netns. This is an issue with tunneled packets when the endpoint is in another netns. In such cases the packets will be GROed at the UDP level, which leads to various issues later on. The same thing can happen with rx-gro-list.
We saw this with geneve packets being GROed at the UDP level. In such case gsosize is set; later the packet goes through the geneve rx path, the geneve header is pulled, the offset are adjusted and fraglist skbs are not adjusted with regard to geneve. When those skbs hit skbfragment, it will misbehave. Different outcomes are possible depending on what the GROed skbs look like; from corrupted packets to kernel crashes.
One example is a BUGON[1] triggered in skbsegment while processing the fraglist. Because gsosize is wrong (geneve header was pulled) skbsegment thinks there is "geneve header size" of data in fraglist, although it's in fact the next packet. The BUGON itself has nothing to do with the issue. This is only one of the potential issues.
Looking up for a matching socket in udpgroreceive is fragile: the lookup could be extended to all netns (not speaking about performances) but nothing prevents those packets from being modified in between and we could still not find a matching socket. It's OK to keep the current logic there as it should cover most cases but we also need to make sure we handle tunnel packets being GROed too early.
This is done by extending the checks in udpunexpectedgso: GSO packets lacking the SKBGSOUDPTUNNEL/CSUM bits and landing in a tunnel must be segmented.
[1] kernel BUG at net/core/skbuff.c:4408! RIP: 0010:skbsegment+0xd2a/0xf70 udpgsosegment+0xaa/0x560
— NVD
Affected Software
Remediation
Recommended actions to resolve this vulnerability, in priority order.
- Upgrade
Upgrade
debian/linuxto a version that resolves this vulnerability.Fixed in 5.10.223-1Fixed in 5.10.234-1Fixed in 6.1.129-1Fixed in 6.1.135-1Fixed in 6.12.25-1Fixed in 6.12.27-1 - Upgrade
Upgrade
redhat/kernelto a version that resolves this vulnerability.Fixed in 5.10.215 - Upgrade
Upgrade
redhat/kernelto a version that resolves this vulnerability.Fixed in 5.15.154 - Upgrade
Upgrade
redhat/kernelto a version that resolves this vulnerability.Fixed in 6.1.85 - Upgrade
Upgrade
redhat/kernelto a version that resolves this vulnerability.Fixed in 6.6.26 - Upgrade
Upgrade
redhat/kernelto a version that resolves this vulnerability.Fixed in 6.8.5 - Upgrade
Upgrade
redhat/kernelto a version that resolves this vulnerability.Fixed in 6.9 - Upgrade
Upgrade
Linux kernelto a version that resolves this vulnerability.Patch CVE-2024-35884
Event History
Frequently Asked Questions
What is the severity of CVE-2024-35884?
CVE-2024-35884 has a severity rating that highlights its potential impact on the Linux kernel's UDP handling.
How do I fix CVE-2024-35884?
To fix CVE-2024-35884, update your Linux kernel to versions 5.10.215, 5.15.154, 6.1.85, 6.6.26, 6.8.5, 6.9, or any remedial version provided by your distribution.
Which versions of the kernel are affected by CVE-2024-35884?
CVE-2024-35884 affects various kernel versions including those prior to 5.10.215, 5.15.154, 6.1.85, 6.6.26, 6.8.5, and 6.9.
Is CVE-2024-35884 limited to Red Hat distributions?
No, CVE-2024-35884 affects both Red Hat and Debian distributions where the vulnerable kernel versions are utilized.
What type of vulnerability is CVE-2024-35884?
CVE-2024-35884 is a vulnerability in the Linux kernel related to UDP handling that may allow non-tunnel GSO skbs landing in a tunnel.