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 до версии, в которой уязвимость устранена.
- Обновите Apache Struts 1 до версии 1.2.9 или выше.
- Обновите 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
Временное решение
Если немедленное обновление невозможно, примените следующие меры:
-
Настройка 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'"
- Создайте и активируйте правило для блокировки HTTP-запросов, содержащих в параметрах строки, характерные для эксплойта (например, множественные вложенные вызовы геттеров вида
-
Ограничение на уровне приложения:
- Реализуйте кастомный
RequestProcessorили фильтр, который будет проверять входящие параметры на наличие чрезмерно длинных имен или глубокой вложенности через точку и отклонять такие запросы.
- Реализуйте кастомный
-
Ограничение на уровне сети/системы:
- Используйте
iptablesилиfail2banдля временного блокирования IP-адресов, с которых поступает аномально большое количество запросов к уязвимым эндпоинтам Struts. - Установите жесткие лимиты на использование CPU и памяти для процесса вашего Java-сервера (например, через
systemdилиcgroups), чтобы минимизировать последствия успешной атаки.
- Используйте