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 до защищенной версии.

  1. Определите текущую версию Struts. Проверьте файлы struts-core-x.x.x.jar или pom.xml в вашем приложении.
  2. Обновите библиотеки 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 и т.д.).

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

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

  1. Настройте правила в WAF (Web Application Firewall):

    • Блокируйте HTTP-запросы, содержащие в параметрах или заголовках ключевые слова OGNL-выражений, такие как #_memberAccess, #context, #_class и #a.
    • Настройте сигнатуры для обнаружения попыток эксплуатации CVE-2012-0391.
  2. Ограничьте доступ к приложению:

    • Настройте сетевые ACL (Access Control Lists) или правила межсетевого экрана, чтобы разрешать доступ к веб-приложению только с доверенных IP-адресов (например, из внутренней сети или VPN).
  3. Мониторинг журналов (Logging):

    • Включите детальное логирование в Struts (struts.devMode не для продакшена) и в сервере приложений.
    • Настройте алерты на подозрительные запросы, содержащие символы #, {, } в параметрах.
    • Регулярно проверяйте логи на наличие аномалий.

Важно: Эти меры носят временный характер и не гарантируют полной защиты. Планируйте обновление Struts как можно скорее.