LangGraphのチェックポイントライブラリに、深刻度の高いリモートコード実行(RCE)脆弱性が発見されました。
LangChain AIの主要コントリビューターであるEugene Yurtsev氏が公開したアドバイザリ(GHSA-wwqv-p2pp-99h55)によると、JsonPlusSerializerに存在する欠陥を悪用することで、攻撃者が任意のPythonコードを実行できる可能性があります。
この問題は、langgraph-checkpointのバージョン3.0未満に影響し、信頼できない環境でのデシリアライゼーションが持つリスクを改めて浮き彫りにしています。
LangChainエコシステムの一部であるLangGraphは、大規模言語モデルを活用したステートフルなマルチアクターアプリケーションの構築を可能にするフレームワークです。
そのチェックポイント機能は、アプリケーションの状態をセッションをまたいで保持するもので、通常はJsonPlusSerializerが効率的なシリアライゼーションのために使用されます。
デフォルトでは、このシリアライザーはコンパクトなストレージのためにMessagePackを優先します。ただし旧バージョンでは、Unicodeサロゲートコードポイントによってシリアライゼーションエラーが発生した場合、「json」モードへのフォールバックが行われていました。
このモードは、危険なコンストラクタ形式のデシリアライゼーション(lc=2, type=”constructor”)を引き起こし、指定されたモジュールの関数を呼び出してカスタムPythonオブジェクトを再構築します。
攻撃者はこれを悪用して、チェックポイントに悪意のあるペイロードを注入できます。例えば、細工されたオブジェクトが「os.system」関数を参照し、ファイルの書き込みやシェルスクリプトの実行といった有害なコマンドを含むケースが考えられます。
状態読み込み時にデシリアライゼーションが実行されると、そのコードが起動され、ホストシステム上での完全なRCEにつながります。
この脆弱性を悪用するには、攻撃者がチェックポイントの永続化に影響を与える手段、たとえば共同AIアプリや共有ワークフローにおけるユーザー提供データなどを通じたアクセスが必要です。
影響を受けるのは、デフォルトのシリアライザーを使用しつつ信頼できない入力を扱う、langgraph-checkpoint 3.0未満のユーザーです。
信頼済みデータのみを処理するアプリケーションはリスクが低いですが、マルチテナントAIサービスのような本番環境では、脅威は深刻です。
Yurtsev氏の概念実証(PoC)では、攻撃の手順が示されています。「os.system」のコンストラクタを含む悪意のある辞書ペイロードを持つStateGraphが、/tmp/pwnd.txtへのファイル書き込みを実行し、その後の呼び出し時に起動されます。
このPoCはSQLiteSaverを使って状態を永続化しており、たった一つの汚染されたチェックポイントがシステム全体を危険にさらしうることを示しています。
LangChain AIは、2025年末にリリースされたlanggraph-checkpoint 3.0でこの問題を修正しました。修正内容には、コンストラクタパスに対する許可リストの実装により、デシリアライゼーションを承認済みモジュールに限定する対策と、安全でないJSONフォールバックの完全廃止が含まれます。
このバージョンはLangGraph 0.3以降との互換性を維持しているため、ユーザーはシームレスにアップグレードできます。LangGraph APIのデプロイメントでは、バージョン0.5以降に修正が自動的に組み込まれていると、joshrogin氏は述べています。
特に状態の永続化が一般的なAI駆動型アプリケーションにおいては、開発者はこのRCEリスクを軽減するためにアップデートを優先的に適用してください。
シリアライゼーションの実装を定期的に監査し、入力値を適切に検証することも、引き続き欠かせないセキュリティのベストプラクティスです。
今回の事例は、LangGraphのような堅牢なライブラリであっても、普及が進むにつれて継続的なセキュリティレビューが不可欠であることをコミュニティに改めて示すものです。
翻訳元: https://cyberpress.org/hackers-target-signal-backups/