CVE-2012-0391
Apache Struts 2
2022-01-21
The ExceptionDelegator component in Apache Struts 2 before 2.2.3.1 contains an improper input validation vulnerability that allows for remote code execution.
Технический анализ и план устранения
Суть уязвимости
Уязвимость в компоненте ExceptionDelegator Apache Struts 2 (версии до 2.2.3.1) позволяет злоумышленнику выполнить произвольный код на сервере. Атакующий отправляет специально сформированный HTTP-запрос с вредоносными параметрами, которые некорректно валидируются. При обработке исключения эти параметры интерпретируются как выражения OGNL (Object-Graph Navigation Language), что приводит к выполнению кода.
Как исправить
Основное решение — обновить Apache Struts 2 до защищенной версии.
- Определите текущую версию Struts. Проверьте файлы
struts-core-x.x.x.jarилиpom.xmlв вашем приложении. -
Обновите библиотеки Struts. Установите одну из версий:
- Struts 2.3.x: Обновитесь до 2.3.4.1 или новее.
- Struts 2.2.x: Обновитесь до 2.2.3.1 или новее.
Пример для Maven-проекта: Обновите версию в
pom.xml:xml <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-core</artifactId> <version>2.3.14.3</version> <!-- Используйте актуальную стабильную версию --> </dependency>После изменения выполните:bash mvn clean installПересоберите и переразверните ваше веб-приложение (WAR-файл) на сервере приложений (Tomcat, JBoss и т.д.).
Временное решение
Если немедленное обновление невозможно, примените следующие меры:
-
Настройте правила в WAF (Web Application Firewall):
- Блокируйте HTTP-запросы, содержащие в параметрах или заголовках ключевые слова OGNL-выражений, такие как
#_memberAccess,#context,#_classи#a. - Настройте сигнатуры для обнаружения попыток эксплуатации CVE-2012-0391.
- Блокируйте HTTP-запросы, содержащие в параметрах или заголовках ключевые слова OGNL-выражений, такие как
-
Ограничьте доступ к приложению:
- Настройте сетевые ACL (Access Control Lists) или правила межсетевого экрана, чтобы разрешать доступ к веб-приложению только с доверенных IP-адресов (например, из внутренней сети или VPN).
-
Мониторинг журналов (Logging):
- Включите детальное логирование в Struts (
struts.devModeне для продакшена) и в сервере приложений. - Настройте алерты на подозрительные запросы, содержащие символы
#,{,}в параметрах. - Регулярно проверяйте логи на наличие аномалий.
- Включите детальное логирование в Struts (
Важно: Эти меры носят временный характер и не гарантируют полной защиты. Планируйте обновление Struts как можно скорее.