Suicide
09.04.2021, 19:53
В подсистеме eBPF, позволяющей запускать обработчики для трассировки, анализа работы подсистем и управления трафиком, выполняемые внутри ядра Linux в специальной виртуальной машине с JIT, выявлена (https://www.openwall.com/lists/oss-security/2021/04/08/1) уязвимость (CVE-2021-29154 (https://security-tracker.debian.org/tracker/CVE-2021-29154)), позволяющая локальному пользователю добиться выполнения свого кода на уровне ядра. Проблема проявляется вплоть до выпуска 5.11.12 (включительно) и ещё не исправлена в дистрибутивах (Debian (https://security-tracker.debian.org/tracker/CVE-2021-29154), Ubuntu (https://ubuntu.com/security/CVE-2021-29154), RHEL (https://bugzilla.redhat.com/show_bug.cgi?id=CVE-2021-29154), Fedora (https://bodhi.fedoraproject.org/updates/?releases=F34&type=security), SUSE (https://bugzilla.suse.com/show_bug.cgi?id=CVE-2021-29154), Arch (https://security.archlinux.org/)). Исправление доступно в виде патча (https://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf.git/patch/?id=26f55a59dc65ff77cd1c4b37991e26497fc68049).
По заявлению исследователей, выявивших уязвимость, им удалось разработать рабочий прототип эксплоита для 32- и 64-разрядных систем x86, который может быть использован непривилегированным пользователем. При этом компания Red Hat отмечает (https://bugzilla.redhat.com/show_bug.cgi?id=CVE-2021-29154), что опасность проблемы зависит от доступности пользователю системного вызова eBPF. Например, в RHEL и большинстве других дистрибутивов Linux в конфигурации по умолчанию уязвимость может быть эксплуатирована при включении BPF JIT и наличии у пользователя прав CAP_SYS_ADMIN. В качестве обходной меры защиты рекомендуется отключить BPF JIT при помощи команды:
echo 0 > /proc/sys/net/core/bpf_jit_enable
Проблема вызвана ошибкой вычисления смещения для команд ветвления в процессе генерации машинного кода JIT-компилятором. В частности, при генерации инструкций ветвления не учитывается, что смещение может измениться после прохождения стадии оптимизации. Указанная недоработка может использоваться для формирования аномального машинного кода и его выполнения их на уровне ядре.
Примечательно, что это не единственная уязвимость в подсистеме еBPF за последнее время. В конце марта в ядре были выявлены (https://symantec-enterprise-blogs.security.com/blogs/threat-intelligence/spectre-bypass-linux-vulnerabilities) ещё две уязвимости (CVE-2020-27170 (https://security-tracker.debian.org/tracker/CVE-2020-27170), CVE-2020-27171 (https://security-tracker.debian.org/tracker/CVE-2020-27170)), предоставляющие возможность использовать еBPF для обхода защиты от уязвимостей класса Spectre (https://www.opennet.ru/keywords/spectre.html), позволяющих определять содержимое памяти ядра в результате создания условий для спекулятивного выполнения определённых операций. Для атаки Spectre требуется наличие в привилегированном коде определённой последовательности команд, приводящих к спекулятивному выполнению инструкций. В еBPF найдено несколько способов генерации подобных инструкций через манипуляции с передаваемыми для выполнения BPF-програмами.
Уязвимость CVE-2020-27170 вызвана (https://www.openwall.com/lists/oss-security/2021/03/24/4) наличием в верификаторе BPF манипуляций с указателями, вызывающими спекулятивные операции обращения к области вне границ буфера. Уязвимость CVE-2020-27171 связана с ошибкой целочисленной арифметики (integer underflow) при работе с указателями, приводящей к спекулятивному обращению к данным вне буфера. Указанные проблемы уже устранены в выпусках ядра 5.11.8, 5.10.25, 5.4.107, 4.19.182 и 4.14.227, а также вошли в состав обновлений ядра большинства дистрибутивов Linux. Исследователями подготовлен протитип эксплоита, позволяющий непривилегированному пользователю извлечь данные из памяти ядра.
09.04.2021
https://www.opennet.ru/opennews/art.shtml?num=54932
По заявлению исследователей, выявивших уязвимость, им удалось разработать рабочий прототип эксплоита для 32- и 64-разрядных систем x86, который может быть использован непривилегированным пользователем. При этом компания Red Hat отмечает (https://bugzilla.redhat.com/show_bug.cgi?id=CVE-2021-29154), что опасность проблемы зависит от доступности пользователю системного вызова eBPF. Например, в RHEL и большинстве других дистрибутивов Linux в конфигурации по умолчанию уязвимость может быть эксплуатирована при включении BPF JIT и наличии у пользователя прав CAP_SYS_ADMIN. В качестве обходной меры защиты рекомендуется отключить BPF JIT при помощи команды:
echo 0 > /proc/sys/net/core/bpf_jit_enable
Проблема вызвана ошибкой вычисления смещения для команд ветвления в процессе генерации машинного кода JIT-компилятором. В частности, при генерации инструкций ветвления не учитывается, что смещение может измениться после прохождения стадии оптимизации. Указанная недоработка может использоваться для формирования аномального машинного кода и его выполнения их на уровне ядре.
Примечательно, что это не единственная уязвимость в подсистеме еBPF за последнее время. В конце марта в ядре были выявлены (https://symantec-enterprise-blogs.security.com/blogs/threat-intelligence/spectre-bypass-linux-vulnerabilities) ещё две уязвимости (CVE-2020-27170 (https://security-tracker.debian.org/tracker/CVE-2020-27170), CVE-2020-27171 (https://security-tracker.debian.org/tracker/CVE-2020-27170)), предоставляющие возможность использовать еBPF для обхода защиты от уязвимостей класса Spectre (https://www.opennet.ru/keywords/spectre.html), позволяющих определять содержимое памяти ядра в результате создания условий для спекулятивного выполнения определённых операций. Для атаки Spectre требуется наличие в привилегированном коде определённой последовательности команд, приводящих к спекулятивному выполнению инструкций. В еBPF найдено несколько способов генерации подобных инструкций через манипуляции с передаваемыми для выполнения BPF-програмами.
Уязвимость CVE-2020-27170 вызвана (https://www.openwall.com/lists/oss-security/2021/03/24/4) наличием в верификаторе BPF манипуляций с указателями, вызывающими спекулятивные операции обращения к области вне границ буфера. Уязвимость CVE-2020-27171 связана с ошибкой целочисленной арифметики (integer underflow) при работе с указателями, приводящей к спекулятивному обращению к данным вне буфера. Указанные проблемы уже устранены в выпусках ядра 5.11.8, 5.10.25, 5.4.107, 4.19.182 и 4.14.227, а также вошли в состав обновлений ядра большинства дистрибутивов Linux. Исследователями подготовлен протитип эксплоита, позволяющий непривилегированному пользователю извлечь данные из памяти ядра.
09.04.2021
https://www.opennet.ru/opennews/art.shtml?num=54932