Podatność w jądrze Linux polega na braku czyszczenia tablicy cb[] w funkcji ip6_err_gen_icmpv6_unreach(), co powoduje błędną interpretację danych kontrolnych pakietu IPv4 jako struktur IPv6. Luka może umożliwić atakującemu zdalne wywołanie niepożądanych operacji na pamięci bez uwierzytelnienia.
▸ Pokaż oryginał (EN)
In the Linux kernel, the following vulnerability has been resolved: ipv6: icmp: clear skb2->cb[] in ip6_err_gen_icmpv6_unreach() Sashiko AI-review observed: In ip6_err_gen_icmpv6_unreach(), the skb is an outer IPv4 ICMP error packet where its cb contains an IPv4 inet_skb_parm. When skb is cloned into skb2 and passed to icmp6_send(), it uses IP6CB(skb2). IP6CB interprets the IPv4 inet_skb_parm as an inet6_skb_parm. The cipso offset in inet_skb_parm.opt directly overlaps with dsthao in inet6_skb_parm at offset 18. If an attacker sends a forged ICMPv4 error with a CIPSO IP option, dsthao would be a non-zero offset. Inside icmp6_send(), mip6_addr_swap() is called and uses ipv6_find_tlv(skb, opt->dsthao, IPV6_TLV_HAO). This would scan the inner, attacker-controlled IPv6 packet starting at that offset, potentially returning a fake TLV without checking if the remaining packet length can hold the full 18-byte struct ipv6_destopt_hao. Could mip6_addr_swap() then perform a 16-byte swap that extends past the end of the packet data into skb_shared_info? Should the cb array also be cleared in ip6_err_gen_icmpv6_unreach() and ip6ip6_err() to prevent this? This patch implements the first suggestion. I am not sure if ip6ip6_err() needs to be changed. A separate patch would be better anyway.
Gdy pakiet zewnętrzny ICMPv4 jest sklonowany do skb2 i przekazywany do icmp6_send(), tablica cb[] zawiera strukturę inet_skb_parm (IPv4), która jest błędnie interpretowana przez makro IP6CB jako inet6_skb_parm (IPv6). Pole cipso w strukturze IPv4 nakłada się na pole dsthao w strukturze IPv6 pod offsetem 18. Jeśli atakujący wyśle spreparowany pakiet ICMPv4 z opcją CIPSO, funkcja mip6_addr_swap() wywoła ipv6_find_tlv() z niezweryfikowanym offsetem dsthao, skanując kontrolowaną przez atakującego zawartość pakietu IPv6. W rezultacie może dojść do 16-bajtowej zamiany danych wykraczającej poza granicę danych pakietu, potencjalnie sięgając do struktury skb_shared_info.
Atakujący może zdalnie wywołać nieprawidłowy dostęp do pamięci poza granicami bufora pakietu, co może prowadzić do naruszenia poufności, integralności i dostępności systemu, w tym potencjalnie do wykonania kodu lub awarii jądra.
Należy zastosować patche dostępne u producenta zgodnie z referencjami (commity: 0452b6526b2f, 1ceeebd5bd6d, 3d5127d998de, 86ab3e55673a, a2edbb6393972a w repozytorium linux-stable)
Linux Kernel — wersje wskazane w referencjach producenta (patche dostępne w repozytorium stable)
Poprawka dotyczy wyłącznie funkcji ip6_err_gen_icmpv6_unreach(). Autor patcha wskazuje w opisie, że funkcja ip6ip6_err() może wymagać analogicznej zmiany w osobnym patchu — kwestia ta pozostaje otwarta.
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:HLinux Kernel
OSLinux3.137.05.16 – 6.1.168 (bez)6.2 – 6.6.134 (bez)< 5.10.2536.13 – 6.18.22 (bez)6.19 – 6.19.12 (bez)6.7 – 6.12.81 (bez)5.11 – 5.15.203 (bez)
Powiązane podatności
Type confusion w V8 (Google Chrome) — zdalne uszkodzenie sterty
Commvault Command Center – nieuwierzytelniony RCE przez path traversal w ZIP
IBM Aspera Faspex 4.4.2 Patch Level 1 and earlier could allow a remote attacker to execute arbitrary code on t...
VMware Workspace ONE Access and Identity Manager contain a remote code execution vulnerability due to server-s...
VMware Workspace One Access, Access Connector, Identity Manager, and Identity Manager Connector address have a...