Уязвимости в подсистеме eBPF ядра Linux
В подсистеме eBPF, позволяющей запускать обработчики для трассировки, анализа работы подсистем и управления трафиком, выполняемые внутри ядра Linux в специальной виртуальной машине с JIT, выявлена уязвимость (CVE-2021-29154), позволяющая локальному пользователю добиться выполнения своего кода на уровне ядра. Проблема проявляется вплоть до выпуска 5.11.12 (включительно) и ещё не исправлена в дистрибутивах (Debian, Ubuntu, RHEL, Fedora, SUSE, Arch). Исправление доступно в виде патча.
По заявлению исследователей, выявивших уязвимость, им удалось разработать рабочий прототип эксплоита для 32- и 64-разрядных систем x86, который может быть использован непривилегированным пользователем. При этом компания Red Hat отмечает, что опасность проблемы зависит от доступности пользователю системного вызова eBPF. Например, в конфигурации по умолчанию в RHEL и большинстве других дистрибутивов Linux для эксплуатации уязвимости требуется наличие у пользователя прав CAP_SYS_ADMIN и включение BPF JIT. В качестве обходной меры защиты рекомендуется отключить BPF JIT при помощи команды:
echo 0 > /proc/sys/net/core/bpf_jit_enable
Проблема вызвана ошибкой вычисления смещения для команд ветвления в процессе генерации машинного кода JIT-компилятором. В частности, при генерации инструкций ветвления не учитывается, что смещение может измениться после прохождения стадии оптимизации. Указанная недоработка может использоваться для формирования аномального машинного кода и его выполнения на уровне ядре.

Примечательно, что это не единственная уязвимость в подсистеме еBPF за последнее время. В конце марта в ядре были выявлены ещё две уязвимости (CVE-2020-27170, CVE-2020-27171), предоставляющие возможность использовать еBPF для обхода защиты от уязвимостей класса Spectre, позволяющих определять содержимое памяти ядра в результате создания условий для спекулятивного выполнения определённых операций. Для атаки Spectre требуется наличие в привилегированном коде определённой последовательности команд, приводящих к спекулятивному выполнению инструкций. В еBPF найдено несколько способов генерации подобных инструкций через манипуляции с передаваемыми для выполнения BPF-программами.

Уязвимость CVE-2020-27170 вызвана наличием в верификаторе BPF манипуляций с указателями, вызывающими спекулятивные операции обращения к области вне границ буфера. Уязвимость CVE-2020-27171 связана с ошибкой целочисленной арифметики (integer underflow) при работе с указателями, приводящей к спекулятивному обращению к данным вне буфера. Указанные проблемы уже устранены в выпусках ядра 5.11.8, 5.10.25, 5.4.107, 4.19.182 и 4.14.227, а также вошли в состав обновлений ядра большинства дистрибутивов Linux. Исследователями подготовлен прототип эксплоита, позволяющий непривилегированному пользователю извлечь данные из памяти ядра.
Similar content:
show more less
You should to log in

loading