В публичен достъп е публикуван експлоит за седмата уязвимост (1, 2-3, 4, 5, 6) в ядрото на Linux, която позволява на непривилегирован локален потребител да получи права root, презаписвайки данни в страницовия кеш. Идентификаторът CVE все още не е присвоен, освен кода на експлоита, информация за проблема все още липсва. Поправката е налична само под формата на пач, който е публикуван на 20 май и на 21 май е приет в основната клонка на ядрото на Linux (коригиращи версии на ядрото все още не са налични).
Уязвимостта е налична в реализацията на технологията GRO (Generic Receive Offload), използвана за ускоряване на обработката на сегментирани пакети. Уязвимостта е причинена от грешка в реализацията на механизма zerocopy в функцията skb_gro_receive(), която извършва директна модификация на данните в страницовия кеш, за да се избегне ненужна буферизация. При зададен флаг SKBFL_MANAGED_FRAG_REFS се пропускаше запазването на линка към освобождаваните страници памет в полето shinfo->frags, след което това поле се свързваше с друг skb без промяна на брояча на линковете, което водеше до достъп до паметта след нейното освобождаване (use-after-free). Проблемът беше експлоатиран за презапис на данни в страницовия кеш, благодарение на манипулация с указателя към буфера io_uring.
Атаката е възможна на системи с включена подсистема io_uring (io_uring_disabled=0). За работата на експлоита в системата трябва да има достъпен за четене изпълним файл с флаг SUID-root. Механизмът на експлоатация се състои в това, че атакуващият успява да настани базата от потребители в страницовия кеш, след което в кеша се вмъква редът "hax::0:0::/root:/bin/sh". След това се стартира команда "su hax", която получава не оригиналната база от потребители от носителя, а изменена копия с подставен логин "hax", на който са предоставени права root и празна парола. Работата на експлоита е тествана в Ubuntu 24.04.
Източник: opennet.ru
