
Уязвимость 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; \ content:"multipart/form-data"; content:"boundary="; \ pcre:"/boundary=\s*\d+\s*(;|$)/"; \ sid:20244790; rev:1;)
-
Минимизация прав:
Запуск Apache под пользователем с ограниченными привилегиями:User www-data Group www-data
