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.
- Определите текущую версию. Проверьте файлы
composer.jsonилиthinkphp/base.phpв корне проекта. - Обновите фреймворк.
- Если используется Composer (рекомендуется):
bash # Перейдите в корневую директорию проекта cd /path/to/your/project # Выполните обновление пакета topthink/framework composer update topthink/framework - Если фреймворк установлен вручную: Замените ядро фреймворка (
thinkphpдиректорию) на версию 5.0.23 или новее из официального репозитория: https://github.com/top-think/framework.
- Если используется Composer (рекомендуется):
- Проверьте и обновите все зависимости проекта, так как они также могут использовать уязвимые компоненты.
Временное решение
Если немедленное обновление невозможно, примените следующие меры:
-
Настройка 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}'"
- Добавьте правило для блокировки HTTP-запросов, содержащих в параметрах (
-
Веб-сервер (Nginx): Добавьте в конфигурацию сайта правило, отбрасывающее запросы с определенными параметрами.
nginx location ~* \.php$ { if ($query_string ~* "filter=.*system.*") { return 403; } # ... остальная конфигурация } -
Ограничение доступа: Настройте сетевые ACL или firewall (например,
iptables) на уровне сервера, чтобы ограничить доступ к веб-интерфейсу только доверенным IP-адресам.
Важно: Временные решения лишь усложняют эксплуатацию, но не устраняют уязвимость. Планируйте установку официального патча как можно скорее.