Уязвимость в пользовательском окружении Enlightenment, позволяющая получить права root

В пользовательском окружении Enlightenment выявлена уязвимость (CVE-2022-37706), позволяющая непривилегированному локальному пользователю выполнить код с правами root. Уязвимость пока не исправлена (0-day), но в открытом доступе уже имеется эксплоит, протестированный в Ubuntu 22.04.

Проблема присутствует в исполняемом файле enlightenment_sys, поставляемом с флагом suid root и выполняющем через вызов system() определённые разрешённые команды, такие как монтирование накопителя утилитой mount. Из-за некорректной работы функции, формирующей строку, передаваемую в вызов system(), из аргументов запускаемой команды вырезаются кавычки, что можно использоваться для запуска своего кода. Например, при запуске


   mkdir -p /tmp/net
   mkdir -p "/tmp/;/tmp/exploit"
   echo "/bin/sh" > /tmp/exploit
   chmod a+x /tmp/exploit
   enlightenment_sys /bin/mount -o noexec,nosuid,utf8,nodev,iocharset=utf8,utf8=0,utf8=1,uid=$(id -u), "/dev/../tmp/;/tmp/exploit" /tmp///net

из-за вырезания двойных кавычек, вместо указанной команды ‘/bin/mount … «/dev/../tmp/;/tmp/exploit» /tmp///net‘ в функцию system() будет передана строка без двойных кавычек ‘/bin/mount … /dev/../tmp/;/tmp/exploit /tmp///net‘, что приведёт к отдельному исполнению команды ‘/tmp/exploit /tmp///net‘ вместо обработки как части пути к устройству. Строки «/dev/../tmp/» и «/tmp///net» подобраны для обхода проверки аргументов команды mount в enlightenment_sys (устройство монтирования должно начинаться на /dev/ и указывать на существующий файл, а три символа «/» в точке монтирования указаны для достижения требуемого размера пути).

Источник: http://www.opennet.ru/opennews/art.shtml?num=57791