ila: reload IPv6 header after pskb_may_pull in checksum adjust
- Published
- Last modified
- Where the record stands: published, rejected by its publisher, or superseded by another id.What do these mean? →
- published
- Whether CISA lists it in its Known Exploited Vulnerabilities catalog: proof that attackers are using it.What do these mean? →
- Not listed in CISA KEV
- Fix
- Fixed in 5.10.265, 5.15.216, 6.1.183, 6.6.148, 6.12.101, and 2 more
- Whether working attack code is public (Exploit-DB, Metasploit, Nuclei or GitHub). Public code makes attacks easier.What do these mean? →
- None on Exploit-DB, Metasploit or GitHub
- Exploitation: none
- Automatable: yes
- Technical impact: total
Summary
In the Linux kernel, the following vulnerability has been resolved: ila: reload IPv6 header after pskb_may_pull in checksum adjust ila_csum_adjust_transport() caches ip6h = ipv6_hdr(skb) before calling pskb_may_pull(). On a non-linear skb whose transport header sits in a page fragment, pskb_may_pull() can call __pskb_pull_tail() / pskb_expand_head() and free the old skb head, leaving ip6h dangling; the following get_csum_diff(ip6h, p) then reads freed memory. ila_update_ipv6_locator() uses ip6h (and the iaddr derived from it) again after the csum-adjust call and additionally writes the new locator through that pointer. Impact: a remote IPv6 packet routed through a configured ILA csum-adjust-transport route or receive-side mapping triggers a slab-use-after-free in ila_update_ipv6_locator() (KASAN). The route or mapping requires CAP_NET_ADMIN to configure, but trigger packets are unauthenticated once it exists. Reload ip6h after each pskb_may_pull() in ila_csum_adjust_transport() before the csum-diff read. In ila_update_ipv6_locator() only the ILA_CSUM_ADJUST_TRANSPORT case pulls the skb, so reload ip6h and iaddr in that case alone before the destination-address write; the neutral-map modes never pull and keep their cached pointers.
Timeline
- CVE published
- CISA SSVC assessment
Exploitation: none · Automatable: yes · Technical impact: total
- Record last updated
Affected versions
- Linux Linux
From 33f11d16142b06588eedfc1dd8cf93790979a712 · fixed in e451a904606c571f731ef7a06b3398619dce5300; From 33f11d16142b06588eedfc1dd8cf93790979a712 · fixed in 1eadcb43893b897ade85ac5bf5c618054bc3c655; From 33f11d16142b06588eedfc1dd8cf93790979a712 · fixed in ba353caafb06ccee57b78d3254e3cebf1dea4a93; From 33f11d16142b06588eedfc1dd8cf93790979a712 · fixed in 896a9512d0d83c2a4b357e5585b7b62a8e3f95c1; From 33f11d16142b06588eedfc1dd8cf93790979a712 · fixed in 7097a0280b178237265681be66d1bef11d15894b; From 33f11d16142b06588eedfc1dd8cf93790979a712 · fixed in 472aba2603ca74c4f7722cb0c0296942b0776b8d; From 33f11d16142b06588eedfc1dd8cf93790979a712 · fixed in c6a13ae00dab3a1a8c7cf2f843f0fc9e8d4b0ccc; From 33f11d16142b06588eedfc1dd8cf93790979a712 · fixed in 92d3817649df2b0b6a008a686c8275c88d7ef594
- Linux Linux
4.5
- KernelLinux
From 4.5.0 · fixed in 5.10.265; From 5.11.0 · fixed in 5.15.216; From 5.16.0 · fixed in 6.1.183; From 6.2.0 · fixed in 6.6.148; From 6.7.0 · fixed in 6.12.101; From 6.13.0 · fixed in 6.18.42; From 6.19.0 · fixed in 7.1.6
References 8
git.kernel.org
- stable/c/e451a904606c571f731ef7a06b3398619dce5300
- stable/c/1eadcb43893b897ade85ac5bf5c618054bc3c655
- stable/c/ba353caafb06ccee57b78d3254e3cebf1dea4a93
- stable/c/896a9512d0d83c2a4b357e5585b7b62a8e3f95c1
- stable/c/7097a0280b178237265681be66d1bef11d15894b
- stable/c/472aba2603ca74c4f7722cb0c0296942b0776b8d
- stable/c/c6a13ae00dab3a1a8c7cf2f843f0fc9e8d4b0ccc
- stable/c/92d3817649df2b0b6a008a686c8275c88d7ef594