世界で最も広く導入されているAIフレームワークの一つであるLangChainに存在する重大なセキュリティ脆弱性により、攻撃者は環境変数のシークレットを抽出でき、さらにシリアライゼーション注入の欠陥を通じて、コード実行に至る可能性があります。
この脆弱性はCVE-2025-68664として識別され、langchain-coreの中核ライブラリに影響します。2024年12月25日、セキュリティ研究者のCyataのYarden Poratによって公開されました。
脆弱性の概要
この脆弱性は、langchain-coreにおけるシリアライゼーション関数dumps()および dumpd() の不適切な取り扱いに起因します。
| 属性 | 詳細 |
|---|---|
| CVE ID | CVE-2025-68664 |
| GHSA ID | GHSA-c67j-w6g6-q2cm |
| CVSSスコア | 9.3(重大) |
これらの関数は、LangChainがシリアライズされたオブジェクトを内部的に識別するために使用する予約キー「lc」を含む、ユーザー制御の辞書をエスケープできていませんでした。
攻撃者が制御するデータにこのキー構造が含まれると、単なるユーザーデータではなく、デシリアライズ時に正当なLangChainオブジェクトとして扱われます。
この脆弱性は、astream_events(version=”v1″)、Runnable: astream_log()、RunnableWithMessageHistory、各種キャッシュ機構など、標準的なLangChain機能を使用するアプリケーションに影響します。
最も危険な攻撃経路は、additional_kwargsやresponse_metadataといったLLMの応答フィールドを介したプロンプト注入で、これらは標準のストリーミング操作によりシリアライズ/デシリアライズされ得ます。
悪用に成功すると、secrets_from_env=True(以前のデフォルト設定)の場合、デシリアライズ中に {“lc”: 1, “type”: “secret”, “id”: [“ENV_VAR”]} のような構造を注入することで、攻撃者は環境変数のシークレットを抽出できます。
攻撃者はまた、信頼された名前空間内で制御されたパラメータを用いてクラスをインスタンス化でき、ネットワーク呼び出し、ファイル操作、あるいはJinja2テンプレートのレンダリングを通じたコード実行を誘発する可能性があります。
LangChainは、エスケープの不具合を修正し、制限的なデフォルトを導入するパッチを、バージョン1.2.5および0.3.81でリリースしました。
allowed_objectsパラメータは現在、デフォルトで「core」(デシリアライズをコアオブジェクトに限定)となり、secrets_from_envはTrueからFalseに変更され、Jinja2テンプレートは新しいinit_validatorパラメータによりデフォルトでブロックされるようになりました。
標準的なLangChain型をデシリアライズする大半のユーザーには影響はありませんが、カスタム実装ではコード調整が必要になる場合があります。
本番環境でLangChain を運用している組織は、直ちに更新すべきです。同フレームワークは累計約8億4,700万回のダウンロードを記録しており、直近1か月だけでも9,800万回に達しています。
LangChainはこの発見に対し4,000ドルの報奨金を授与しました。これは同プロジェクトで過去最高額です。
翻訳元: https://gbhackers.com/critical-langchain-vulnerability/