Critical LangChain Core Vulnerability Exposes Secrets via Serialization Injection
2025/12/26 TheHackerNews — LangChain Core に深刻なセキュリティ欠陥が発見された。この脆弱性 CVE-2025-68664 を悪用する攻撃者は、機密情報の窃取とプロンプト・インジェクションにより、LLM のレスポンスを操作する可能性がある。LangChain Core (langchain-core) は、LangChain エコシステムを構成するコア Python パッケージである。LLM を活用したアプリケーションを構築するための、コア・インターフェイスとモデル非依存の抽象化機能を提供している。

この脆弱性 CVE-2025-68664 (CVSS:9.3) は、2025年12月4日にセキュリティ研究者 Yarden Porat により報告され、LangGrinch のコードネームで呼ばれている。
プロジェクト・メンテナーはアドバイザリで、「LangChain の dumps() 関数と dumpd() 関数に、シリアライズ・インジェクションの脆弱性が存在する。これらの関数は、自由形式の辞書をシリアライズする際に、”lc” キーを持つ辞書をエスケープしない」と述べている。
Yarden Porat は、「シリアライズされたオブジェクトをマークするために、LangChain は “lc” キーを内部的に使用する。そのため、ユーザーが制御するデータに、このキー構造が含まれている場合には、デシリアライズ時に単なるユーザー・データではなく、正当な LangChain オブジェクトとして扱われる」と付け加えている。
Cyata の Yarden Porat によると、2つの関数が “lc” キー を含むユーザー制御辞書をエスケープできない点に、この問題の核心があるという。この “lc” マーカーは、フレームワークの内部シリアライズ形式で、LangChain オブジェクトを表すものだ。
Yarden Porat は、「つまり攻撃者が、LangChain オーケストレーション・ループを介して “lc” キーを含むコンテンツをシリアライズし、その後にデシリアライズできれば、安全でない任意オブジェクトがインスタンス化され、攻撃者に都合の良いパスをトリガーし得る」と述べている。
この脆弱性は、さまざまな結果を引き起こし得る。たとえば、”secrets_from_env=True” (以前はデフォルト) でデシリアライズが行われると、環境変数からシークレットが抽出されてしまう。さらに langchain_core/langchain/langchain_community のような事前承認済みの、信頼名前空間内でクラスがインスタンス化され、その結果として Jinja2 テンプレートを介した任意コード実行にもつながり得る。
それに加えて、このエスケープ・バグにより、metadata/additional_kwargs/response_metadata などユーザー制御フィールドを通じて、LangChain オブジェクト構造をインジェクションするプロンプト・インジェクションが可能となる。
すでに LangChain は、パッチをリリースしている。このパッチでは、load() と loads() に allowed_objects パラメータが導入され、シリアライズ/デシリアライズ可能なクラスを、ユーザーがホワイトリストで指定する仕組みが追加された。
さらに、Jinja2 テンプレートはデフォルトでブロックされ、secrets_from_env は False に設定され、環境シークレットの自動読み込みは無効化された。
今回の脆弱性 CVE-2025-68664 の影響を受ける、langchain-core のバージョンは以下のとおりである。
- 1.0.0 以上/1.2.5 未満 (1.2.5 で修正済み)
- 0.3.81 未満 (0.3.81 で修正済み)
LangChain.js にも、同様のシリアライズ・インジェクション脆弱性 CVE-2025-68665 (CVSS:8.6) が存在する。ここでも、”lc” キーを持つオブジェクトのエスケープ処理の不備に起因する。この脆弱性によりシークレット抽出とプロンプト・インジェクションが可能となる。
影響を受ける npm パッケージは、次のとおりである。
- @langchain/core >= 1.0.0/< 1.1.8 (1.1.8 で修正済み)
- @langchain/core < 0.3.80 (0.3.80 で修正済み)
- langchain >= 1.0.0/< 1.2.3 (1.2.3 で修正済み)
- langchain < 0.3.37 (0.3.37 で修正済み)
この脆弱性は重大な影響をもたらす。ユーザーにとって必要なことは、パッチ適用済みバージョンへと速やかにアップデートし、この脆弱性によるリスクを排除することである。
Porat は「最も一般的な攻撃ベクターは、additional_kwargs や response_metadata などの LLM レスポンス・フィールドである。それらは、プロンプト・インジェクションによって制御され、ストリーミング操作でシリアライズ/デシリアライズされる。つまり、”従来型のセキュリティ侵害と AI との融合” が生じ、ユーザー組織は不意を突かれる。LLM の出力は、信頼できない入力なのである」と締め括っている。
この問題の原因は、LangChain がデータを処理する際に使う “lc” という特別なマーカーの扱いにあります。本来であれば、ユーザーが入力したデータは、ただの文字列として扱われるべきですが、この “lc” という文字が含まれていると、LangChain における大切な命令だと、システムが勘違いして実行してしまいます。データの種類を正しく区別して、特別な意味を持つ文字を無効化するためのエスケープ処理が不十分だったことが、予期せぬ動作を招いてしまいました。開発者にとって必要なことは、ライブラリを最新版に更新することです。AI からの回答も、外部からの信頼できない入力であると意識して向き合うことが大切だと、この記事は指摘しています。よろしければ、カテゴリー AI/ML も、ご参照ください。
You must be logged in to post a comment.