В потребителската среда 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/ и да сочи към съществуващ файл, а трите символа '/' в точката на монтаж са посочени за достигане на изискваната дължина на пътя).
Източник: opennet.ru
