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 до защищенной версии.

  1. Для ThinkPHP 5.0.x обновитесь до версии 5.0.24. bash # Если используется Composer composer update topthink/framework
  2. Для ThinkPHP 5.1.x обновитесь до версии 5.1.31. bash # Если используется Composer composer update topthink/framework
  3. Проверьте точную версию в файле composer.json вашего проекта в секции require: json "require": { "topthink/framework": "5.1.31" } После изменения файла выполните: bash composer update

Временное решение

Если немедленное обновление невозможно, примените следующие меры:

  1. Настройка веб-сервера (Nginx): Добавьте правило, блокирующее запросы, содержащие опасные шаблоны. nginx location / { if ($query_string ~* "(\think\\app/invokefunction|call_user_func_array)") { return 403; } # ... остальная конфигурация } После изменения конфига перезагрузите Nginx: bash sudo nginx -s reload

  2. Настройка WAF (Web Application Firewall):

    • Создайте правило, которое блокирует запросы, где параметр s содержит последовательности \think\app или invokefunction.
    • Включите сигнатуры, детектирующие RCE (Remote Code Execution) для PHP-фреймворков.
  3. Ограничение доступа: Настройте сетевой ACL или брандмауэр, чтобы ограничить доступ к веб-приложению только доверенным IP-адресам.