Раскрыты подробности о root-уязвимости в ядре Linux, атакованной на Pwn2Own

30.03.2017 09:19

Опубликованы сведения о 0-day уязвимости в ядре Linux (CVE-2017-7184), которая была использована на соревновании Pwn2Own 2017 для демонстрации атаки на Ubuntu Linux, позволившей локальному пользователю выполнить код с правами root.

Уязвимость вызвана ошибкой во фреймворке преобразования сетевых пакетов XFRM, применяемом для реализации IPsec. В функции xfrm_replay_verify_len(), вызываемой из xfrm_new_ae(), не выполнялась проверка заданных пользователем параметров replay_window, записываемый в буфер состояний. Манипулируя содержимым, связанным с данным параметром, атакующий может организовать запись и чтение данных в области памяти ядра за пределами выделенного буфера.

Несмотря на то, что эксплуатация был продемонстрирвоана в Ubuntu, проблема не специфична для данного дистрибутива и проявляется в любых других системах на базе ядра Linux. Как и в нескольких предыдущих root-уязвимостях в ядре, проблема может быть эксплуатирована только при включении пространств имён для идентификаторов пользователей (user namespaces). Например, пакеты с ядром для Ubuntu и Fedora уязвимы по умолчанию, а ядро Debian может быть атаковано только после активации поддержки "user namespaces" (sysctl kernel.unprivileged_userns_clone=1). Из-за отсутствия поддержки "user namespaces" атака также затруднена на старые системы версиями ядра меньше 3.9.

User namespaces используется для получения обычным пользователем прав CAP_NET_ADMIN, необходимых для настройки параметров XFRM. Так как создаваемое через user namespaces изолированное окружение и основная система обслуживаются одним ядром Linux, то эксплуатация уязвимости в ядре позволяет обойти ограничения "user namespaces" и получить привилегированный доступ к основной системе.

Для ядра Linux исправление доступно в виде патчей. Обновления пакетов пока выпущены только для Ubuntu и openSUSE, SUSE Linux Enerprise 12. Проблема остаётся неисправленной в Fedora, Debian и CentOS/RHEL 7. Уязвимость не затрагивает SLE 11, RHEL 5 и RHEL 6.