Уязвимость в Apache HTTP Server
Уязвимость в Apache HTTP Server
Категория: Программы Теги: Уязвимости Опубликовано: 8 июня 2025

Уязвимость 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) - Полное нарушение доступности.


Условия эксплуатации

  1. Версия ПО: Apache 2.4.51 или ниже с включенным модулем mod_lua.

  2. Конфигурация: Наличие Lua-скриптов, обрабатывающих r:parsebody() (например, test.lua).

  3. Сетевой доступ: Возможность отправки 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.


Что может получить злоумышленник?

  1. RCE (Remote Code Execution):

    • При успешной эксплуатации переполнения возможно выполнение шелл-кода.

    • Пример: запуск calc.exe или бинд-шелла на порт 4444.

  2. DoS (Denial of Service):

    • Краш рабочего процесса Apache → недоступность сервиса.

  3. Чтение памяти:

    • Утечка чувствительных данных (сессии, токены) через анализ дампов.


Защита и рекомендации

  1. Обновление:
    Установить Apache версии 2.4.52+.

    apt upgrade apache2 # Для Debian/Ubuntu
  2. Отключение mod_lua:
    Если модуль не используется, удалите его из конфигурации:

    LoadModule lua_module modules/mod_lua.so   # Закомментировать эту строку
  3. 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" 
  4. Правило для 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;)
  5. Минимизация прав:
    Запуск Apache под пользователем с ограниченными привилегиями:

    User www-data
    Group www-data
Алексей Черемных Алексей Черемных
40