CVE-2017-9791
Apache Struts 1
2022-02-10
The Struts 1 plugin in Apache Struts might allow remote code execution via a malicious field value passed in a raw message to the ActionMessage.
Технический анализ и план устранения
Суть уязвимости
Уязвимость (CVE-2017-9791) в плагине Struts 1 позволяет злоумышленнику выполнить произвольный код на сервере. Для этого атакующий отправляет специально сформированное HTTP-сообщение, содержащее вредоносное значение в поле ActionMessage. При обработке этого сообщения фреймворк некорректно интерпретирует переданные данные, что приводит к выполнению кода.
Как исправить
Основное решение — обновить Apache Struts до исправленной версии или применить патч.
-
Обновление Apache Struts 1:
- Перейдите на версию Struts 1.3.10 или выше.
- Скачайте последнюю версию с официального сайта: https://struts.apache.org/download.cgi#struts1
- Замените файлы библиотек (JAR) в вашем проекте и пересоберите приложение.
-
Если используется система управления пакетами (например, в дистрибутиве Linux): ```bash # Пример для систем, где Struts поставляется в виде пакета (имя пакета может отличаться) # Сначала проверьте доступные версии: apt-cache policy libstruts1.2-java
Обновите пакет, если доступна исправленная версия:
sudo apt update sudo apt install --only-upgrade libstruts1.2-java ```
-
Применение патча вручную:
- Патч доступен в репозитории Apache. Вам необходимо изменить исходный код класса, отвечающего за обработку
ActionMessage, и перекомпилировать библиотеку. Подробности и файлы для патча ищите в официальном бюллетене Apache по данной CVE.
- Патч доступен в репозитории Apache. Вам необходимо изменить исходный код класса, отвечающего за обработку
Временное решение
Если немедленное обновление невозможно, примите следующие меры:
-
Настройка WAF (Web Application Firewall):
- Добавьте правило для блокировки запросов, содержащих в теле или параметрах подозрительные конструкции, характерные для эксплуатации этой уязвимости (например, строки с
ActionMessageи вложенными выражениями OGNL). - Пример правила для ModSecurity (концептуально):
SecRule REQUEST_BODY|REQUEST_URI|ARGS "@rx (?i)ActionMessage.*\\.\\s*\\(" \ "id:1001,phase:2,deny,status:403,msg:'Possible CVE-2017-9791 Exploit Attempt'"
- Добавьте правило для блокировки запросов, содержащих в теле или параметрах подозрительные конструкции, характерные для эксплуатации этой уязвимости (например, строки с
-
Контроль доступа:
- Ограничьте доступ к уязвимому приложению на сетевом уровне (с помощью брандмауэра) только для доверенных IP-адресов или сегментов сети.
-
Мониторинг:
- Включите детальное логирование всех HTTP-запросов к приложению и настройте алерты на попытки передачи нестандартных данных в полях, связанных с
ActionMessage. - Регулярно проверяйте логи на наличие аномалий.
- Включите детальное логирование всех HTTP-запросов к приложению и настройте алерты на попытки передачи нестандартных данных в полях, связанных с
Важно: Временные решения лишь снижают риск и не заменяют установку официального патча.