Уразлівасць у VFS ядра Linux, якая дазваляе падвысіць свае прывілеі

У API Filesystem Context, якія прадстаўляюцца ядром Linux, выяўленая ўразлівасць (CVE-2022-0185), якая дазваляе лакальнаму карыстачу дамагчыся атрыманні мае рацыю root у сістэме. Які выявіў праблему даследнік апублікаваў дэманстрацыю працы эксплоіта, які дазваляе выканаць код з правамі root у Ubuntu 20.04 у канфігурацыі па змаўчанні. Код эксплоіта плануецца размясціць на GitHub на працягу тыдня, пасля таго як дыстрыбутывы выпусцяць абнаўленне з выпраўленнем уразлівасці.

Уразлівасць прысутнічае ў функцыі legacy_parse_param() у VFS і выкліканая адсутнасць належнай праверкі максімальнага памеру параметраў, якія прадстаўляюцца ў файлавых сістэмах, не падтрымных API Filesystem Context. Пры перадачы занадта вялікага параметру можна выклікаць перапаўненне цэлалікавай зменнай, выкарыстоўванай для разліку памеру якія запісваюцца дадзеных - у кодзе маецца праверка вынахаду за мяжу буфера "if (len > PAGE_SIZE - 2 - size)", якая не спрацоўвае, калі значэнне size больш 4094 з- за цэлалікавага перапаўнення праз ніжнюю мяжу (integer underflow, пры прывядзенні 4096 - 2 - 4095 да unsigned int атрымаецца 2147483648).

Указаная памылка дазваляе пры звароце да спецыяльна аформленай выявы ФС выклікаць перапаўненне буфера і перазапісаць дадзеныя ядра, наступныя за вылучанай вобласцю памяці. Для эксплуатацыі ўразлівасці патрабуецца наяўнасць правоў CAP_SYS_ADMIN, г.зн. паўнамоцтваў адміністратара. Праблема ў тым, што падобныя паўнамоцтвы непрывілеяваны карыстач можа атрымаць у ізаляваным кантэйнеры, калі ў сістэме ўключаная падтрымка прастор імёнаў ідэнтыфікатараў карыстачоў (user namespaces). Напрыклад, user namespaces па змаўчанні ўключаны ў Ubuntu і Fedora, але не актываваны ў Debian і RHEL (калі не выкарыстоўваюцца платформы кантэйнернай ізаляцыі).

Праблема выяўляецца пачынальна з ядра Linux 5.1 і ўхіленая ва ўчорашніх абнаўленнях 5.16.2, 5.15.16, 5.10.93, 5.4.173. Абнаўленні пакетаў з ухіленнем уразлівасці ўжо выпушчаныя для RHEL, Debian, Fedora, Ubuntu. Выпраўленне пакуль недаступна ў Arch Linux, Gentoo, SUSE і openSUSE. У якасці абыходнага шляху абароны для сістэм, якія не выкарыстоўваюць кантэйнерную ізаляцыю, можна выставіць у 0 значэнне sysctl "user.max_user_namespaces": echo "user.max_user_namespaces=0" > /etc/sysctl.d/userns.conf # sysctl -p /etc/ sysctl.d/userns.conf

Крыніца: opennet.ru

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