Уязвимость в Squirrelmail, позволяющая удаленно выполнить код на сервере
В почтовом web-клиенте Squirrelmail выявлена критическая уязвимость (CVE-2017-7692), позволяющая выполнить код на сервере через отправку через web-интерфейс специально оформленного письма. Проблема проявляется в последнем выпуске Squirrelmail 1.4.22. Так как Squirrelmail уже много лет не обновлялся и разработчики не ответили на уведомление о проблеме, исследователи безопасности самостоятельно подготовили патч. Уязвимость пока остается неисправленной в пакете squirrelmail, поставляемом в репозиториях Debian и Ubuntu.
Уязвимость вызвана отсутствием должных проверок аргументов, передаваемых при вызове утилиты sendmail через PHP-функцию popen(). В частности для чистки опасных символов перед вызовом popen использовалась функция escapeshellcmd(), которая не экранирует пробелы. Так как endmail вызывается с опцией "-f$envelopefrom", манипулируя с адресом отправителя атакующий может передать прозвольный набор аргументов, в том числе использовать опцию "-C" для инициирования обработки подставного файла конфигурации sendmail.cf. Через переопределение в файле конфигурации агента доставки можно выполнить в системе любой код. Так как Squirrelmail сохраняет вложения к письмам по известному пути (/var/local/squirrelmail/attach/{mgid}, то атакующий может сослаться на файл во вложении, например, отправив сообщение с полем "From: [email protected] -OQueueDirectory=/tmp -C /var/local/squirrelmail/attach/lF51mGPJwdqzV3LEDlCdSVNpohzgF7sD".