
CVE-2025-67644の概念実証エクスプロイト。LangGraph SQLite CheckpointのSQLインジェクション脆弱性。サニタイズされていないメタデータフィルターキーを介した任意のSQLインジェクションを実証し、データの外部送信とフィルターバイパスを可能にする。
CVE-2025-67644 は、langgraph-checkpoint-sqlite パッケージ(LangGraph / LangChain エコシステムの一部)における SQLインジェクション 脆弱性(CWE-89)です。
攻撃者は、SqliteSaver の list() / alist() メソッドに渡されるサニタイズされていない メタデータフィルターキー を介して、任意の SQL を注入できます。
影響: フィルターの完全なバイパス、すべてのチェックポイントレコード(潜在的に機密性の高い会話状態、スレッドID、メタデータを含む)の漏洩、および一部のデプロイシナリオでは、より広範なデータベースアクセスが可能になります。
影響を受けるバージョン: < 3.0.1
修正バージョン: ≥ 3.0.1
CVSS スコア: 7.3 (High) — AV:L / AC:L / PR:L / UI:N / S:C / C:H / I:L / A:N
内部の _metadata_predicate() ロジックは、JSON抽出式内でユーザー制御の辞書 キー を安全でない f-string 補間で使用していました:
f"json_extract(CAST(metadata AS TEXT), '$.{query_key}')"
任意のキーを提供できる攻撃者(例: API入力を介して)は、JSONパスを早期に閉じて、SQLフラグメントを注入できます。例:
{"env') OR '1'='1": "anything"}
→ その結果、常に true と評価される WHERE 句が生成され、すべての レコードが返されます。
flowchart TD
A["User / API Client"] -->|"Sends malicious filter dict"| B["Application using langgraph-checkpoint-sqlite"]
B -->|"Passes filter=..."| C["SqliteSaver.list method"]
C -->|"Unsafe key interpolation"| D["Metadata predicate logic"]
D -->|"Builds injectable SQL"| E["SQLite Engine"]
E -->|"Returns ALL checkpoints / sensitive data"| F[Attacker]
F -->|"Data exfiltration / authorization bypass"| G["Impact achieved"]
(このバージョンでは、ノードテキスト内の括弧を可能な限り避け、特殊文字やドットを含むラベルには引用符を使用してパースエラーを防いでいます。)
--dump-all(全レコードを表示)、--threads-only(thread_ids のみを抽出)pip install langgraph-checkpoint-sqlite"<3.0.1" # e.g. ==2.0.0
# Basic check (count only)
python3 exploit.py checkpoints.db
# Dump full checkpoint details
python3 exploit.py checkpoints.db --dump-all
# Extract thread_ids only (useful for enumeration)
python3 exploit.py checkpoints.db --threads-only --dump-all
# Test against in-memory database (quick & volatile)
python3 exploit.py ":memory:" --dump-all
脆弱なバージョンをインストール:
pip install langgraph-checkpoint-sqlite==2.0.0
エクスプロイトコードを exploit.py として保存
既存または新規のチェックポイントデータベースに対して実行:
python3 exploit.py checkpoints.db --dump-all
直ちにアップグレード:
pip install --upgrade langgraph-checkpoint-sqlite
(バージョン ≥ 3.0.1)
信頼できないソース(ユーザー、API、JSONペイロードなど)からの任意のメタデータフィルターキーを 受け入れない でください
≥ 3.0.1 では、ライブラリはキーに対して厳格な正規表現を適用します: ^[a-zA-Z0-9_.-]+$
これは 教育およびセキュリティ研究目的のみ で公開された 概念実証(PoC) です。
明示的な書面による許可なしに、このコードを本番システムやいかなるターゲットに対しても 使用しない でください。
著者は、このコードによって引き起こされた誤用や損害について責任を負いません。
責任ある開示および研究目的のみ。
Mohammed Idrees Banyamer
@banyamer_security