Skip to main content

Linux Kernel CVE-2024-26804

HIGH
Use After Free (CWE-416)
2024-04-04 416baaa9-dc9f-4396-8d5f-8c081fb06d67
7.8
CVSS 3.1 · Vendor: 416baaa9-dc9f-4396-8d5f-8c081fb06d67
Share

Severity by source

Vendor (416baaa9-dc9f-4396-8d5f-8c081fb06d67) PRIMARY
7.8 HIGH
AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
vuln.today AI
7.0 HIGH

AC:H reflects that exploitation requires a specific non-default recursive GRE/IPIP routing loop topology that must exist or be constructed on the target system.

3.1 AV:L/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H
4.0 AV:L/AC:H/AT:P/PR:L/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N

Primary rating from Vendor (416baaa9-dc9f-4396-8d5f-8c081fb06d67).

CVSS VectorVendor: 416baaa9-dc9f-4396-8d5f-8c081fb06d67

Attack Vector
Local
Attack Complexity
Low
Privileges Required
Low
User Interaction
None
Scope
Unchanged
Confidentiality
High
Integrity
High
Availability
High

Lifecycle Timeline

6
Analysis Updated
Aug 04, 2026 - 13:27 vuln.today
v2 (cvss_changed)
Analysis Updated
Aug 04, 2026 - 13:26 vuln.today
v1 (cvss_changed)
Re-analysis Queued
Aug 04, 2026 - 11:23 vuln.today
cvss_changed
Severity Changed
Aug 04, 2026 - 11:23 NVD
MEDIUM HIGH
CVSS changed
Aug 04, 2026 - 11:23 NVD
5.3 (MEDIUM) 7.8 (HIGH)
CVE Published
Apr 04, 2024 - 09:15 cve.org
MEDIUM 5.3

DescriptionCVE.org

In the Linux kernel, the following vulnerability has been resolved:

net: ip_tunnel: prevent perpetual headroom growth

syzkaller triggered following kasan splat: BUG: KASAN: use-after-free in __skb_flow_dissect+0x19d1/0x7a50 net/core/flow_dissector.c:1170 Read of size 1 at addr ffff88812fb4000e by task syz-executor183/5191 [..] kasan_report+0xda/0x110 mm/kasan/report.c:588 __skb_flow_dissect+0x19d1/0x7a50 net/core/flow_dissector.c:1170 skb_flow_dissect_flow_keys include/linux/skbuff.h:1514 [inline] ___skb_get_hash net/core/flow_dissector.c:1791 [inline] __skb_get_hash+0xc7/0x540 net/core/flow_dissector.c:1856 skb_get_hash include/linux/skbuff.h:1556 [inline] ip_tunnel_xmit+0x1855/0x33c0 net/ipv4/ip_tunnel.c:748 ipip_tunnel_xmit+0x3cc/0x4e0 net/ipv4/ipip.c:308 __netdev_start_xmit include/linux/netdevice.h:4940 [inline] netdev_start_xmit include/linux/netdevice.h:4954 [inline] xmit_one net/core/dev.c:3548 [inline] dev_hard_start_xmit+0x13d/0x6d0 net/core/dev.c:3564 __dev_queue_xmit+0x7c1/0x3d60 net/core/dev.c:4349 dev_queue_xmit include/linux/netdevice.h:3134 [inline] neigh_connected_output+0x42c/0x5d0 net/core/neighbour.c:1592 ... ip_finish_output2+0x833/0x2550 net/ipv4/ip_output.c:235 ip_finish_output+0x31/0x310 net/ipv4/ip_output.c:323 .. iptunnel_xmit+0x5b4/0x9b0 net/ipv4/ip_tunnel_core.c:82 ip_tunnel_xmit+0x1dbc/0x33c0 net/ipv4/ip_tunnel.c:831 ipgre_xmit+0x4a1/0x980 net/ipv4/ip_gre.c:665 __netdev_start_xmit include/linux/netdevice.h:4940 [inline] netdev_start_xmit include/linux/netdevice.h:4954 [inline] xmit_one net/core/dev.c:3548 [inline] dev_hard_start_xmit+0x13d/0x6d0 net/core/dev.c:3564 ...

