CVE-2020-17463

Fuel CMS Fuel CMS

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

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

2021-12-10

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

FUEL CMS 1.4.7 allows SQL Injection via the col parameter to /pages/items, /permissions/items, or /navigation/items.

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

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

Злоумышленник может выполнить произвольные SQL-запросы к базе данных, отправляя специально сформированные данные в параметр col в следующих URL: * /pages/items * /permissions/items * /navigation/items

Это позволяет читать, изменять или удалять данные в БД, а в некоторых случаях — получить контроль над сервером.

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

Основной метод: Обновление FUEL CMS до версии 1.4.8 или выше, где данная уязвимость устранена.

Для систем на базе Debian/Ubuntu:

# 1. Скачайте и распакуйте последнюю версию FUEL CMS с официального сайта или GitHub
wget https://github.com/daylightstudio/FUEL-CMS/archive/refs/tags/1.5.1.zip
unzip 1.5.1.zip

# 2. Создайте резервную копию текущей установки и базы данных
cp -r /var/www/fuel/ /var/www/fuel_backup_$(date +%Y%m%d)/
mysqldump -u [user] -p [fuel_database] > /backup/fuel_db_backup_$(date +%Y%m%d).sql

# 3. Замените файлы ядра CMS (папки `fuel/application/`, `fuel/modules/fuel/`)
# Скопируйте новые файлы из распакованного архива поверх старой установки, сохранив свою конфигурацию (fuel/application/config/)
cp -r FUEL-CMS-1.5.1/fuel/application/ /var/www/fuel/fuel/
cp -r FUEL-CMS-1.5.1/fuel/modules/fuel/ /var/www/fuel/fuel/modules/

# 4. Проверьте и обновите схему БД, если это требуется в релизных заметках новой версии
# 5. Очистите кэш CMS
rm -rf /var/www/fuel/fuel/application/cache/*

Для Windows-сервера: Процесс аналогичен — замените файлы ядра CMS вручную из актуального релиза.

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

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

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

    • В ModSecurity (для Apache) или NAXSI (для Nginx) добавьте правило для блокировки запросов, содержащих в параметре col SQL-операторы (UNION, SELECT, INSERT, --, ', # и т.д.).
    • Пример базового правила для ModSecurity: apache SecRule ARGS_GET:"col" "(union|select|insert|update|delete|drop|--|\'|\#)" \ "id:10001,phase:2,deny,status:403,msg:'SQLi Attempt in col parameter'"
  2. Ограничение доступа на уровне веб-сервера:

    • В конфигурации виртуального хоста Apache (.htaccess или httpd.conf) или Nginx запретите прямой доступ к уязвимым endpoint'ам для всех, кроме доверенных IP-адресов (администраторов).
    • Пример для Nginx: nginx location ~ ^/(pages|permissions|navigation)/items { allow 192.168.1.100; # Ваш IP для администрирования allow 10.0.0.0/24; # Ваша доверенная сеть deny all; proxy_pass http://backend; # Или fastcgi_pass, в зависимости от конфигурации }
  3. Экстренный "костыль":

    • В контроллерах FUEL CMS, обрабатывающих /pages/items, /permissions/items, /navigation/items, добавьте проверку параметра col перед выполнением запроса. Это крайняя мера, так как требует изменения кода ядра CMS. После обновления правки будут перезаписаны.
    • Найдите файлы контроллеров (например, fuel/modules/fuel/controllers/) и перед любым использованием $this->input->get('col') добавьте валидацию, например, на соответствие ожидаемому списку допустимых названий столбцов.