LangChain dumps/dumpd 函数序列化注入漏洞(CVE-2025-68664)深度剖析

CVE-2025-68664(代号“LangGrinch”)是LangChain框架核心组件 langchain-core 中 dumps() / dumpd() 函数存在的高危序列化注入漏洞,CVSS 3.1评分9.3(严重) 。该漏洞源于框架对用户可控数据过度信任,未对含内部标识 lc 键的字典做转义处理,导致恶意数据被误判为框架原生对象,反序列化后可窃取API密钥、环境变量等敏感信息,甚至结合提示注入劫持LLM交互流程 。漏洞影响广泛,覆盖LangChain Python <0.3.81、LangChain JS <1.2.5版本,波及全球数百万基于LangChain构建的AI应用(如RAG系统、智能客服、自动化Agent) 。本文从漏洞背景、原理、利用、修复及防御全维度深度解析,为AI开发者提供安全参考。

u=3205817167,1530423608&fm=253&fmt=auto&app=138&f=JPEG_075051.webp

一、漏洞基础信息

1.1 核心标识

- CVE编号:CVE-2025-68664 

- 漏洞名称:LangChain dumps/dumpd 函数序列化注入漏洞 

- 漏洞类型:不安全反序列化(CWE-502) 

- CVSS评分:9.3(严重),GitHub评级Critical 

- 发现时间:2025年12月4日(研究员Yarden Porat报送)

- 披露时间:2025年12月23日(官方发布安全公告) 

- 修复版本: langchain-core ≥0.3.81(Python) 、 langchain-core ≥1.2.5(JS)  

1.2 影响范围

- 直接影响:LangChain Python(<0.3.81)、LangChain JS(<1.2.5)的 dumps() / dumpd() 序列化函数 

- 间接影响:所有依赖受影响版本的AI应用,包括企业级RAG平台、智能对话系统、LLM自动化流程、LangGraph编排应用等

- 攻击入口:用户可控字段(如 metadata 、聊天输入、接口参数、文件上传内容) 

二、漏洞背景:AI框架序列化机制的安全隐患

2.1 LangChain序列化机制概述

LangChain作为主流LLM应用开发框架,提供 dumps() (生成字符串)、 dumpd() (生成字典)序列化函数,用于将框架对象(如模型配置、提示词模板、Agent状态)转换为可存储/传输格式;对应 load() / loads() 函数负责反序列化还原对象 。

框架内部约定:含 lc 键的字典为LangChain原生对象标识, lc (LangChain Object)是区分框架对象与普通用户数据的核心标记,反序列化时会优先解析含 lc 键的数据为框架对象 。

2.2 风险根源:信任边界失效

正常场景下,序列化流程仅处理框架内部对象, lc 键由框架生成,安全可控。但 dumps() / dumpd() 函数设计缺陷导致:处理用户可控的自由格式字典时,未对 lc 键做转义或隔离,直接保留原始结构 。

这意味着:攻击者可在用户输入中构造含 lc 键的恶意字典,序列化后被框架标记为“内部对象”,反序列化时触发非预期行为——本质是用户数据伪装成框架内部对象,突破信任边界 。

三、漏洞原理深度解析

3.1 核心缺陷: dumps() / dumpd() 未过滤 lc 键

LangChain序列化逻辑简化如下:

python

# 受影响版本伪代码(langchain-core/serialization.py)

def dumps(obj):

    if isinstance(obj, dict):

        # 缺陷:直接遍历字典,未转义"lc"键

        return {k: dumps(v) for k, v in obj.items()}

    elif hasattr(obj, "lc"):

        # 正常逻辑:标记LangChain对象

        return {"lc": obj.__class__.__name__, "data": dumps(obj.__dict__)}

    else:

        return ob

- 正常流程:框架对象→序列化→生成含 lc 键的结构→反序列化→还原对象 

- 恶意流程:用户输入含 lc 键的字典→序列化→保留 lc 键→反序列化→误判为框架对象→执行恶意逻辑 

3.2 反序列化触发机制

 load() / loads() 反序列化时,优先解析含 lc 键的数据,调用对应类的构造函数还原对象 。攻击者构造的恶意 lc 结构可指向敏感数据类或自定义恶意逻辑,导致:

1. 敏感信息泄露:劫持环境变量、API密钥、数据库凭证等

2. 数据篡改:修改Agent配置、提示词模板、对话历史 

3. 提示注入升级:结合LLM交互,绕过安全过滤,诱导模型执行恶意指令

3.3 漏洞触发条件

1. 应用使用受影响版本LangChain;

