CVE-2006-1547

Apache Struts 1

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

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

2022-01-21

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

ActionForm in Apache Struts versions before 1.2.9 with BeanUtils 1.7 contains a vulnerability that allows for denial-of-service (DoS).

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

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

Уязвимость в классе ActionForm Apache Struts 1 (с BeanUtils 1.7) позволяет злоумышленнику отправить специально сформированный HTTP-запрос. При его обработке происходит рекурсивное обращение к геттерам объектов Java, что приводит к исчерпанию ресурсов (CPU, память) на сервере и вызывает отказ в обслуживании (DoS).

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

Основное решение — обновить Apache Struts до версии, в которой уязвимость устранена.

  1. Обновите Apache Struts 1 до версии 1.2.9 или выше.
  2. Обновите Apache Commons BeanUtils до версии 1.8.0 или выше.

Для систем на базе Debian/Ubuntu (если пакет доступен в репозиториях):

sudo apt update
sudo apt install libstruts1.2-java libcommons-beanutils-java

Убедитесь, что установленные версии пакетов соответствуют требованиям (1.2.9+ и 1.8.0+).

Общее решение (ручное обновление библиотек): 1. Скачайте актуальные версии библиотек: * Struts 1: https://archive.apache.org/dist/struts/source/ * Commons BeanUtils: https://commons.apache.org/proper/commons-beanutils/ 2. Замените файлы struts.jar и commons-beanutils.jar в директории WEB-INF/lib вашего веб-приложения на новые. 3. Перезапустите ваш Java-сервер приложений (например, Tomcat):

sudo systemctl restart tomcat9

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

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

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

    • Создайте и активируйте правило для блокировки HTTP-запросов, содержащих в параметрах строки, характерные для эксплойта (например, множественные вложенные вызовы геттеров вида class.classLoader). Пример правила для ModSecurity: SecRule ARGS_NAMES "@rx \.(class|classLoader|protectionDomain)\." \ "id:1006,phase:2,deny,status:403,msg:'Potential Struts DoS Exploit Attempt'"
  2. Ограничение на уровне приложения:

    • Реализуйте кастомный RequestProcessor или фильтр, который будет проверять входящие параметры на наличие чрезмерно длинных имен или глубокой вложенности через точку и отклонять такие запросы.
  3. Ограничение на уровне сети/системы:

    • Используйте iptables или fail2ban для временного блокирования IP-адресов, с которых поступает аномально большое количество запросов к уязвимым эндпоинтам Struts.
    • Установите жесткие лимиты на использование CPU и памяти для процесса вашего Java-сервера (например, через systemd или cgroups), чтобы минимизировать последствия успешной атаки.