The splat occurs because skb->data points past skb->head allocated area. This is because neigh layer does: __skb_pull(skb, skb_network_offset(skb));

... but skb_network_offset() returns a negative offset and __skb_pull() arg is unsigned. IOW, we skb->data gets "adjusted" by a huge value.

The negative value is returned because skb->head and skb->data distance is more than 64k and skb->network_header (u16) has wrapped around.

The bug is in the ip_tunnel infrastructure, which can cause dev->needed_headroom to increment ad infinitum.

The syzkaller reproducer consists of packets getting routed via a gre tunnel, and route of gre encapsulated packets pointing at another (ipip) tunnel. The ipip encapsulation finds gre0 as next output device.

This results in the following pattern:

1). First packet is to be sent out via gre0. Route lookup found an output device, ipip0.

2). ip_tunnel_xmit for gre0 bumps gre0->needed_headroom based on the future output device, rt.dev->needed_headroom (ipip0).

3). ip output / start_xmit moves skb on to ipip0. which runs the same code path again (xmit recursion).

4). Routing step for the post-gre0-encap packet finds gre0 as output device to use for ipip0 encapsulated packet.

tunl0->needed_headroom is then incremented based on the (already bumped) gre0 device headroom.

This repeats for every future packet:

gre0->needed_headroom gets inflated because previous packets' ipip0 step incremented rt->dev (gre0) headroom, and ipip0 incremented because gre0 needed_headroom was increased.

For each subsequent packet, gre/ipip0->needed_headroom grows until post-expand-head reallocations result in a skb->head/data distance of more than 64k.

Once that happens, skb->network_header (u16) wraps around when pskb_expand_head tries to make sure that skb_network_offset() is unchanged after the headroom expansion/reallocation.

After this skb_network_offset(skb) returns a different (and negative) result post headroom expansion.

The next trip to neigh layer (or anything else that would __skb_pull the network header) makes skb->data point to a memory location outside skb->head area.

v2: Cap the needed_headroom update to an arbitarily chosen upperlimit to prevent perpetual increase instead of dropping the headroom increment completely.

AnalysisAI

Use-after-free memory corruption in the Linux kernel's ip_tunnel subsystem allows a local low-privileged attacker to corrupt kernel memory and potentially escalate privileges by exploiting unbounded growth of the needed_headroom field in IP tunnel devices. When GRE and IPIP tunnel interfaces form a recursive routing loop, each packet transmission causes each tunnel device to increment the other's headroom without bound until the 16-bit skb->network_header field wraps around, causing skb->data to advance outside the allocated socket buffer memory region. Seven upstream patch commits are available across multiple stable kernel branches; no public exploit has been identified and this vulnerability is not listed in CISA KEV.

Technical ContextAI

The flaw resides in the Linux kernel's ip_tunnel infrastructure (net/ipv4/ip_tunnel.c), specifically within ip_tunnel_xmit(). When a routing topology is constructed where GRE-encapsulated packets route through an IPIP tunnel device whose output route points back at the GRE device - forming a recursive encapsulation loop - each transmission causes ip_tunnel_xmit() to bump dev->needed_headroom on each tunnel device based on the other's (already-inflated) headroom. This feedback loop has no ceiling, causing needed_headroom to grow with every packet. As pskb_expand_head() reallocates the socket buffer (skb) with growing headroom, once the distance between skb->head and skb->data exceeds 64KB, the 16-bit unsigned skb->network_header (u16) wraps around to a small incorrect value. Subsequent calls to skb_network_offset() return a negative integer; when passed to __skb_pull(), which treats its argument as unsigned, skb->data is advanced by a massive offset far past the end of the allocated skb->head memory area. The flow dissector then reads from this out-of-bounds location, constituting a use-after-free (CWE-416) and enabling memory corruption. CPE data confirms affected product as cpe:2.3:o:linux:linux_kernel across multiple version ranges including 6.8-rc1 through 6.8-rc4. The fix caps the needed_headroom update at an arbitrary upper limit to break the perpetual growth cycle.

RemediationAI

Apply the upstream kernel patches available across seven stable-branch commits at https://git.kernel.org/stable/c/: 049d7989c67e8dd50f07a2096dbafdb41331fb9b, 2e95350fe9db9d53c701075060ac8ac883b68aee, 5ae1e9922bbdbaeb9cfbe91085ab75927488ac0f, a0a1db40b23e8ff86dea2786c5ea1470bb23ecb9, ab63de24ebea36fe73ac7121738595d704b66d96, afec0c5cd2ed71ca95a8b36a5e6d03333bf34282, and f81e94d2dcd2397137edcb8b85f4c5bed5d22383. Apply distribution-provided kernel packages via apt, yum, or dnf as maintainers have backported these fixes - Debian LTS has already published an advisory at https://lists.debian.org/debian-lts-announce/2024/06/msg00017.html. Exact patched kernel version numbers from distribution advisories should be confirmed before deployment. As a compensating control pending patching, audit all IP tunnel interface configurations and routing tables to identify and dismantle any recursive GRE/IPIP routing loops; removing the specific tunnel routing topology that routes GRE-encapsulated traffic back through an IPIP device pointing at the GRE interface eliminates the triggering condition entirely. Note that broadly disabling all IP tunneling may disrupt legitimate VPN or overlay network functionality; target only the recursive routing pattern rather than tunnel interfaces generally.

CVE-2021-44228 CRITICAL POC
10.0 Dec 10

Apache Log4j2 contains a critical JNDI injection vulnerability known as 'Log4Shell' that allows unauthenticated remote c

CVE-2019-11043 CRITICAL POC
9.8 Oct 28

In PHP versions 7.1.x below 7.1.33, 7.2.x below 7.2.24 and 7.3.x below 7.3.11 in certain configurations of FPM setup it

CVE-2012-1823 CRITICAL POC
9.8 May 11

sapi/cgi/cgi_main.c in PHP before 5.3.12 and 5.4.x before 5.4.2, when configured as a CGI script (aka php-cgi), does not

CVE-2014-6271 CRITICAL POC
9.8 Sep 24

GNU Bash through 4.3 processes trailing strings after function definitions in the values of environment variables, which

CVE-2017-7494 CRITICAL POC
9.8 May 30

Samba since version 3.5.0 and before 4.6.4, 4.5.10 and 4.4.14 is vulnerable to remote code execution vulnerability, allo

CVE-2012-0507 CRITICAL POC
9.8 Jun 07

Unspecified vulnerability in the Java Runtime Environment (JRE) component in Oracle Java SE 7 Update 2 and earlier, 6 Up

CVE-2025-49113 CRITICAL POC
9.9 Jun 02

Roundcube Webmail contains a critical PHP object deserialization vulnerability (CVE-2025-49113, CVSS 9.9) that allows au

CVE-2022-30333 HIGH POC
7.5 May 09

RARLAB UnRAR before 6.12 on Linux and UNIX allows directory traversal to write to files during an extract (aka unpack) o

CVE-2016-3714 HIGH POC
8.4 May 05

The (1) EPHEMERAL, (2) HTTPS, (3) MVG, (4) MSL, (5) TEXT, (6) SHOW, (7) WIN, and (8) PLT coders in ImageMagick before 6.

CVE-2017-12617 HIGH POC
8.1 Oct 04

When running Apache Tomcat versions 9.0.0.M1 to 9.0.0, 8.5.0 to 8.5.22, 8.0.0.RC1 to 8.0.46 and 7.0.0 to 7.0.81 with HTT

CVE-2020-1938 CRITICAL POC
9.8 Feb 24

When using the Apache JServ Protocol (AJP), care must be taken when trusting incoming connections to Apache Tomcat. Rate

CVE-2018-7602 CRITICAL POC
9.8 Jul 19

A remote code execution vulnerability exists within multiple subsystems of Drupal 7.x and 8.x. Rated critical severity (

Share

CVE-2024-26804 vulnerability details – vuln.today

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy