Hotdry.
ai-security

LangChain CVE-2025-68664序列化注入漏洞深度分析

分析LangChain框架CVE-2025-68664序列化注入漏洞的技术细节、攻击向量与修复方案,提供AI应用安全防护的工程实践指南。

漏洞概述:LangChain 的 "序列化注入" 危机

2025 年 12 月 23 日,LangChain 框架爆出编号为 CVE-2025-68664 的严重安全漏洞,CVSS 评分高达 9.3 分(CRITICAL 级别)。这是一个典型的序列化注入漏洞,影响 LangChain Core 的dumps()dumpd()函数,可能导致敏感信息泄露甚至远程代码执行。

LangChain 作为构建 LLM 应用的主流框架,其序列化机制是支撑 AI 代理、工具链、缓存等核心功能的基础设施。当这个基础设施存在安全缺陷时,所有基于 LangChain 构建的 AI 应用都可能面临系统性风险。

技术原理:lc键的未转义问题

LangChain 的序列化机制

LangChain 使用特殊的序列化格式来持久化和传输对象。在内部,框架使用'lc'(LangChain 的缩写)作为保留键来标记序列化对象。例如,一个序列化的 LangChain 对象可能具有如下结构:

{
    'lc': 1,
    'type': 'constructor',
    'id': ['langchain', 'prompts', 'PromptTemplate'],
    'kwargs': {'template': 'Hello {name}!'}
}

漏洞根因:用户数据与内部标记的混淆

问题的核心在于dumps()dumpd()函数在处理自由格式字典时,没有对包含'lc'键的用户数据进行转义。当攻击者能够控制输入数据时,可以构造如下恶意字典:

malicious_data = {
    'lc': 1,
    'type': 'secret',
    'id': ['OPENAI_API_KEY']
}

由于'lc'键未被转义,这个用户数据在序列化时会被当作合法的 LangChain 对象。更危险的是,在反序列化时,默认设置secrets_from_env=True会尝试从环境变量中读取OPENAI_API_KEY的值并返回给攻击者。

攻击向量分析

根据 Upwind Security 的技术分析,攻击者可以通过以下途径利用此漏洞:

  1. 直接用户输入:如果应用接受用户输入并通过 LangChain 的序列化函数处理
  2. LLM 生成内容:当 LLM 生成的内容包含恶意结构时
  3. 外部数据源:从数据库、API 响应或文件读取的数据
  4. 链式处理:在复杂的 LangChain 工作流中,数据可能在多个组件间传递

影响范围与风险评估

受影响版本

  • 易受攻击版本

    • langchain-core >= 1.0.0< 1.2.5
    • langchain-core < 0.3.81
  • 已修复版本

    • langchain-core 1.2.5
    • langchain-core 0.3.81

潜在风险场景

  1. 敏感信息泄露:攻击者可读取环境变量中的 API 密钥、数据库凭据等敏感信息
  2. 对象实例化攻击:通过构造特定的'type''id'字段,可能实例化内部类
  3. 权限提升:在某些配置下,可能导致远程代码执行
  4. 数据完整性破坏:篡改序列化数据,影响 AI 应用的决策逻辑

CVSS 评分解读

GitHub 给出的 CVSS 3.1 评分为 9.3 分,向量为AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:L/A:N,这意味着:

  • 攻击向量:网络(AV:N)
  • 攻击复杂度:低(AC:L)
  • 所需权限:无(PR:N)
  • 用户交互:无(UI:N)
  • 影响范围:已更改(S:C)
  • 机密性影响:高(C:H)
  • 完整性影响:低(I:L)
  • 可用性影响:无(A:N)

这个评分反映了漏洞的严重性:攻击者无需特殊权限或用户交互,即可通过网络远程利用漏洞,造成高机密性影响。

修复方案与工程实践

立即修复措施

  1. 升级 LangChain Core

    # 对于1.x版本
    pip install "langchain-core>=1.2.5"
    
    # 对于0.x版本
    pip install "langchain-core>=0.3.81"
    
  2. 验证修复:检查项目中所有依赖的 LangChain 相关包版本

  3. 重新部署:更新后重新部署所有受影响的应用

代码层面的防护措施

即使升级了版本,也应实施以下防御性编程实践:

# 1. 显式设置secrets_from_env=False(如果不需要环境变量读取)
from langchain_core.load import load, loads

# 安全配置
safe_load = lambda data: load(data, secrets_from_env=False)
safe_loads = lambda data: loads(data, secrets_from_env=False)

