LangGraph Checkpoint JSON模式远程代码执行漏洞分析
漏洞概述
在langgraph-checkpoint 3.0版本之前,LangGraph的JsonPlusSerializer(用作所有检查点的默认序列化协议)在反序列化以"json"序列化模式保存的有效负载时存在远程代码执行(RCE)漏洞。
漏洞详情
受影响组件
- 包: pip langgraph-checkpoint
- 受影响版本: < 3.0.0
- 已修复版本: 3.0.0
漏洞原理
默认情况下,序列化器尝试使用"msgpack"进行序列化。然而,在检查点库3.0版本之前,如果非法Unicode代理值导致序列化失败,它会回退到使用"json"模式。
在此模式下运行时,反序列化器支持自定义对象的构造函数样式格式(lc == 2,type == “constructor”),以允许它们在加载时重建。如果攻击者能够使用恶意有效负载触发此模式,反序列化将允许攻击者在加载时执行任意函数。
影响范围
此问题影响所有使用3.0之前版本的langgraph-checkpoint用户:
- 允许不受信任或用户提供的数据持久化到检查点中
- 使用可能回退到"json"模式的默认序列化器(或显式实例化JsonPlusSerializer)
漏洞验证
概念验证代码
|
|
运行此PoC会在磁盘上写入文件/tmp/pwnd.txt,证明代码执行成功。
修复方案
修复版本
漏洞在langgraph-checkpoint==3.0.0中修复。
修复描述
修复引入了构造函数反序列化的允许列表,将允许的"id"路径限制为在序列化器构造时明确批准的模块/类组合。此外,已弃用以"json"格式保存有效负载,以移除此不安全回退路径。
缓解措施
立即升级到langgraph-checkpoint==3.0.0。该版本与langgraph>=0.3完全兼容,不需要任何导入更改或代码修改。
技术指标
- CVSS评分: 7.4(高危)
- 弱点类型: CWE-502 不可信数据反序列化
- GHSA ID: GHSA-wwqv-p2pp-99h5