Уязвимост в подсистемата на ядрото Linux Netfilter

В Netfilter, подсистемата на ядрото на Linux, използвана за филтриране и модификация на мрежови пакети, е открита уязвимост (CVE-2021-22555), която позволява на локален потребител да получи правата на root в системата, дори и да се намира в изолиран контейнер. За тестване е подготвен работещ прототип на експлойт, който заобикаля механизмите на защита KASLR, SMAP и SMEP. Изследователят, открил уязвимостта, е получил награда от Google в размер на 20 хиляди долара за открития метод за заобикаляне на изолацията на контейнерите Kubernetes в клъстера kCTF.

Проблемът се проявява от ядрото 2.6.19, издадено преди 15 години, и е причинен от грешка в обработчиците IPT_SO_SET_REPLACE и IP6T_SO_SET_REPLACE, която води до препълване на буфера при изпращане на специално оформени параметри чрез извикване на setsockopt в режим compat. При нормални условия извикването на compat_setsockopt() може да бъде извършено само от потребител с права root, но необходимите за атака права също могат да бъдат получени от непривилегирован потребител в системи с активирана поддръжка на пространства от имена на идентификаторите на потребителите (user namespaces).

Потребителят може да създаде контейнер с отделен потребител root и от него да експлоатира уязвимостта. Например, «user namespaces» по подразбиране е активиран в Ubuntu и Fedora, но не е активиран в Debian и RHEL. Патч с корекция на уязвимостта е приет в състава на ядрото на Linux на 13 април. Актуализациите на пакетите вече са създадени от проектите Debian, Arch Linux и Fedora. В Ubuntu, RHEL и SUSE актуализациите са в процес на подготовка.

Проблемът възниква във функцията xt_compat_target_from_user() поради некоректно изчисление на размера на паметта при запазване на структурите на ядрото след преобразуване от 32-битово в 64-битово представяне. Грешката позволява записването на четири нулеви байта на всяка позиция извън определеното буферно пространство, ограничено от офсет 0x4C. Указаната възможност се оказала достатъчна за създаването на експлойт, който позволява получаване на права root — чрез изчистване на указателя m_list->next в структурата msg_msg, създавайки условия за достъп до данни след освобождаване на паметта (use-after-free), което след това е използвано за получаване на информация за адреси и промяна на други структури чрез манипулация със системния извикване msgsnd().

Източник: opennet.ru

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster