Um framework de teste para identificar e demonstrar vulnerabilidades de desserialização no LangChain Core (<0.3.81). Apenas para uso educacional.
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
---
## 🚀 Início Rápido
### Instalação```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="GIF de Hacker"/>
<img src="https://assets.kitploit.com/production/public/readmes/15055/0751965da24039c9facbe6006461ec38a66ff560b42dc590d1964f43f7f9853d.gif" width="200" alt="GIF de Segurança"/>
GIF da Matrix
</p>
---
## 🎯 Resumo Executivo
**CVE-2025-68664 (Codinome: LangGrinch)** é uma **vulnerabilidade crítica de injeção de serialização** descoberta no pacote Python **LangChain Core**. Esta vulnerabilidade permite que atacantes injetem marcadores `lc` maliciosos por meio de saídas de LLM ou dicionários controlados pelo usuário, possibilitando:
1. 🔑 **Extração de segredos do ambiente** (chaves de API, senhas de BD)
2. 🌐 **Ataques SSRF** (atingindo serviços internos)
3. 💀 **Execução Remota de Código** (via cadeia Jinja2 SSTI)
4. 📂 **Acesso ao sistema de arquivos** (leitura de arquivos sensíveis)
<table align="center">
<tr>
<td>
### ⚡ Estatísticas Rápidas
| 🔥 Métrica | 📊 Valor |
|-----------|----------|
| **ID do CVE** | CVE-2025-68664 |
| **Nome de código** | LangGrinch |
| **Tipo de ataque** | Injeção de Desserialização |
| **Autenticação necessária** | Não (Injeção de Prompt) |
| **Complexidade** | BAIXA |
</td>
<td>
### 🎯 Versões Afetadas
| 📌 Propriedade | 📝 Valor |
|-------------|----------|
| **Pacote** | langchain-core |
| **Vulnerável** | < 0.3.81, >= 1.0.0 < 1.2.5 |
| **Corrigido** | 0.3.81+, 1.2.5+ |
| **Impacto** | Segredos + RCE |
| **CWE** | CWE-502 |
</td>
</tr>
</table>
---
## 🐛 Análise Profunda da Vulnerabilidade
<p align="center">
<img src="https://assets.kitploit.com/production/public/readmes/15055/fb07ef9946fd69ee29be7a85737fa8b18fa02c8ec40293de8a4994d5e8419a6a.gif" width="300" alt="GIF de Bug"/>
</p>
### 📋 Visão Geral Técnica
| Propriedade | Valor |
|----------|-------|
| 🆔 **ID do CVE** | CVE-2025-68664 |
| 🏷️ **Nome de código** | LangGrinch |
| 📊 **Severidade** | CRÍTICA 🔴 |
| 🔗 **CWE** | CWE-502 (Desserialização de Dados Não Confiáveis) |
| 📦 **Pacote Afetado** | `langchain-core` |
| ⚠️ **Versões Vulneráveis** | `< 0.3.81` AND `>= 1.0.0, < 1.2.5` |
| ✅ **Versões Corrigidas** | `0.3.81+`, `1.2.5+` |
### 🤖 O que é LangChain?
LangChain é um popular framework Python usado para construir aplicações com **Modelos de Linguagem de Grande Escala (LLMs)**. Ele é amplamente implantado em várias indústrias:
| 🏢 Caso de Uso | 📝 Descrição |
|-------------|----------------|
| 🤖 **Chatbots de IA** | Atendimento ao cliente, agentes de suporte |
| 🔍 **Sistemas RAG** | Geração Aumentada por Recuperação |
| 🔧 **Agentes de IA** | Execução autônoma de tarefas |
| 📊 **Processamento de Dados** | Análise de documentos, sumarização |
| 🔄 **Automação de Fluxo de Trabalho** | Pipelines alimentados por IA |
### 🔧 Causa Raiz Técnica
O formato de serialização interno do LangChain usa um marcador especial – a **chave `lc`**. Quando um dicionário contém a chave `lc`, o desserializador do LangChain o trata como um "objeto serializado confiável do LangChain."
**O bug é:**
- As funções `dumps()` / `dumpd()` NÃO escapam/neutralizam a chave `lc` em dicionários controlados pelo usuário/LLM
- Durante a reidratação via `load()` / `loads()`, a estrutura injetada é processada como um **objeto interno**```
🔓 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 │
└─────────────────────────────────────────────────────────────────┘