Ranjivost u podsustavu kernela Linux Netfilter

Ranjivost (CVE-2021-22555) identificirana je u Netfilteru, podsustavu Linux kernela koji se koristi za filtriranje i modificiranje mrežnih paketa, a koji lokalnom korisniku omogućuje dobivanje root privilegija na sustavu, uključujući dok je u izoliranom spremniku. Za testiranje je pripremljen radni prototip exploita koji zaobilazi mehanizme zaštite KASLR, SMAP i SMEP. Istraživač koji je otkrio ranjivost dobio je nagradu od 20 dolara od Googlea za identificiranje metode za zaobilaženje izolacije Kubernetes spremnika u kCTF klasteru.

Problem postoji od kernela 2.6.19, izdanog prije 15 godina, a uzrokovan je greškom u rukovateljima IPT_SO_SET_REPLACE i IP6T_SO_SET_REPLACE koji uzrokuje prekoračenje međuspremnika prilikom slanja posebno formatiranih parametara putem setsockopt poziva u načinu rada compat. Pod normalnim okolnostima, samo root korisnik može uputiti poziv compat_setsockopt(), ali privilegije potrebne za izvođenje napada može dobiti i neprivilegirani korisnik na sustavima s omogućenom podrškom za korisničke imenske prostore.

Korisnik može stvoriti spremnik s zasebnim root korisnikom i odatle iskoristiti ranjivost. Na primjer, "korisnički imenski prostori" omogućeni su prema zadanim postavkama na Ubuntuu i Fedori, ali nisu omogućeni na Debianu i RHEL-u. Zakrpa koja ispravlja ranjivost usvojena je u Linux kernelu 13. travnja. Ažuriranja paketa već su generirana od strane Debian, Arch Linux i Fedora projekata. Za Ubuntu, RHEL i SUSE ažuriranja su u pripremi.

Problem se javlja u funkciji xt_compat_target_from_user() zbog netočnog izračuna veličine memorije prilikom spremanja struktura kernela nakon pretvorbe iz 32-bitnog u 64-bitni prikaz. Greška dopušta da se četiri nulta bajta zapišu na bilo koju poziciju izvan dodijeljenog međuspremnika omeđenog pomakom 0x4C. Pokazalo se da je ova značajka bila dovoljna za stvaranje exploita koji je omogućio stjecanje root prava - brisanjem pokazivača m_list->next u strukturi msg_msg stvoreni su uvjeti za pristup podacima nakon oslobađanja memorije (use-after-free), što je tada korišten za dobivanje informacija o adresama i promjenama u drugim strukturama kroz manipulaciju sistemskog poziva msgsnd().

Izvor: opennet.ru

Dodajte komentar