# 2. 输入验证和清理
def sanitize_user_input(user_data):
    """清理用户输入,防止lc键注入"""
    if isinstance(user_data, dict) and 'lc' in user_data:
        # 转义或拒绝包含lc键的字典
        user_data = {'__lc_escaped': user_data}
    return user_data

# 3. 使用安全的序列化替代方案
import json
import base64

def safe_serialize(data):
    """使用标准JSON序列化,避免LangChain特定格式"""
    return base64.b64encode(json.dumps(data).encode()).decode()

def safe_deserialize(encoded_data):
    """安全的反序列化"""
    decoded = json.loads(base64.b64decode(encoded_data).decode())
    # 处理可能的转义数据
    if '__lc_escaped' in decoded:
        return decoded['__lc_escaped']
    return decoded

监控与检测策略

  1. 日志监控:监控序列化 / 反序列化操作的异常模式
  2. 输入审计:记录所有用户输入和 LLM 生成内容的元数据
  3. 异常检测:设置警报,当检测到异常的'lc'键使用模式时触发
  4. 环境变量访问监控:监控应用对敏感环境变量的访问

安全开发生命周期集成

  1. 依赖扫描:在 CI/CD 流水线中集成安全依赖扫描
  2. SAST 工具:使用静态应用安全测试工具检测序列化安全问题
  3. 安全代码审查:将序列化安全纳入代码审查清单
  4. 威胁建模:在 AI 应用设计阶段考虑序列化攻击面

漏洞修复的技术细节

GitHub 修复提交分析

根据 NVD 提供的参考链接,主要修复集中在以下提交:

  1. 提交 5ec0fa69de31bbe3d76e4cf9cd65a6accb8466c8:修复了dumps()函数中'lc'键的转义逻辑
  2. 提交 d9ec4c5cc78960abd37da79b0250f5642e6f0ce6:更新了相关测试用例
  3. PR #34455 和 #34458:完整的修复和测试更新

修复的核心逻辑是在序列化时对包含'lc'键的字典进行适当转义,确保用户数据不会被误认为 LangChain 内部对象。

向后兼容性考虑

修复版本保持了向后兼容性,但开发人员需要注意:

  1. 现有序列化数据:已序列化的数据在反序列化时可能受到影响
  2. 自定义序列化器:如果项目中有自定义的序列化逻辑,需要相应更新
  3. 第三方集成:检查与 LangChain 集成的第三方库是否兼容新版本

AI 应用安全的最佳实践

防御深度策略

  1. 输入验证层:在所有数据入口点实施严格的输入验证
  2. 输出编码层:确保所有输出都经过适当的编码
  3. 最小权限原则:限制 AI 应用的权限,避免过度访问敏感资源
  4. 隔离执行环境:在沙箱或容器中运行不可信的 AI 组件

序列化安全清单

  • 验证所有序列化输入来源
  • 实施输入清理和转义
  • 使用安全的序列化配置
  • 监控序列化操作的异常模式
  • 定期更新序列化库和框架
  • 实施数据完整性检查
  • 记录序列化操作的审计日志

应急响应计划

  1. 漏洞发现:建立漏洞报告和响应流程
  2. 影响评估:快速评估漏洞对业务的影响
  3. 修复部署:制定快速修复和部署计划
  4. 事后分析:进行根本原因分析和改进

总结与展望

CVE-2025-68664 暴露了 AI 框架安全性的一个重要方面:序列化机制的安全性。随着 AI 应用的普及,框架级的安全漏洞可能产生广泛影响。

对于 AI 开发者而言,这次漏洞提醒我们:

  1. 框架不是银弹:即使使用成熟框架,仍需关注其安全实现
  2. 安全需要主动:不能依赖框架的默认安全性,需要主动实施防护措施
  3. 持续监控更新:保持依赖项的及时更新,关注安全公告
  4. 安全文化重要:将安全思维融入 AI 开发的每个阶段

未来,随着 AI 代理和自主系统的复杂度增加,序列化安全将变得更加重要。开发者和安全团队需要:

  • 深入理解 AI 框架的内部工作机制
  • 实施全面的安全测试和监控
  • 建立快速响应和修复能力
  • 推动 AI 安全标准和最佳实践的发展

通过这次漏洞事件,我们看到了 AI 安全生态系统的成熟过程。每一次安全挑战都是改进的机会,推动着整个行业向更安全、更可靠的 AI 应用发展。

资料来源

  1. NVD CVE-2025-68664 详情页 - 官方漏洞数据库记录
  2. Upwind Security 技术分析 - 详细的漏洞原理和影响分析
  3. GitHub 修复提交记录 - 具体的代码修复细节
  4. LangChain 官方发布说明 - 版本更新和安全修复信息
查看归档