CVE-2019-9082
ThinkPHP ThinkPHP
2021-11-03
ThinkPHP contains an unspecified vulnerability that allows for remote code execution via public//?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]= followed by the command.
Технический анализ и план устранения
Суть уязвимости
Злоумышленник может выполнить произвольные системные команды на сервере, отправив специально сформированный HTTP-запрос к уязвимому приложению ThinkPHP. Уязвимость возникает из-за некорректной обработки входных данных в маршрутизаторе фреймворка, что позволяет вызвать опасные функции PHP (например, system).
Пример эксплуатации:
GET /public//?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=id HTTP/1.1
Host: target.com
В данном примере будет выполнена команда id.
Как исправить
Основное решение — обновить фреймворк ThinkPHP до защищенной версии.
- Для ThinkPHP 5.0.x обновитесь до версии 5.0.24.
bash # Если используется Composer composer update topthink/framework - Для ThinkPHP 5.1.x обновитесь до версии 5.1.31.
bash # Если используется Composer composer update topthink/framework - Проверьте точную версию в файле
composer.jsonвашего проекта в секцииrequire:json "require": { "topthink/framework": "5.1.31" }После изменения файла выполните:bash composer update
Временное решение
Если немедленное обновление невозможно, примените следующие меры:
-
Настройка веб-сервера (Nginx): Добавьте правило, блокирующее запросы, содержащие опасные шаблоны.
nginx location / { if ($query_string ~* "(\think\\app/invokefunction|call_user_func_array)") { return 403; } # ... остальная конфигурация }После изменения конфига перезагрузите Nginx:bash sudo nginx -s reload -
Настройка WAF (Web Application Firewall):
- Создайте правило, которое блокирует запросы, где параметр
sсодержит последовательности\think\appилиinvokefunction. - Включите сигнатуры, детектирующие RCE (Remote Code Execution) для PHP-фреймворков.
- Создайте правило, которое блокирует запросы, где параметр
-
Ограничение доступа: Настройте сетевой ACL или брандмауэр, чтобы ограничить доступ к веб-приложению только доверенным IP-адресам.