
Exploit de PoC para vulnerabilidade de estouro de inteiro no Nginx (CVE-2017-7529) que permite leitura de cache fora dos limites. Inclui ambiente de laboratório baseado em Docker e script Python para testes.
Leitura de referência:
Quando o Nginx atua como proxy reverso, ele geralmente armazena alguns arquivos em cache, especialmente arquivos estáticos. A parte em cache é armazenada em um arquivo, e cada arquivo de cache inclui “cabeçalho do arquivo” + “cabeçalho de resposta HTTP” + “corpo da resposta HTTP”. Se uma requisição subsequente atingir esse arquivo em cache, o Nginx retornará diretamente o “corpo da resposta HTTP” do arquivo para o usuário.
Se minha requisição contiver o cabeçalho Range, o Nginx retornará o conteúdo de comprimento especificado com base nas posições start e end que eu especificar. E se eu construir duas posições negativas, como (-600, -9223372036854774591), é possível ler dados em posições negativas. Se essa requisição também atingir o arquivo em cache, então pode ser possível ler conteúdos como “cabeçalho do arquivo”, “cabeçalho de resposta HTTP” que estão antes do “corpo da resposta HTTP” no arquivo de cache.
Execute o ambiente de teste:
docker-compose up -d
Acesse http://your-ip:8080/ e você verá a página padrão do Nginx, que na verdade é o conteúdo da porta 8081 do proxy reverso.
Execute python3 poc.py http://your-ip:8080/ para ler o resultado retornado:

Percebe-se que a leitura fora dos limites obteve o “cabeçalho do arquivo”, “cabeçalho de resposta HTTP” que estão antes do “corpo da resposta HTTP”.
Se a leitura estiver incorreta, ajuste o endereço de deslocamento (605) no poc.py.