
RAGFlow 3脆弱性監査ツール (CVE-2026-28797 / CVE-2026-24770 / CVE-2025-69286)
RAGFlow 3件の脆弱性監査ツール(CVE-2026-28797 / CVE-2026-24770 / CVE-2025-69286)
純 Python 標準ライブラリのみ、サードパーティ依存なし。Python 3.8+ でそのまま実行可能。
python3 ragflow-audit.py [-h] {ssti,zipslip,apikey} ...
python3 ragflow-audit.py ssti --url http://TARGET:9380 --auth "AUTH_HEADER" [--component StringTransform|Message] [--newline]
--url:RAGFlow Web アドレス--auth:ログイン応答ヘッダー Authorization の完全な値--component:対象コンポーネント、デフォルトは StringTransform--newline:改行を使用したペイロードでバイパス(_is_jinjia2 正規表現検出を回避)フロー:悪意のある canvas DSL を構築 -> POST /v1/canvas/set でキャンバスを作成 -> POST /v1/canvas/completion で実行をトリガー -> 出力内の uid= を照合して RCE が成功したか判定。
python3 ragflow-audit.py zipslip --zip evil.zip [--extract-dir /tmp/out]
zip エントリをオフラインで検査し、3 種類の危険を検出:パストラバーサル(..)、絶対パス、シンボリックリンク。
python3 ragflow-audit.py apikey --beta "分享链接token" --node "攻击者user_id后12位"
公開共有リンクの beta トークンから uuid1 の主体を復元し、time_low を列挙して候補トークンを出力します。実際の悪用では、候補トークンごとに認証が必要な API を順に呼び出します(200 でヒット / 401 で次へ)。
RAGFlow のログイン資格情報は ログイン応答ヘッダー Authorization にあり、body 内の access_token ではありません。body 内の access_token は単なる UUID であり、API を呼び出すと 401 になります。
curl -i -X POST http://TARGET:9380/v1/user/login \
-H 'Content-Type: application/json' \
-d '{"email":"[email protected]","password":"<RSA加密后的密码>"}'
応答ヘッダー authorization: の値を --auth パラメータとして使用します。
注意:登録/ログインのパスワードは事前に RSA 暗号化が必要です(公開鍵は /ragflow/conf/public.pem、PKCS1_v1_5、暗号化対象は base64 化後の平文)。平文パスワードを直接渡すとエラーになります。
本ツールは、許可を得たセキュリティテストと脆弱性研究のみを目的としています。無許可で他者のシステムに本ツールを使用した結果生じる影響については、利用者がすべての責任を負うものとします。
| CVE | 種類 | 影響バージョン | 修正バージョン |
|---|
| CVE-2026-28797 | SSTI(StringTransform/Message コンポーネント) | < 0.25.0(NVD: 0.24.0 and prior) | 0.25.0(サンドボックス修正、2026-03-02 マージ) |
| CVE-2026-24770 | MinerU パーサーの Zip Slip | < 0.23.1 | 0.23.1 |
| CVE-2025-69286 | API キーが推定可能(uuid1 + tenant_id シークレット) | < 0.22.0 | 0.22.0 |