V linuxovém jádře byly objeveny dvě zranitelnosti. Tyto zranitelnosti jsou svou povahou podobné zranitelnosti Copy Fail, která byla zveřejněna před několika dny, ale ovlivňují jiné subsystémy – xfrm-ESP a RxRPC. Tato série zranitelností má kódové označení Dirty Frag (označovaná také jako Copy Fail 2). Tyto zranitelnosti umožňují neprivilegovanému uživateli získat root oprávnění přepsáním procesních dat v mezipaměti stránek. K dispozici je zneužití, které funguje na všech současných linuxových distribucích. Zranitelnost byla zveřejněna před vydáním oprav, ale existuje alternativní řešení.
Dirty Frag pokrývá dvě různé zranitelnosti: první v modulu xfrm-ESP, který se používá k urychlení šifrovacích operací IPsec pomocí protokolu ESP (Encapsulating Security Payload), a druhou v ovladači RxRPC, který implementuje rodinu soketů AF_RXRPC a stejnojmenný protokol RPC běžící přes UDP. Každá zranitelnost, posuzovaná samostatně, umožňuje root oprávnění. Zranitelnost xfrm-ESP je v linuxovém jádře přítomna od ledna 2017 a zranitelnost RxRPC je přítomna od června 2023. Oba problémy jsou způsobeny optimalizacemi, které umožňují přímý zápis do mezipaměti stránek.
Aby bylo možné zneužít zranitelnost xfrm-ESP, musí mít uživatel oprávnění k vytváření jmenných prostorů a aby bylo možné zneužít zranitelnost RxRPC, musí být načten modul jádra rxrpc.ko. Například v Ubuntu pravidla AppArmor brání neprivilegovaným uživatelům ve vytváření jmenných prostorů, ale modul rxrpc.ko je načten ve výchozím nastavení. Některé distribuce modul rxrpc.ko postrádají, ale neblokují vytváření jmenných prostorů. Výzkumník, který problém objevil, vyvinul kombinovaný exploit schopný napadnout systém prostřednictvím obou zranitelností, což umožňuje zneužít problém na všech hlavních distribucích. Bylo potvrzeno, že exploit funguje na Ubuntu 24.04.4 s jádrem 6.17.0-23, RHEL 10.1 s jádrem 6.12.0-124.49.1, openSUSE Tumbleweed s jádrem 7.0.2-1, CentOS Stream 10 s jádrem 6.12.0-224, AlmaLinux 10 s jádrem 6.12.0-124.52.3 a Fedora 44 s jádrem 6.19.14-300.
Stejně jako u zranitelnosti Copy Fail jsou problémy v xfrm-ESP a RxRPC způsobeny dešifrováním dat na místě pomocí funkce splice(), která přenáší data mezi deskriptory souborů a kanály bez kopírování, a to předáváním odkazů na prvky v mezipaměti stránek. Offsety zápisu byly vypočítány bez řádných kontrol, aby se zohlednilo použití přímých odkazů na prvky v mezipaměti stránek, což umožnilo speciálně vytvořeným požadavkům přepsat 4 bajty na daném offsetu a upravit obsah libovolného souboru v mezipaměti stránek.
Všechny operace čtení souborů nejprve načítají obsah z mezipaměti stránek. Pokud jsou data v mezipaměti stránek upravena, operace čtení souborů vrátí nahrazená data, nikoli skutečné informace uložené na disku. Zneužití této zranitelnosti spočívá v úpravě mezipaměti stránek pro spustitelný soubor s příznakem root suid. Například pro získání root oprávnění je možné přečíst spustitelný soubor /usr/bin/su a umístit ho do mezipaměti stránek, a poté do obsahu tohoto souboru načteného do mezipaměti stránek vložit svůj vlastní kód. Následné spuštění utility „su“ povede k načtení upravené kopie z mezipaměti stránek do paměti, nikoli původního spustitelného souboru z disku.
Zveřejnění zranitelnosti a koordinované vydání záplat bylo naplánováno na 12. května, ale kvůli úniku informací musely být informace o zranitelnosti zveřejněny před vydáním samotných záplat. Koncem dubna byly záplaty pro rxrpc, ipsec a xfrm zveřejněny na veřejném mailing listu netdev, aniž by bylo uvedeno, že se s danou zranitelností vztahují. 5. května správce subsystému IPsec přijal změnu v repozitáři netdev Git s navrhovanou opravou v modulu xfrm-esp. Popis změny byl z velké části shodný s popisem problému, který vedl ke zranitelnosti Copy Fail v modulu algif_aead. O tuto opravu se začal zajímat bezpečnostní výzkumník, podařilo se mu vytvořit funkční exploit a publikoval jej, aniž by věděl, že do 12. května bylo uvaleno embargo na zveřejňování informací o problému.
Aktualizace s opravami pro linuxové jádro a balíčky jádra v distribucích zatím nebyly publikovány, ale jsou k dispozici záplaty, které problémy řeší – xfrm-esp a rxrpc. Identifikátory CVE nebyly přiřazeny, což komplikuje sledování aktualizací balíčků v distribucích. Jako alternativní řešení můžete zablokovat načítání modulů jádra esp4, esp6 a rxrpc: sh -c "printf 'install esp4 /bin/false\ninstall esp6 /bin/false\ninstall rxrpc /bin/false\n' > /etc/modprobe.d/dirtyfrag.conf; rmmod esp4 esp6 rxrpc 2>/dev/null; true"
Zdroj: opennet.ru
