IPV6_FRAG_ESCAPE sebezhetőség javítása: tesztelőket keresnek

enlightened Ez az oldal a közösségért készül. heart Kövess minket máshol is:  Linux Mint Magyar Közösség a Mastodon-on  Telegram csatorna – csak hírek  Beszélgessünk a Telegram – Linux csevegő csoport  Hírek olvasása RSS segítségével  Linux Mint Hivatalos Magyar Közösség a Facebook-on      Linux Mint Baráti Kör a Facebook-on
wink Ha hasznosnak találod, és szeretnéd, hogy folytatódjon, támogasd a munkát Ko-fi vagy Paypal segítségével. laugh

kami911 képe

Új, helyi jogosultságkiterjesztésre alkalmas Linux kernel sebezhetőséget hoztak nyilvánosságra az IPv6 fragmentációs kódban, és komoly a tét: egy nem privilégizált felhasználó egy konténeren belül root shellt szerezhet a host rendszeren. Még nem kapott CVE-azonosítót, ezért egyelőre az IPV6_FRAG_ESCAPE nevet használjuk, ahogy a proof-of-concept is. Csak az AlmaLinux 10 és az AlmaLinux Kitten 10 érintett. Az AlmaLinux 10-hez ma elérhető egy javított kernel a testing tárolóban, és szeretnénk, ha segítenétek a tesztelésben, mielőtt élesre állítjuk.

A hibát Massimiliano Oldani biztonsági kutató találta a Google kCTF programja során, a szándékosan nem teljes proof-of-conceptet pedig sgKDEv tette közzé a GitHub-en. Mivel az upstream javítás úgy került be a mainline-ba, hogy nem egyeztettek CVE-azonosítóról és nem készült stabil backport, a nyilvános javítócsomag gyakorlatilag útitervet ad egy 0-day kihasználásához. Már elérhető exploit kód is, ezért ez a sebezhetőség azonnali figyelmet igényel.

Miről szól a hiba

A hiba egy aritmetikai tévedés az __ip6_append_data() függvényben, amely a kimenő IPv6 csomagokat állítja össze. Ha egy töredezett IPv6 datagramot UDP socketen keresztül, MSG_SPLICE_PAGES használatával épít fel a kernel, alulméretezi a foglalt memóriát, és a skb->end után ír a következő skb_shared_info területre, ahol megsérti az nr_frags mezőt. A nyilvános exploit innen fűzi tovább a túlcsordulást egy page use-after-free hibává, tetszőleges kernel olvasás/írás lehetőségévé, végül pedig root shellé a host kezdeti névtereiben — vagyis egy konténeren belüli nem privilégizált felhasználóból root lesz a host rendszeren.

Miért csak az AlmaLinux 10 és a Kitten 10 érintett? A sebezhető kódrész a 6.12-es kernel-ban található. Az AlmaLinux 8 (4.18-as kernel) és az AlmaLinux 9 (5.14-es kernel) nem tartalmazza, ezért nem érintett. Ugyanez az upstream kód teszi sebezhetővé a CentOS Stream 10-et és az RHEL 10-et is.

További információk a sebezhetőségről:

Javítás az upstream előtt

Az AlmaLinuxnál a biztonság az első. Mivel a sebezhetőségből gyakorlatilag pillanatok alatt lehet host szintű root jogosultságot szerezni, már nyilvános a működő exploit kód, és nincs CVE-azonosító vagy összehangolt upstream javítás a RHEL/CentOS Stream kernel-hoz, nem akartunk várni. A core csapatunk visszaportolta és hozzáadta az upstream __ip6_append_data() javítást az AlmaLinux 10 kernel-hoz. A döntést, hogy megelőzzük a CentOS Stream / RHEL frissítést, a technikai irányító testületünk, az ALESCo hozta meg.

A javított kernel-k már ma elérhetők a testing tárolóban. Ha a közösség visszaigazolta, hogy rendben működnek, átemeljük őket az éles tárolókba. Amikor ez megtörténik, frissítjük ezt a blogbejegyzést.

Segíts a tesztelésben

Néhány lépésből telepíthető és kipróbálható a javított kernel a testing tárolóból.

Testing tároló telepítése

sudo dnf install -y almalinux-release-testing

kernel frissítése

sudo dnf update 'kernel*' --enablerepo=almalinux-testing

Újraindítás az új kernel betöltéséhez

sudo reboot

Ellenőrizd, hogy a javított kernel fut-e

uname -r rpm -q kernel

Ennek kell megjelennie: kernel-6.12.0-211.28.2.el10_2 vagy újabb.

Nem javasoljuk, hogy a testing tárolót bekapcsolva hagyd a frissítés után, kivéve ha valóban nem éles rendszeren tesztelsz. Ha ez egy éles környezet, ezzel a paranccsal tilthatod le a tárolót:

sudo dnf config-manager --disable almalinux-testing

Ha problémát tapasztalsz, jelezd mielőbb az AlmaLinux chat csatornán vagy a bugs.almalinux.org oldalon.

Megjegyzés az AlmaLinux Kitten 10 felhasználóknak

Az AlmaLinux Kitten 10 érintett, de a javított kernel még nem érhető el Kittenhez. A javítás a következő Kitten kernel frissítéssel érkezik. Addig a Kitten felhasználók alkalmazzák az alábbi ideiglenes enyhítő megoldást. Amint elérhető lesz a javított Kitten kernel, frissítjük ezt a bejegyzést.

Érintett verziók és javított kernel-k

Csak az AlmaLinux 10 család érintett:

  • Az AlmaLinux 10-ben a kernel-6.12.0-211.28.2.el10_2 és újabb verziók tartalmazzák a javítást (jelenleg a testing tárolóban érhetők el).
  • Az AlmaLinux Kitten 10 érintett; a javított kernel még nem érhető el, a következő Kitten kernel frissítéssel érkezik. Addig használd az alábbi ideiglenes enyhítő megoldást.

Az AlmaLinux 8 és AlmaLinux 9 nem érintett, nincs teendő.

Ideiglenes enyhítés, ha még nem tudsz újraindítani

A nyilvános exploit nem privilégizált user namespace-re támaszkodik, hogy megszerezze azokat a hálózati jogosultságokat, amelyekkel a konténeren belül elő tudja állítani a rosszindulatú IPv6 csomagokat. Azokon a rendszereken, ahol nincs valódi szükség nem privilégizált user namespace-ekre, jelentősen csökkenthető a támadási felület, ha letiltod őket:

sudo sysctl -w user.max_user_namespaces=0

Ha azt szeretnéd, hogy újraindítás után is megmaradjon:

echo 'user.max_user_namespaces = 0' | sudo tee /etc/sysctl.d/99-ipv6-frag-escape.conf

Fontos tisztában lenni a következményekkel: a root nélküli konténerek (rootless Podman, nem privilégizált LXC, egyes böngészős sandboxok és CI futtatók) a nem privilégizált user namespace-ekre támaszkodnak, és nem fognak működni, amíg ez az érték így van beállítva. Ha ezek a feladatok fontosak számodra, ne alkalmazd ezt az enyhítést – inkább telepítsd a javított kernel-t, és indítsd újra a rendszert. A visszaállításhoz töröld a /etc/sysctl.d/99-ipv6-frag-escape.conf fájlt, és állítsd vissza az értéket a sudo sysctl -w user.max_user_namespaces= paranccsal (alapértelmezésben ez egy nagy, pozitív szám).

A valódi javítás a módosított kernel. Az enyhítés csak átmeneti megoldás azoknak a gépeknek, amelyeket nem lehet azonnal újraindítani.