Уразливості у підсистемі 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 у конфігурації за умовчанням уразливість може бути експлуатована при включенні BPF JIT та наявності у користувача прав CAP_SYS_ADMIN. В якості обхідного захисту рекомендується відключити 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. Дослідниками підготовлено протитип експлоїту, що дозволяє непривілейованому користувачеві витягти дані з пам'яті ядра.

Джерело: opennet.ru

Додати коментар або відгук