Varnarleysi í undirkerfi Linux Netfilter kjarna

Varnarleysi (CVE-2021-22555) hefur fundist í Netfilter, undirkerfi Linux kjarnans sem notað er til að sía og breyta netpökkum, sem gerir staðbundnum notanda kleift að öðlast rótarréttindi á kerfinu, þar á meðal þegar hann er í einangruðum íláti. Vinnandi frumgerð af hagnýtingu sem framhjá KASLR, SMAP og SMEP verndaraðferðum hefur verið útbúin til prófunar. Rannsakandi sem uppgötvaði varnarleysið fékk $20 verðlaun frá Google fyrir að finna aðferð til að komast framhjá einangrun Kubernetes gáma í kCTF klasa.

Vandamálið hefur verið til síðan kjarna 2.6.19, sem kom út fyrir 15 árum síðan, og stafar af villu í IPT_SO_SET_REPLACE og IP6T_SO_SET_REPLACE meðhöndlunum sem veldur yfirflæði biðminni þegar sérstaklega sniðnar breytur eru sendar í gegnum setsockopt símtal í compat ham. Undir venjulegum kringumstæðum getur aðeins rótnotandinn hringt í compat_setsockopt(), en réttindin sem nauðsynleg eru til að framkvæma árásina getur einnig fengið forréttindalausan notanda á kerfum með stuðning fyrir notendanafnarými virkt.

Notandi getur búið til gám með sérstökum rótnotanda og nýtt sér varnarleysið þaðan. Til dæmis, "notandanafnarými" er sjálfgefið virkt á Ubuntu og Fedora, en ekki virkt á Debian og RHEL. Plásturinn sem lagaði varnarleysið var tekinn upp í Linux kjarnann 13. apríl. Pakkauppfærslur hafa þegar verið búnar til af Debian, Arch Linux og Fedora verkefnunum. Í Ubuntu, RHEL og SUSE eru uppfærslur í undirbúningi.

Vandamálið kemur upp í xt_compat_target_from_user() fallinu vegna rangs útreiknings á minnisstærð þegar vistuð er kjarnabyggingar eftir umbreytingu úr 32 bita í 64 bita framsetningu. Villan gerir kleift að skrifa fjögur núllbæti á hvaða stöðu sem er fyrir utan úthlutaðan biðminni sem afmarkast af offset 0x4C. Þessi eiginleiki reyndist nægjanlegur til að búa til hagnýtingu sem gerði manni kleift að öðlast rótarréttindi - með því að hreinsa m_list->næsta bendilinn í msg_msg uppbyggingunni, voru sköpuð skilyrði fyrir aðgang að gögnum eftir að hafa losað minni (use-after-free), sem var síðan notað til að fá upplýsingar um heimilisföng og breytingar á öðrum mannvirkjum með því að nota msgsnd() kerfiskallið.

Heimild: opennet.ru

Bæta við athugasemd