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

В реализации интерфейса асинхронного ввода/вывода io_uring, входящего в ядро Linux начиная с выпуска 5.1, выявлена уязвимость (CVE-2022-29582), позволяющая непривилегированному пользователю получить права root в системе, в том числе при запуске эксплоита из контейнера. Уязвимость вызвана обращением к уже освобождённому блоку памяти, проявляется в ядрах Linux начиная с ветки 5.10 и устранена в апреле в обновлениях 5.10.111, 5.15.34 и 5.17.3.

Обращение к освобождённой памяти происходит в результате состояния гонки при обработке таймаутов в функции io_flush_timeouts(), которая удаляет запись о таймауте из списка и отменяет его, без проверки создания и удаления таймаута в этот момент.

Исследователями подготовлен рабочий эксплоит, не требующий для своей работы включения пространств имён идентификаторов пользователей (user namespaces) и способный предоставить root-доступ в основной системе при запуске эксплоита непривилегированным пользователем в изолированном контейнере. Эксплоит в том числе работает в изолированном окружении nsjail в дистрибутиве Google COS (Сontainer Optimized OS), основанном на Chromium OS и применяемом в Google Cloud Platform в виртуальных машинах Compute Engine. Эксплоит рассчитан на работу с ветками ядра с 5.10 по 5.12.

Release. Ссылка here.