Уязвимость BDU:2021-06392 (CVE-2021-44790) Apache HTTP Server
Уязвимость BDU:2021-06392 (CVE-2021-44790) переполнения буфера в модуле mod_lua Apache HTTP Server (до версии 2.4.51 включительно). Возникает при обработке специально сформированных HTTP-запросов типа multipart/form-data функцией r:parsebody(), что позволяет удаленному злоумышленнику выполнить произвольный код или вызвать отказ в обслуживании (DoS).
Анализ уязвимости
Уровень опасности: 9.8 CRITICAL
Вектор атаки: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/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:U (Scope: Unchanged) - Воздействие на другие компоненты: не оказывает.
-
C:H (Confidentiality: High) - Полное нарушение конфиденциальности.
-
I:H (Integrity: High) - Полное нарушение целостности.
-
A:H (Availability: High) - Полное нарушение доступности.
Условия эксплуатации
-
Версия ПО: Apache 2.4.51 или ниже с включенным модулем
mod_lua. -
Конфигурация: Наличие Lua-скриптов, обрабатывающих
r:parsebody()(например,test.lua). -
Сетевой доступ: Возможность отправки HTTP-запросов на уязвимый сервер (не требует аутентификации).
Анализ эксплойтов
Рассмотрим код эксплоита для понимания работы вектора атаки с использованием уязвимости CVE-2021-44790.
Эксплойт 1 (Python, Sunil Iyengar)
import requests
url = "http://10.6.10.131/test.lua"
payload = "4\r\nContent-Disposition: form-data; name=\"name\"\r\n\r\n0\r\n4\r\n"
headers = {'Content-Type': 'multipart/form-data; boundary=4'}
response = requests.post(url, headers=headers, data=payload)
print(response.text)
Механизм атаки:
-
Отправка некорректного
multipart-запроса с нарушенной структурой (boundary=4). -
Нарушение формата вызывает ошибку в функции
ap_parse_body(), которая неправильно рассчитывает размер буфера при копировании данных. -
Результат: переполнение буфера в heap-памяти → краш процесса с кодом ошибки
0xc0000005(ACCESS_VIOLATION).
Эксплойт 2 (Windows-тестирование)
-
Цель: DoS через перезапись критических структур памяти.
-
Симптомы на сервере:
-
Логи Apache:
child process exited with status 3221225477(STATUS_ACCESS_VIOLATION). -
События Windows: сбой
httpd.exeиз-за ошибки вMSVCR110.dll.
-
Что может получить злоумышленник?
-
RCE (Remote Code Execution):
-
При успешной эксплуатации переполнения возможно выполнение шелл-кода.
-
Пример: запуск
calc.exeили бинд-шелла на порт 4444.
-
-
DoS (Denial of Service):
-
Краш рабочего процесса Apache → недоступность сервиса.
-
-
Чтение памяти:
-
Утечка чувствительных данных (сессии, токены) через анализ дампов.
-
Защита и рекомендации
-
Обновление:
Установить Apache версии 2.4.52+.apt upgrade apache2 # Для Debian/Ubuntu
-
Отключение
mod_lua:
Если модуль не используется, удалите его из конфигурации:LoadModule lua_module modules/mod_lua.so # Закомментировать эту строку
-
WAF-правило (ModSecurity):
Блокировка аномальныхboundary-значений:SecRule REQUEST_HEADERS:Content-Type "@rx boundary=([^\s;]+)" \ "chain,id:1001,deny,msg:'CVE-2021-44790 Exploit Attempt'" SecRule MATCHED_VAR "@rx ^\d+$" "setvar:'tx.boundary_value=%{matched_var}'" SecRule TX:BOUNDARY_VALUE "@gt 10" -
Правило для Suricata (IDS):
Обнаружение аномальных запросов:alert http any any -> $HOME_NET any (msg:"Apache CVE-2021-44790 Exploit"; flow:established,to_server; content:"multipart/form-data"; content:"boundary="; pcre:"/boundary=[0-9]+/"; sid:20244790; rev:5;) Данное правило можно найти в моём наборе правил к Suricata (https://alekseycheremnykh.ru/post/moj-nabor-pravil-k-suricata/).
-
Минимизация прав:
Запуск Apache под пользователем с ограниченными привилегиями:User www-data Group www-data