Уязвимости в подсистемата 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 компилатора. По-специално, при генерирането на инструкции за разклоняване не се взема предвид, че отместването може да се промени след етапа на оптимизация. Описаната недостатъчност може да се използва за създаване на аномален машинен код и неговото изпълнение на ниво ядро.

Забележително е, че това не е единствената уязвимост в подсистемата eBPF напоследък. В края на март в ядрото бяха открити още две уязвимости (CVE-2020-27170, CVE-2020-27171), които предоставят възможност за използване на eBPF за заобикаляне на защитата от уязвимости от клас Spectre, позволяващи определяне на съдържанието на ядрото в резултат на създаване на условия за спекулативно изпълнение на определени операции. За атака Spectre е необходимо привилегировано кодово последствие, водещо до спекулативно изпълнение на инструкции. В eBPF са намерени няколко начина за генериране на подобни инструкции чрез манипулации с предаваните за изпълнение 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

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster