Haavatavus Linuxi Netfilteri tuuma alamsüsteemis

Võrgupakettide filtreerimiseks ja muutmiseks kasutatavas Linuxi tuuma alamsüsteemis Netfilter on tuvastatud haavatavus (CVE-2021-22555), mis võimaldab kohalikul kasutajal saada süsteemi juurõigusi, sealhulgas isoleeritud konteineris viibides. Testimiseks on ette valmistatud KASLR-i, SMAP-i ja SMEP-kaitsemehhanismidest möödasõitva ärakasutamise prototüüp. Haavatavuse avastanud teadlane sai Google'ilt 20 XNUMX dollari suuruse tasu selle eest, et ta tuvastas meetodi kCTF-klastri Kubernetes'i konteinerite isoleerimisest kõrvalehoidmiseks.

Probleem on olnud alates kerneli versioonist 2.6.19, mis ilmus 15 aastat tagasi, ja selle põhjuseks on IPT_SO_SET_REPLACE ja IP6T_SO_SET_REPLACE töötlejate viga, mis põhjustab spetsiaalse vorminguga parameetrite saatmisel setsockopt-kutsega ühilduvusrežiimis puhvri ületäitumise. Tavaolukorras saab compat_setsockopt() helistada ainult juurkasutaja, kuid ründe sooritamiseks vajalikud õigused võib saada ka privilegeerimata kasutaja süsteemides, kus kasutajanimeruumide tugi on lubatud.

Kasutaja saab luua konteineri eraldi juurkasutajaga ja sealt haavatavust ära kasutada. Näiteks "kasutajate nimeruumid" on Ubuntu ja Fedora puhul vaikimisi lubatud, kuid mitte Debianis ja RHELis. Haavatavust parandav plaaster võeti Linuxi kernelisse 13. aprillil. Debiani, Arch Linuxi ja Fedora projektid on paketivärskendused juba genereerinud. Ubuntu, RHEL ja SUSE puhul on värskendused ettevalmistamisel.

Probleem ilmneb funktsioonis xt_compat_target_from_user() mälumahu vale arvutamise tõttu tuumastruktuuride salvestamisel pärast 32-bitiselt 64-bitiseks esituseks teisendamist. Viga võimaldab kirjutada neli nullbaiti mis tahes positsioonile väljaspool eraldatud puhvrit, mis on piiratud nihkega 0x4C. See funktsioon osutus piisavaks, et luua ärakasutamine, mis võimaldas hankida juurõigusi – tühjendades m_list->next kursori msg_msg struktuuris, loodi tingimused andmetele juurdepääsuks pärast mälu vabastamist (use-after-free), mis Seejärel kasutati seda teabe hankimiseks aadresside ja muude struktuuride muudatuste kohta süsteemikutsega msgsnd() manipuleerides.

Allikas: opennet.ru

Lisa kommentaar