Уразлівасць у падсістэме eBPF, якая дазваляе выканаць код на ўзроўні ядра Linux

У падсістэме eBPF, якая дазваляе запускаць апрацоўшчыкі ўсярэдзіне ядраў Linux у адмысловай віртуальнай машыне з JIT, выяўленая ўразлівасць (CVE-2021-4204), якая дае магчымасць лакальнаму непрывілеяванаму карыстачу дамагчыся падвышэнні прывілеяў і выкананні свайго кода на ўзроўні ядра Linux. Праблема выяўляецца пачынальна з ядра Linux 5.8 і пакуль застаецца нявыпраўленай (закранае ў тым ліку выпуск 5.16). Стан фармавання абнаўленняў з ухіленнем праблемы ў дыстрыбутывах можна адсачыць на дадзеных старонках: Debian, RHEL, SUSE, Fedora, Ubuntu, Arch. Заяўлена аб стварэнні рабочага эксплоіту, які плануюць апублікаваць 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 выяўляецца толькі калі у значэнне 0. У якасці абыходнага шляху блакавання ўразлівасці можна забараніць выкананне BPF-праграм непрывілеяваным карыстачам камандай «sysctl -w kernel.unprivileged_bpf_disabled=1».

Крыніца: opennet.ru

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