Podatność w sterowniku ip6_tunnel jądra Linux powoduje przepełnienie bufora stosu (stack buffer overflow) podczas obsługi błędów ICMP w tunelach IPv4-over-IPv6. Luka jest krytyczna, ponieważ atakujący sieciowy bez uwierzytelnienia może potencjalnie wykonać dowolny kod w kontekście jądra systemu.
▸ Pokaż oryginał (EN)
In the Linux kernel, the following vulnerability has been resolved: ip6_tunnel: clear skb2->cb[] in ip4ip6_err() Oskar Kjos reported the following problem. ip4ip6_err() calls icmp_send() on a cloned skb whose cb[] was written by the IPv6 receive path as struct inet6_skb_parm. icmp_send() passes IPCB(skb2) to __ip_options_echo(), which interprets that cb[] region as struct inet_skb_parm (IPv4). The layouts differ: inet6_skb_parm.nhoff at offset 14 overlaps inet_skb_parm.opt.rr, producing a non-zero rr value. __ip_options_echo() then reads optlen from attacker-controlled packet data at sptr[rr+1] and copies that many bytes into dopt->__data, a fixed 40-byte stack buffer (IP_OPTIONS_DATA_FIXED_SIZE). To fix this we clear skb2->cb[], as suggested by Oskar Kjos. Also add minimal IPv4 header validation (version == 4, ihl >= 5).
Funkcja ip4ip6_err() wywołuje icmp_send() na sklonowanym pakiecie (skb), którego pole cb[] zostało uprzednio wypełnione przez ścieżkę odbioru IPv6 strukturą inet6_skb_parm. Funkcja icmp_send() przekazuje makro IPCB(skb2) do __ip_options_echo(), które interpretuje ten sam obszar cb[] jako strukturę inet_skb_parm (IPv4). Ponieważ układy obu struktur różnią się, pole inet6_skb_parm.nhoff pod offsetem 14 nakłada się na inet_skb_parm.opt.rr, nadając mu wartość niezerową. W konsekwencji __ip_options_echo() odczytuje wartość optlen z danych pakietu kontrolowanych przez atakującego (sptr[rr+1]) i kopiuje odpowiadającą liczbę bajtów do bufora dopt->__data na stosie, który ma stały rozmiar 40 bajtów (IP_OPTIONS_DATA_FIXED_SIZE). Poprawka polega na wyzerowaniu skb2->cb[] przed przekazaniem pakietu oraz dodaniu minimalnej walidacji nagłówka IPv4 (version == 4, ihl >= 5).
Atakujący zdalny, nieuwierzytelniony może przepełnić bufor stosu w jądrze Linux, co może prowadzić do wykonania dowolnego kodu w przestrzeni jądra (RCE), a tym samym do pełnego przejęcia kontroli nad systemem, utraty poufności, integralności i dostępności danych.
Należy zastosować patche dostępne u producenta zgodnie z referencjami — poprawki zostały opublikowane w repozytorium kernel.org pod adresami wskazanymi w sekcji referencji CVE. Zalecana jest jak najszybsza aktualizacja jądra do wersji zawierającej opisane poprawki.
Jądro Linux (Linux Kernel) — konkretne wersje wskazane w referencjach producenta (commity poprawkowe dostępne w repozytorium kernel.org)
Podatność została zgłoszona przez Oskara Kjosa, który zidentyfikował problem nakładania się struktur cb[] i zaproponował rozwiązanie polegające na wyzerowaniu skb2->cb[].
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:HLinux Kernel
OSLinux7.05.11 – 5.15.203 (bez)5.16 – 6.1.168 (bez)6.2 – 6.6.134 (bez)2.6.22 – 5.10.253 (bez)6.13 – 6.18.22 (bez)6.19 – 6.19.12 (bez)6.7 – 6.12.81 (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...