Уязвимост в подсистемата на ядрото на 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