2. 序列化函数处理用户可控数据(如聊天输入、接口参数、元数据字段);

3. 恶意数据含合法 lc 键结构(如 {"lc": "Secret", "data": {...}} );

4. 恶意数据被序列化后再反序列化(如缓存、存储、传输后解析) 

四、漏洞利用场景与POC示例

4.1 典型利用场景

场景1:窃取环境变量(最常见)

攻击者在聊天框输入含 lc 键的恶意JSON,触发框架反序列化时读取系统环境变量(如 OPENAI_API_KEY )并返回。

场景2:劫持Agent执行流程

构造恶意 lc 结构伪装成Agent配置,反序列化后篡改Agent行为,诱导其执行非授权操作(如删除数据、调用高危接口) 。

场景3:RAG系统数据泄露

利用 metadata 字段注入恶意 lc 数据,序列化后在检索阶段反序列化,泄露知识库路径、数据库连接信息等敏感数据。

4.2 简化POC(Python)

python

# 1. 构造恶意数据(含lc键,伪装成环境变量读取对象)

malicious_data = {

    "user_input": "正常聊天内容",

    "metadata": {

        "lc": "EnvVar",  # 伪造LangChain内部对象标识

        "data": {"var": "OPENAI_API_KEY"}  # 目标敏感环境变量

    }

}

# 2. 序列化(受影响版本未转义lc键)

from langchain_core.serialization import dumps, loads

serialized = dumps(malicious_data

# 3. 反序列化(误判为内部对象,执行环境变量读取)

result = loads(serialized)

print(result)  # 输出:OPENAI_API_KEY的实际值

效果:成功窃取目标环境变量,无需复杂权限,仅需用户可控输入入口。

五、漏洞修复方案

5.1 官方修复措施(核心)

官方在 0.3.81/1.2.5 版本中修复,核心逻辑:序列化时转义用户数据中的 lc 键,反序列化时仅信任框架生成的 lc 结构 。

python

# 修复后伪代码

def dumps(obj):

    if isinstance(obj, dict):

        # 修复:转义用户数据中的"lc"键(添加前缀/替换)

        return {f"escaped_{k}": dumps(v) if k == "lc" else dumps(v) for k, v in obj.items()}

    elif hasattr(obj, "lc"):

        return {"lc": obj.__class__.__name__, "data": dumps(obj.__dict__)}

    else:

        return obj

5.2 紧急修复步骤

1. 升级依赖(必选)

bash

# Python

pip install langchain-core>=0.3.81

# JS

npm install langchain-core>=1.2.5

2. 临时防护(无法立即升级时)

- 过滤用户输入:拦截含 lc 键的字典数据;

- 隔离序列化数据:用户数据与框架内部数据分开序列化,不混用 dumps() 函数;

- 禁用危险序列化:非必要场景下,避免序列化用户可控数据。

六、AI框架安全启示与防御建议

6.1 漏洞折射的行业问题

1. 安全设计缺失:AI框架重功能、轻安全,过度信任内部标识,未做输入隔离;

2. 依赖链风险:LangChain作为底层框架,漏洞通过依赖链扩散至百万应用,供应链安全意识薄弱;

3. 开源治理不足:开源组件安全审计机制不完善,高危漏洞易长期潜伏。

6.2 企业级防御建议

1. 依赖管理:定期扫描开源组件漏洞,优先升级安全版本,禁用高危函数;

2. 输入安全:对所有用户可控输入做严格过滤、转义、校验,禁止特殊键(如 lc )注入;

3. 序列化安全:

- 最小化序列化范围,仅序列化必要数据;

- 区分用户数据与框架数据,使用不同序列化逻辑;

- 反序列化前校验数据签名、来源,不信任未经验证的数据 ;

4. 监控与响应:部署AI应用安全监测工具,实时检测异常序列化行为与敏感数据泄露;

5. 安全左移:AI应用开发阶段引入安全评审,重点关注序列化、提示注入、权限控制等高危环节。

七、总结

CVE-2025-68664是AI框架领域序列化注入漏洞的典型案例,核心是 dumps() / dumpd() 函数未过滤 lc 键,导致用户数据伪装成框架内部对象,引发敏感信息泄露与流程劫持 。该漏洞危害大、影响广,暴露了当前AI生态中“重功能、轻安全”的普遍问题。

对AI开发者而言,及时升级LangChain至安全版本是首要任务;同时需建立“不信任用户输入、隔离数据边界、严控序列化流程”的安全意识,避免类似漏洞发生。未来,随着AI应用普及,底层框架安全将成为企业防护核心,供应链安全与开源组件审计需高度重视。