Уразлівасці ў падсістэме 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

Дадаць каментар