Linux Kernel
CVE-2024-35969
HIGH
Severity by source
AV:A/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
Adjacent vector retained (RA-triggered deletion requires link adjacency); AC:H assigned because race condition requires precise concurrent timing, not AC:L as NVD scored.
Primary rating from Vendor (416baaa9-dc9f-4396-8d5f-8c081fb06d67).
CVSS VectorVendor: 416baaa9-dc9f-4396-8d5f-8c081fb06d67
Lifecycle Timeline
6DescriptionCVE.org
In the Linux kernel, the following vulnerability has been resolved:
ipv6: fix race condition between ipv6_get_ifaddr and ipv6_del_addr
Although ipv6_get_ifaddr walks inet6_addr_lst under the RCU lock, it still means hlist_for_each_entry_rcu can return an item that got removed from the list. The memory itself of such item is not freed thanks to RCU but nothing guarantees the actual content of the memory is sane.
In particular, the reference count can be zero. This can happen if ipv6_del_addr is called in parallel. ipv6_del_addr removes the entry from inet6_addr_lst (hlist_del_init_rcu(&ifp->addr_lst)) and drops all references (__in6_ifa_put(ifp) + in6_ifa_put(ifp)). With bad enough timing, this can happen:
- In ipv6_get_ifaddr, hlist_for_each_entry_rcu returns an entry.
- Then, the whole ipv6_del_addr is executed for the given entry. The
reference count drops to zero and kfree_rcu is scheduled.
- ipv6_get_ifaddr continues and tries to increments the reference count
(in6_ifa_hold).
- The rcu is unlocked and the entry is freed.
- The freed entry is returned.
Prevent increasing of the reference count in such case. The name in6_ifa_hold_safe is chosen to mimic the existing fib6_info_hold_safe.
[ 41.506330] refcount_t: addition on 0; use-after-free. [ 41.506760] WARNING: CPU: 0 PID: 595 at lib/refcount.c:25 refcount_warn_saturate+0xa5/0x130 [ 41.507413] Modules linked in: veth bridge stp llc [ 41.507821] CPU: 0 PID: 595 Comm: python3 Not tainted 6.9.0-rc2.main-00208-g49563be82afa #14 [ 41.508479] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996) [ 41.509163] RIP: 0010:refcount_warn_saturate+0xa5/0x130 [ 41.509586] Code: ad ff 90 0f 0b 90 90 c3 cc cc cc cc 80 3d c0 30 ad 01 00 75 a0 c6 05 b7 30 ad 01 01 90 48 c7 c7 38 cc 7a 8c e8 cc 18 ad ff 90 <0f> 0b 90 90 c3 cc cc cc cc 80 3d 98 30 ad 01 00 0f 85 75 ff ff ff [ 41.510956] RSP: 0018:ffffbda3c026baf0 EFLAGS: 00010282 [ 41.511368] RAX: 0000000000000000 RBX: ffff9e9c46914800 RCX: 0000000000000000 [ 41.511910] RDX: ffff9e9c7ec29c00 RSI: ffff9e9c7ec1c900 RDI: ffff9e9c7ec1c900 [ 41.512445] RBP: ffff9e9c43660c9c R08: 0000000000009ffb R09: 00000000ffffdfff [ 41.512998] R10: 00000000ffffdfff R11: ffffffff8ca58a40 R12: ffff9e9c4339a000 [ 41.513534] R13: 0000000000000001 R14: ffff9e9c438a0000 R15: ffffbda3c026bb48 [ 41.514086] FS: 00007fbc4cda1740(0000) GS:ffff9e9c7ec00000(0000) knlGS:0000000000000000 [ 41.514726] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [ 41.515176] CR2: 000056233b337d88 CR3: 000000000376e006 CR4: 0000000000370ef0 [ 41.515713] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 [ 41.516252] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400 [ 41.516799] Call Trace: [ 41.517037] <TASK> [ 41.517249] ? __warn+0x7b/0x120 [ 41.517535] ? refcount_warn_saturate+0xa5/0x130 [ 41.517923] ? report_bug+0x164/0x190 [ 41.518240] ? handle_bug+0x3d/0x70 [ 41.518541] ? exc_invalid_op+0x17/0x70 [ 41.520972] ? asm_exc_invalid_op+0x1a/0x20 [ 41.521325] ? refcount_warn_saturate+0xa5/0x130 [ 41.521708] ipv6_get_ifaddr+0xda/0xe0 [ 41.522035] inet6_rtm_getaddr+0x342/0x3f0 [ 41.522376] ? __pfx_inet6_rtm_getaddr+0x10/0x10 [ 41.522758] rtnetlink_rcv_msg+0x334/0x3d0 [ 41.523102] ? netlink_unicast+0x30f/0x390 [ 41.523445] ? __pfx_rtnetlink_rcv_msg+0x10/0x10 [ 41.523832] netlink_rcv_skb+0x53/0x100 [ 41.524157] netlink_unicast+0x23b/0x390 [ 41.524484] netlink_sendmsg+0x1f2/0x440 [ 41.524826] __sys_sendto+0x1d8/0x1f0 [ 41.525145] __x64_sys_sendto+0x1f/0x30 [ 41.525467] do_syscall_64+0xa5/0x1b0 [ 41.525794] entry_SYSCALL_64_after_hwframe+0x72/0x7a [ 41.526213] RIP: 0033:0x7fbc4cfcea9a [ 41.526528] Code: d8 64 89 02 48 c7 c0 ff ff ff ff eb b8 0f 1f 00 f3 0f 1e fa 41 89 ca 64 8b 04 25 18 00 00 00 85 c0 75 15 b8 2c 00 00 00 0f 05 <48> 3d 00 f0 ff ff 77 7e c3 0f 1f 44 00 00 41 54 48 83 ec 30 44 89 [ 41.527942] RSP: 002b:00007f ---truncated---
AnalysisAI
Use-after-free race condition in the Linux kernel IPv6 stack allows a network-adjacent unauthenticated attacker to corrupt kernel heap memory or crash the system by racing concurrent IPv6 address lookup and deletion operations. The ipv6_get_ifaddr function can return a pointer to an inet6_ifaddr entry whose reference count has already been decremented to zero by a concurrent ipv6_del_addr call, causing a subsequent refcount increment to operate on freed memory. No public exploit code exists and EPSS is at the 1st percentile, but the adjacent-network attack vector and high potential impact justify prioritized patching on IPv6-enabled systems.
Technical ContextAI
The flaw resides in the IPv6 address configuration subsystem (net/ipv6/addrconf.c) of the Linux kernel. RCU (Read-Copy-Update) is a lock-free synchronization primitive that guarantees memory is not physically freed until after a quiescence period, but it does NOT guarantee the logical validity of an object - specifically, it does not prevent reference counts from reaching zero. The hlist_for_each_entry_rcu iterator in ipv6_get_ifaddr can return an inet6_ifaddr entry that has been logically deleted via hlist_del_init_rcu and had all its references dropped by ipv6_del_addr (via __in6_ifa_put and in6_ifa_put). The five-step race: (1) RCU walk returns the entry, (2) ipv6_del_addr completes and schedules kfree_rcu, (3) ipv6_get_ifaddr increments the zero refcount, (4) RCU grace period expires and memory is freed, (5) the freed pointer is returned to the caller. The fix mirrors the existing fib6_info_hold_safe pattern by introducing in6_ifa_hold_safe, which atomically checks for zero before incrementing. NVD classifies this as CWE-770, but the actual root cause is better described as CWE-362 (Race Condition) combined with CWE-416 (Use After Free) - the CWE-770 classification appears to be an NVD error. CPE data confirms the affected product as cpe:2.3:o:linux:linux_kernel including release candidates 6.9-rc1, 6.9-rc2, and 6.9-rc3.
RemediationAI
Apply the upstream kernel patches from the Linux stable repository. Eight backport commits address the issue across multiple stable branches: 01b11a0566670612bd464a932e5ac2eae53d8652, 3fb02ec57ead2891a2306af8c51a306bc5945e70, 4b19e9507c275de0cfe61c24db69179dc52cf9fb, 6cdb20c342cd0193d3e956e3d83981d0f438bb83, 7633c4da919ad51164acbf1aa322cc1a3ead6129, b4b3b69a19016d4e7fbdbd1dbcc184915eb862e1, cca606e14264098cba65efa82790825dbf69e903, and de76ae9e at https://git.kernel.org/stable/c/. Debian users should apply available kernel security updates via apt-get upgrade. If immediate kernel patching is not feasible, disabling IPv6 Router Advertisement acceptance (sysctl -w net.ipv6.conf.all.accept_ra=0 && sysctl -w net.ipv6.conf.default.accept_ra=0) reduces the network-adjacent attack surface by preventing external RA-triggered address deletion - however, this disables SLAAC autoconfiguration and will break IPv6 connectivity in networks relying on stateless address assignment. An alternative partial mitigation is restricting netlink socket access, though this may impact network management tooling. No patch version numbers per stable branch are independently confirmed from the available data beyond the git commit references provided.
More in Debian Linux
View allApache Log4j2 contains a critical JNDI injection vulnerability known as 'Log4Shell' that allows unauthenticated remote c
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
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
GNU Bash through 4.3 processes trailing strings after function definitions in the values of environment variables, which
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
Unspecified vulnerability in the Java Runtime Environment (JRE) component in Oracle Java SE 7 Update 2 and earlier, 6 Up
Roundcube Webmail contains a critical PHP object deserialization vulnerability (CVE-2025-49113, CVSS 9.9) that allows au
RARLAB UnRAR before 6.12 on Linux and UNIX allows directory traversal to write to files during an extract (aka unpack) o
The (1) EPHEMERAL, (2) HTTPS, (3) MVG, (4) MSL, (5) TEXT, (6) SHOW, (7) WIN, and (8) PLT coders in ImageMagick before 6.
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
When using the Apache JServ Protocol (AJP), care must be taken when trusting incoming connections to Apache Tomcat. Rate
A remote code execution vulnerability exists within multiple subsystems of Drupal 7.x and 8.x. Rated critical severity (
Same technique Denial Of Service
View allShare
External POC / Exploit Code
Leaving vuln.today