Критические уязвимости в подсистеме eBPF ядра Linux

Автор denkin, декабря 23, 2017, 16:09:15

« предыдущая - следующая »

denkin

ЦитироватьВ подсистеме eBPF, позволяющей запускать обработчики для трассировки, анализа работы подсистем и управления трафиком, выполняемые внутри ядра в специальной виртуальной машине с JIT, выявлена серия уязвимостей, которые могут быть использованы локальным атакующим для запуска кода с правами ядра через загрузку специально оформленного eBPF-приложения. Выявленные уязвимости проявляются в ядрах Linux 4.9+ и 4.14+, но в общем виде проблемы в eBPF представляют опасность начиная с ядра 4.4, в котором появилась возможность загрузки программ eBPF непривилегированными пользователями.

Новость на Opennet.
Спойлер


"Так как помимо опубликованных исследователями прототипов эксплоитов в сети выявлено наличие публично доступного рабочего эксплоита для получения root-доступа через данные уязвимости, рекомендуется срочно отключить поддержку запуска eBPF непривилегированными пользователями при помощи "sysctl kernel.unprivileged_bpf_disabled=1", что приведёт к невозможности использования обычными пользователями средств трассировки и анализа производительности на базе eBPF.

Исправление пока доступно только в виде патчей, которые ещё не включены в основной состав ядра. Дистрибутивы пока не выпустили обновления: Debian, openSUSE, Fedora и Ubuntu. Проблемы не затрагивают ядро из состава SUSE Linux Enterprise и Red Hat Enterprise Linux 5, 6 и 7. Отмечается, что публично доступные эксплоиты корректно не работают в Debian 9 с ядром 4.9 (eBPF включен по умолчанию для обычных пользователей), но, по мнению разработчиков Debian, могут быть легко адаптированы для атаки.

Уязвимости вызваны восемью ошибками (CVE-2017-16996), появившимися в ядре 4.14, и одной ошибкой в ядре 4.9 (CVE-2017-16995). Проблемы вызваны некорректным преобразованием типов и отсутствием должных проверок в коде верификации eBPF-приложений (bpf/verifier.c), что позволяет осуществлять управляемое чтение и запись в произвольные области памяти ядра. Ряд проблем вызван тем, что в проверочном вызове check_alu_op() не осуществляется разделение между операциями BPF_ALU64|BPF_MOV|BPF_K (знаковое заполнение при чтение 32-разрядных значений в 64-разрядные ячейки) и BPF_ALU|BPF_MOV|BPF_K (добавочное заполнение нулями). Другие проблемы связаны с некорректным обрезанием значений регистров при преобразовании в значения меньшего размера, отсутствием проверки выхода за границы и выравнивания указателя стека."
(ц)
[свернуть]