CVE-2018-20062

ThinkPHP noneCms

ВЫСОКАЯ ВЕРОЯТНОСТЬ

Дата обнаружения

2021-11-03

Официальное описание

ThinkPHP "noneCms" contains an unspecified vulnerability that allows for remote code execution through crafted use of the filter parameter.

🛡️
Технический анализ и план устранения

Суть уязвимости

Уязвимость (CVE-2018-20062) в фреймворке ThinkPHP (ветка noneCms) позволяет злоумышленнику выполнить произвольный код на сервере. Атака возможна через HTTP-запросы, в которых специальным образом сформирован параметр filter. Эксплуатация не требует аутентификации.

Как исправить

Основное решение — обновление фреймворка. Уязвимость была устранена в более новых версиях ThinkPHP.

  1. Определите текущую версию. Проверьте файлы composer.json или thinkphp/base.php в корне проекта.
  2. Обновите фреймворк.
    • Если используется Composer (рекомендуется): bash # Перейдите в корневую директорию проекта cd /path/to/your/project # Выполните обновление пакета topthink/framework composer update topthink/framework
    • Если фреймворк установлен вручную: Замените ядро фреймворка (thinkphp директорию) на версию 5.0.23 или новее из официального репозитория: https://github.com/top-think/framework.
  3. Проверьте и обновите все зависимости проекта, так как они также могут использовать уязвимые компоненты.

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

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

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

    • Добавьте правило для блокировки HTTP-запросов, содержащих в параметрах (GET, POST, COOKIE) подозрительные строки, связанные с эксплуатацией этой уязвимости (например, system(, exec(, eval( в связке с именами параметров типа filter).
    • Пример правила для ModSecurity (CRS): SecRule ARGS_NAMES "@rx filter" \ "id:100018,phase:2,deny,status:403,msg:'ThinkPHP RCE Attempt (CVE-2018-20062)',logdata:'%{MATCHED_VAR}'"
  2. Веб-сервер (Nginx): Добавьте в конфигурацию сайта правило, отбрасывающее запросы с определенными параметрами. nginx location ~* \.php$ { if ($query_string ~* "filter=.*system.*") { return 403; } # ... остальная конфигурация }

  3. Ограничение доступа: Настройте сетевые ACL или firewall (например, iptables) на уровне сервера, чтобы ограничить доступ к веб-интерфейсу только доверенным IP-адресам.

Важно: Временные решения лишь усложняют эксплуатацию, но не устраняют уязвимость. Планируйте установку официального патча как можно скорее.