Neaizsargātība Linux Netfilter kodola apakšsistēmā

Netfilter, Linux kodola apakšsistēmā, ko izmanto tīkla pakešu filtrēšanai un modificēšanai, ir konstatēta ievainojamība (CVE-2021-22555), kas ļauj vietējam lietotājam iegūt sistēmas saknes tiesības, tostarp atrodoties izolētā konteinerā. Testēšanai ir sagatavots ekspluatācijas prototips, kas apiet KASLR, SMAP un SMEP aizsardzības mehānismus. Pētnieks, kurš atklāja ievainojamību, saņēma 20 XNUMX USD atlīdzību no Google par metodes identificēšanu, kā apiet Kubernetes konteineru izolāciju kCTF klasterī.

Problēma pastāv kopš kodola 2.6.19, kas tika izlaista pirms 15 gadiem, un to izraisa kļūda apdarinātājos IPT_SO_SET_REPLACE un IP6T_SO_SET_REPLACE, kas izraisa bufera pārpildīšanu, nosūtot īpaši formatētus parametrus, izmantojot setsockopt izsaukumu kompat režīmā. Parastos apstākļos tikai saknes lietotājs var izsaukt compat_setsockopt(), taču uzbrukuma veikšanai nepieciešamās privilēģijas var iegūt arī nepievilcīgs lietotājs sistēmās, kurās ir iespējots lietotāju nosaukumvietu atbalsts.

Lietotājs var izveidot konteineru ar atsevišķu root lietotāju un no turienes izmantot ievainojamību. Piemēram, "lietotāju nosaukumvietas" pēc noklusējuma ir iespējota Ubuntu un Fedora, bet nav iespējota Debian un RHEL. Ievainojamības labošanas ielāps tika pieņemts Linux kodolā 13. aprīlī. Debian, Arch Linux un Fedora projekti jau ir ģenerējuši pakotņu atjauninājumus. Ubuntu, RHEL un SUSE atjauninājumi tiek gatavoti.

Problēma rodas funkcijā xt_compat_target_from_user() sakarā ar nepareizu atmiņas lieluma aprēķinu, saglabājot kodola struktūras pēc konvertēšanas no 32 bitu uz 64 bitu attēlojumu. Kļūda ļauj četrus nulles baitus ierakstīt jebkurā pozīcijā ārpus piešķirtā bufera, ko ierobežo nobīde 0x4C. Šī funkcija izrādījās pietiekama, lai izveidotu eksploitu, kas ļāva iegūt root tiesības - notīrot m_list->next rādītāju msg_msg struktūrā, tika izveidoti nosacījumi piekļuvei datiem pēc atmiņas atbrīvošanas (use-after-free), kas pēc tam tika izmantota, lai iegūtu informāciju par adresēm un izmaiņām citās struktūrās, manipulējot ar msgsnd() sistēmas izsaukumu.

Avots: opennet.ru

Pievieno komentāru