PDA

Просмотр полной версии : Уязвимость в подсистеме eBPF, позволяющая выполнить код на уровне ядра Linux


Suicide
12.01.2022, 22:31
В подсистеме eBPF, позволяющей запускать обработчики внутри ядра Linux в специальной виртуальной машине с JIT, выявлена (https://www.openwall.com/lists/oss-security/2022/01/11/4) уязвимость (CVE-2021-4204 (https://security-tracker.debian.org/tracker/CVE-2021-4204)), дающая возможность локальному непривилегированному пользователю добиться повышения привилегий и выполнения своего кода на уровне ядра Linux. Проблема проявляется начиная с ядра Linux 5.8 и пока остаётся неисправленной (затрагивает в том числе выпуск 5.16). Состояние формирования обновлений с устранением проблемы в дистрибутивах можно отследить на данных страницах: Debian (https://security-tracker.debian.org/tracker/CVE-2021-4204), RHEL (https://bugzilla.redhat.com/show_bug.cgi?id=CVE-2021-4204), SUSE (https://bugzilla.suse.com/show_bug.cgi?id=CVE-2021-4204), Fedora (https://bugzilla.redhat.com/show_bug.cgi?id=2039896), Ubuntu (https://people.canonical.com/~ubuntu-security/cve/CVE-2021-4204), Arch (https://security.archlinux.org/CVE-2021-4204). Заявлено о создании рабочего эксплоита, который планируют опубликовать 18 января (пользователям и разработчикам дана неделя на устранение уязвимости).

Уязвимость вызвана некорректной проверкой передаваемых для выполнения eBPF-программ. Подсистема eBPF предоставляет вспомогательные функции, корректность использования которых проверяет специальный верификатор. Некоторые функции требуют передачи значения PTR_TO_MEM в качестве аргумента и для предотвращения возможных переполнений буфера верификатор должен знать размер связанной с аргументом памяти. Для функций bpf_ringbuf_submit и bpf_ringbuf_discard данные о размере передаваемой памяти не сообщались верификатору, что могло использоваться для перезаписи областей памяти за границей буфера при выполнении специально оформленного eBPF-кода.

Для проведения атаки пользователь должен иметь возможность загрузки своей BPF-программы, а многие свежие дистрибутивы Linux по умолчанию блокируют такую возможность (в том числе непривилегрированный доступ к eBPF теперь запрещён по умолчанию и в самом ядре, начиная с выпуска 5.16). Например, уязвимость может быть эксплуатирована в конфигурации по умолчанию в Ubuntu 20.04 LTS, но в окружениях Ubuntu 22.04-dev, Debian 11, openSUSE 15.3, RHEL 8.5, SUSE 15-SP4 и Fedora 33 проявляется только если администратор выставил параметр kernel.unprivileged_bpf_disabled в значение 0. В качестве обходного пути блокирования уязвимости можно запретить выполнение BPF-программ непривилегированным пользователям командой "sysctl -w kernel.unprivileged_bpf_disabled=1".

12.01.2022

https://www.opennet.ru/opennews/art.shtml?num=56497​

alexzir
15.01.2022, 15:30
В OpenSUSE запуск BPF-программ по умолчанию заблокирован для всех, кроме учёток с правами рута. Про остальные не буду говорить.