Podatność w podsystemie netfilter jądra Linux (moduł nf_set_pipapo) polega na nieprawidłowej inicjalizacji bufora mapy wyszukiwania, co prowadzi do błędnych wyników dopasowania reguł filtrowania. Błąd ma krytyczną ocenę CVSS 9.8 i może umożliwić obejście reguł zapory sieciowej.
▸ Pokaż oryginał (EN)
In the Linux kernel, the following vulnerability has been resolved: netfilter: nf_set_pipapo: fix initial map fill The initial buffer has to be inited to all-ones, but it must restrict it to the size of the first field, not the total field size. After each round in the map search step, the result and the fill map are swapped, so if we have a set where f->bsize of the first element is smaller than m->bsize_max, those one-bits are leaked into future rounds result map. This makes pipapo find an incorrect matching results for sets where first field size is not the largest. Followup patch adds a test case to nft_concat_range.sh selftest script. Thanks to Stefano Brivio for pointing out that we need to zero out the remainder explicitly, only correcting memset() argument isn't enough.
Podczas inicjalizacji bufor roboczy powinien być wypełniony samymi jedynkami (all-ones), jednak wypełnienie jest realizowane z uwzględnieniem całkowitego rozmiaru pola (m->bsize_max) zamiast rozmiaru pierwszego pola (f->bsize). Po każdej iteracji procesu wyszukiwania mapy wynik i mapa wypełnienia są zamieniane miejscami. Gdy rozmiar pierwszego pola zestawu reguł jest mniejszy niż maksymalny rozmiar pola, nadmiarowe bity jedynkowe wyciekają do map wyników kolejnych rund. W efekcie moduł pipapo zwraca nieprawidłowe wyniki dopasowania dla zestawów reguł, w których pierwsze pole nie jest największe.
Atakujący może doprowadzić do błędnego dopasowania reguł netfilter, co w praktyce oznacza możliwość ominięcia polityk filtrowania pakietów (firewall bypass) — potencjalnie umożliwiając nieautoryzowany dostęp do sieci lub zasobów chronionych przez reguły nftables.
Należy zastosować patche dostępne w stabilnych gałęziach jądra Linux zgodnie z referencjami: committy 69b6a67f7052, 77bf0c4ab928, 791a615b7ad2, 8058c88ac0df oraz 957a4d1c4c58 w repozytorium git.kernel.org. Zaleca się aktualizację do wersji dystrybucyjnych zawierających powyższe poprawki.
Jądro Linux z aktywnym podsystemem netfilter korzystającym z modułu nf_set_pipapo (nftables); konkretne wersje wskazane w referencjach producenta (patche dostępne w stabilnych gałęziach repozytorium kernel.org).
Poprawka wymaga nie tylko korekty argumentu memset(), ale również jawnego wyzerowania pozostałej części bufora — na co zwrócił uwagę Stefano Brivio. Planowany jest dodatkowy test regresyjny w skrypcie nft_concat_range.sh.
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:HLinux Kernel
OSLinux5.6 – 5.15.165 (bez)5.16 – 6.1.103 (bez)6.2 – 6.6.44 (bez)6.7 – 6.10.3 (bez)
Powiązane podatności
Type confusion w V8 (Google Chrome) — zdalne uszkodzenie sterty
Commvault Command Center – nieuwierzytelniony RCE przez path traversal w ZIP
RCE przez YAML deserialization w IBM Aspera Faspex
RCE w VMware Workspace ONE Access i Identity Manager poprzez server-side template injection
Command Injection w VMware Workspace One Access i Identity Manager