
PoC for CVE-2025-10952 — ml-logger の未認証任意ファイル読み取り。CVSS 5.3
stream_handler 任意文件读取このリポジトリは、ml-logger の stream_handler における認証不要の任意ファイル読み取り脆弱性を悪用し、/glob エンドポイントと連鎖させてファイルシステムを列挙するスタンドアロンのPythonスクリプト CVE-2025-10952.py を提供します。
脆弱性のある ml-logger インスタンスに対して実行すると、以下の動作を行います:
/glob エンドポイントを介してターゲットホスト上のファイルを列挙します(認証不要、意図されたスコープ外へのパス制限なし)。key パラメータを指定し、/stream エンドポイントを介して任意のファイルを読み取ります。stream_handler はクライアントから提供された フィールドを、包含チェックなしで直接ファイルパス解決およびストリーミング呼び出しに渡すため、認証不要のネットワーク攻撃者は、サービスのOSユーザーがアクセス可能な任意のファイルを読み取ることができます。
keyml_logger/server.py — stream_handler(ファイルハンドラ)AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:Nacf255bade5be6ad88d90735c8367b28cbe3a743 までの全バージョン(ローリングリリースプロジェクト。開示時点で修正版は未公開)stream_handler は key フィールドを含むJSONボディを受け取り、パスのサニタイズなしで直接ファイル読み取り呼び出しに渡します。兄弟エンドポイントである glob_handler は部分的なパス制限(絶対パスとトラバーサルのブロック)を実装していますが、stream_handler はその検証を共有していません — key 内の二重の先頭スラッシュ(例: //root/.ssh/id_rsa)は、意図されたベースディレクトリから突破するのに十分です。
ml-logger API インスタンスへのネットワークアクセスgit clone https://github.com/Khashayarnzk/CVE-2025-10952-ml-logger-AFR.git
cd CVE-2025-10952-ml-logger-AFR
pip install -r requirements.txt
ファイルの列挙:
python3 CVE-2025-10952.py --target TARGET --port 8081 --glob "/etc/*"
任意のファイルの読み取り:
python3 CVE-2025-10952.py --target TARGET --port 8081 --read "//root/.ssh/id_rsa"
読み取りとディスクへの保存:
python3 CVE-2025-10952.py --target TARGET --port 8081 --read "//root/.ssh/id_rsa" --out id_rsa_root
chmod 600 id_rsa_root
ssh -i id_rsa_root -o StrictHostKeyChecking=no root@TARGET
--port はデフォルトで 8081 に設定されており、これは標準的なデプロイメントにおける ml-logger のファイルブローカーAPIのデフォルトポートです。ダッシュボードのフロントエンドは通常別のポートで提供され、脆弱性のあるパスの一部ではありません。
/glob エンドポイントが Allow: POST 付きで 405 Method Not Allowed を返すことを確認します — これにより、静的ダッシュボードのフロントエンドとAPIポートを識別できます。--glob を使用して到達可能なパスを列挙し、興味深いファイル(SSHキー、設定ファイル、認証情報ストア)を特定します。--read を使用してターゲットファイルを取得します。絶対パスには二重の先頭スラッシュを使用します。ml-logger サービスポートに向けられた、..、二重の先頭スラッシュ(//)、または絶対パスプレフィックス(/etc、/root、/proc)を含む key/path 形式のJSONフィールドに対してアラートを発報します。~/.ssh/、/etc/shadow、/etc/passwd に対するファイル整合性またはアクセス監視により、ml-logger プロセスIDから発信される読み取りをフラグ付けする必要があります。ml-logger を信頼できないネットワークに公開しないでください。stream_handler でパスの包含を強制し(os.path.realpath() の解決結果を許可リスト化されたベースディレクトリに対してチェック)、専用の非特権OSアカウントでサービスを実行します。このリポジトリには、ml-logger の認証不要の情報開示脆弱性である CVE-2025-10952 の概念実証エクスプロイトが含まれています。このコードは、所有している環境、またはテストの明示的な許可を得た環境でのみ使用してください。著者は、このソフトウェアの誤用またはそれによって引き起こされた損害について責任を負いません。
LICENSE を参照してください。