„Linux“ branduolio VFS pažeidžiamumas, leidžiantis išplėsti savo teises

„Linux“ branduolio teikiamoje failų sistemos konteksto API buvo nustatytas pažeidžiamumas (CVE-2022-0185), kuris leidžia vietiniam vartotojui įgyti sistemos root teises. Tyrėjas, kuris nustatė problemą, paskelbė išnaudojimo demonstravimą, leidžiantį vykdyti kodą kaip root Ubuntu 20.04 pagal numatytąją konfigūraciją. Planuojama, kad išnaudojimo kodas bus paskelbtas „GitHub“ per savaitę po to, kai platinimai išleis naujinimą, ištaisantį pažeidžiamumą.

Pažeidžiamumas egzistuoja VFS funkcijoje legacy_parse_param() ir jį sukelia nepavykus tinkamai patikrinti maksimalaus parametrų dydžio, pateikto failų sistemose, kurios nepalaiko failų sistemos konteksto API. Per didelio parametro perdavimas gali sukelti sveikojo skaičiaus kintamojo, naudojamo skaičiuojant rašomų duomenų dydį, perpildymą – kode yra buferio perpildymo patikra „if (len > PAGE_SIZE – 2 – dydis)“, kuri ne dirbti, jei dydžio reikšmė didesnė nei 4094. sveikojo skaičiaus perpildymui per apatinę ribą (sveiko skaičiaus perpildymas, atmetus 4096 - 2 - 4095 į unsigned int, rezultatas yra 2147483648).

Ši klaida leidžia, kai pasiekiate specialiai sukurtą failų sistemos vaizdą, sukelti buferio perpildymą ir perrašyti branduolio duomenis po paskirtos atminties srities. Norėdami išnaudoti pažeidžiamumą, turite turėti CAP_SYS_ADMIN teises, t.y. administratoriaus įgaliojimai. Problema ta, kad neprivilegijuotas vartotojas gali gauti tokius leidimus izoliuotame konteineryje, jei sistemoje yra įjungtas vartotojų vardų erdvių palaikymas. Pavyzdžiui, naudotojų vardų erdvės yra įjungtos pagal numatytuosius nustatymus Ubuntu ir Fedora, bet neįjungtos Debian ir RHEL (nebent naudojamos konteinerių izoliavimo platformos).

Problema atsirado nuo 5.1 Linux branduolio ir buvo išspręsta vakarykščiuose atnaujinimuose 5.16.2, 5.15.16, 5.10.93, 5.4.173. RHEL, Debian, Fedora ir Ubuntu pažeidžiamumą ištaisantys paketo naujinimai jau buvo išleisti. Pataisa dar nepasiekiama „Arch Linux“, „Gentoo“, „SUSE“ ir „openSUSE“. Kaip saugos sprendimą sistemoms, kurios nenaudoja konteinerio izoliavimo, galite nustatyti sysctl "user.max_user_namespaces" reikšmę į 0: echo "user.max_user_namespaces=0" > /etc/sysctl.d/userns.conf # sysctl -p /etc/ sysctl.d/userns.conf

Šaltinis: opennet.ru

Добавить комментарий