Sårbarhet i Linux Netfilter kärndelsystem

En sårbarhet (CVE-2021-22555) har identifierats i Netfilter, ett undersystem till Linux-kärnan som används för att filtrera och modifiera nätverkspaket, som gör att en lokal användare kan få root-privilegier på systemet, inklusive när han befinner sig i en isolerad behållare. En fungerande prototyp av en exploatering som kringgår KASLR-, SMAP- och SMEP-skyddsmekanismerna har förberetts för testning. Forskaren som upptäckte sårbarheten fick en belöning på 20 XNUMX USD från Google för att ha identifierat en metod för att kringgå isoleringen av Kubernetes-behållare i ett kCTF-kluster.

Problemet har funnits sedan kärnan 2.6.19, som släpptes för 15 år sedan, och orsakas av en bugg i hanterarna IPT_SO_SET_REPLACE och IP6T_SO_SET_REPLACE som orsakar ett buffertspill när man skickar speciellt formaterade parametrar via ett setsockopt-anrop i kompatibelt läge. Under normala omständigheter kan endast root-användaren göra ett anrop till compat_setsockopt(), men de privilegier som krävs för att utföra attacken kan också erhållas av en oprivilegierad användare på system med stöd för användarnamnrymder aktiverat.

En användare kan skapa en behållare med en separat rotanvändare och utnyttja sårbarheten därifrån. Till exempel är "user namespaces" aktiverat som standard på Ubuntu och Fedora, men inte aktiverat på Debian och RHEL. Patchen som fixade sårbarheten infördes i Linux-kärnan den 13 april. Paketuppdateringar har redan genererats av projekten Debian, Arch Linux och Fedora. I Ubuntu, RHEL och SUSE förbereds uppdateringar.

Problemet uppstår i funktionen xt_compat_target_from_user() på grund av felaktig beräkning av minnesstorleken när kärnstrukturer sparas efter konvertering från 32-bitars till 64-bitars representation. Felet tillåter att fyra nollbyte kan skrivas till vilken position som helst bortom den tilldelade bufferten som begränsas av offset 0x4C. Denna funktion visade sig räcka för att skapa en exploatering som gjorde det möjligt för en att få root-rättigheter - genom att rensa pekaren m_list->next i msg_msg-strukturen skapades förutsättningar för att komma åt data efter frigöring av minne (use-after-free), vilket användes sedan för att få information om adresser och ändringar av andra strukturer genom manipulering av msgsnd()-systemanropet.

Källa: opennet.ru

Lägg en kommentar