В подсистемата 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 се проявява само ако администраторът е зададал параметъра kernel.unprivileged_bpf_disabled на стойност 0. Като обходен вариант за блокиране на уязвимостта, може да се забрани изпълнението на BPF-програми от непривилегировани потребители с командата „sysctl -w kernel.unprivileged_bpf_disabled=1.“
Източник: opennet.ru
