Уязвимост в подсистемата io_uring, позволяваща получаване на root права

В интерфейса на асинхронния вход/изход io_uring, предоставен от ядрото на Linux, е открита уязвимост (CVE-2024-0582), която позволява на непривилегирован потребител да получи права root в системата. За експлоатация на уязвимостта е необходим само обикновен локален достъп до системата, без нужда от манипулации с пространства на имена. В момента е публично достъпен работещ експлоит, а също така е подробно описана втората техника за експлоатация на уязвимостта.

Уязвимостта е предизвикана от достъпа до вече освободен блок памет (use-after-free) в подсистемата io_uring, който възниква при регистрация и освобождаване на пръстенов буфер, създаден с флаг IORING_REGISTER_PBUF_RING. В ситуация на прилагане на операция mmap() върху буфера, той остава отражен в потребителското пространство след изпълнението на операцията му по освобождаване (IORING_UNREGISTER_PBUF_RING). Използвайки тази особеност, атакуващият може да чете и записва данни в страници памет, върнати от системата за разпределение на паметта на ядрото.

Проблемът се проявява от версия 6.4 на ядрото на Linux и е отстранен в версии 6.7 и 6.6.5, както и в пакета с ядро 6.5.0-21, подготвен за Ubuntu 22.04 и 23.10. Забележително е, че в основното ядро проблемът е поправен през декември 2023 г., проектът Google Zero открива достъпа до съобщението за наличие на уязвимост на 8 януари, а пакетът с поправеното ядро 6.5 за Ubuntu е образуван едва на 22 февруари 2024 г. В други дистрибуции можете да проследите поправките и уязвимостта на страниците: Debian, Gentoo, RHEL, SUSE, Fedora, Arch.

Първият експлоит манипулира създаването на голямо количество контролирани от атакуващия страници памет, за да определи разположението на паметта в ядрото и достъпа до съседни физически страници памет, използвайки съдържанието на определено попълнени структури на мрежови сокети като маяци. За стартиране на кода в експлоита се използва "гаджет" (последователност от съществуващи в ядрото инструкции), която води до изпълнение на функцията call_usermodehelper_exec, предназначена за стартиране на процеси в потребителското пространство от ядрото.

Вторият експлоит се основава на това, че когато всички slab-блокове в кеша бъдат изчерпани (например, при многократно отваряне на файл), свободните страници памет, до които атакуващият има достъп, се използват от системата за разпределение на памет за създаване на нов slab-блок, и всички нови файлови структури започват да се разполагат в този блок. Следователно, определени файлови структури попадат в страници памет, които атакуващият може да чете и записва. Атаката се свежда до организиране на попадение в кеша на файловете на нужното файл и замяна на полето f_mode, свързано с него, което определя правата за достъп, позволяващи запис на нужния системен файл, например, /etc/passwd.

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

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