Critical LangChain Core Vulnerability Exposes Secrets via Serialization Injection

一项关键安全缺陷已在

LangChain Core
中披露,攻击者可利用该缺陷窃取敏感机密,甚至通过提示注入影响大语言模型(LLM)的响应。

LangChain Core(即

langchain-core
)是 LangChain 生态系统中的核心 Python 包,提供面向 LLM 的核心接口和模型无关抽象。

该漏洞的编号为 CVE‑2025‑68664,CVSS 评分为 9.3(满分 10.0)。安全研究员 Yarden Porat 于 2025 年 12 月 4 日报告此漏洞,内部代号为 LangGrinch

项目维护者在安全通告中表示:“LangChain 的

dumps()
dumpd()
函数存在序列化注入漏洞。函数在序列化自由形式字典时未对包含 ‘lc’ 键的字典进行转义。”

“‘lc’ 键在 LangChain 内部用于标记已序列化的对象。当用户控制的数据中出现该键结构时,反序列化过程会将其当作合法的 LangChain 对象处理,而非普通用户数据。”

根据 Cyata 研究员 Porat 的说明,问题关键在于这两个函数未对包含 “lc” 键的用户字典进行转义。该标记代表 LangChain 框架内部的对象序列化格式。

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 表示:“最常见的攻击向量是通过 LLM 响应字段(如 additional_kwargs 或 response_metadata)进行提示注入,然后在流式操作中进行序列化/反序列化。正是这种 ‘AI 与传统安全’ 的交叉点,让组织措手不及,LLM 输出本质上是一个不可信输入。”