· kaynak dev.to (home feed)
CrewAI sandbox CVE'sı: Hiç import gerektirmeyen import blocklist atlatma yöntemi
CVE-2026-37008, CrewAI'nin süreç içi Python sandbox'ına 8.1 HIGH puanı veriyor; ctypes.CDLL(None) ve bir object-graph yürüyüşünün dokuz isimlik import blocklist'ini nasıl devre dışı bıraktığını gösteriyor. Mart ayında gelen düzeltme, fallback'i tamamen kaldırıyor.

Yaygın olarak kullanılan bir agent framework'ü olan CrewAI için yeni yayımlanan bir güvenlik açığı kaydı, tüm savunması dokuz bloklu modül adından oluşan bir liste olan bir Python sandbox'ını tarif ediyor — ve bu listenin tek bir import ifadesi çalıştırmadan atlatılabildiğini gösteriyor. NVD kaydını, MITRE'nin CNA verilerini ve GitHub'daki düzeltme commit'ini inceleyen bir dev.to yazısına göre CVE-2026-37008, MITRE tarafından 2026-09-13'te yayımlandı, AV:L/AC:H/PR:N/UI:N/S:C/C:H/I:H/A:L vektörüyle CVSS 3.1 baz puanı 8.1 (HIGH) taşıyor ve CWE-424, yani alternatif bir yolun uygunsuz korunması olarak sınıflandırılıyor.
Sandbox gerçekte ne yapıyordu
Güvenlik açığı içeren kod crewai-tools içinde, CodeInterpreterTool'un SandboxPython sınıfında yer alıyordu. Framework modelin yazdığı Python kodunu çalıştırması gerektiğinde ve Docker'a erişilemediğinde, bu kodu host süreçte düz bir exec() ile çalıştırmaya geri çekiliyordu. Korumalar zayıftı: exec, eval ve open gibi on güvenli olmayan addan arındırılmış bir builtins sözlüğü ve istenen modül dokuz addan biri — os, sys, subprocess, shutil, importlib, inspect, tempfile, sysconfig veya builtins — olduğunda hata veren bir import kancası.
CVE'nin temel iddiası — dev.to analizinde aktarıldığı haliyle — listeden bir tehlikeli modülün kazara atlanmış olması değil, import zamanında modül adlarını engellemenin prensipte işe yaramayacağıdır; çünkü yorumlayıcının tüm object graph'ı import sisteminden bağımsız olarak erişilebilir kalır. Kaydın kendi örneği olan ctypes.CDLL(None), platform loader'ına çalışan sürecin kendisini açmasını sorar ve libc sembollerini ortaya çıkaran bir handle döndürür. Hiçbir Python import ifadesi çalışmaz, dolayısıyla filtre hiç tetiklenmez — üstelik ctypes dokuz bloklu ad arasında bile değildi.
Düzeltmede belgelenen ikinci kaçış yolu
Düzeltme commit'i ikinci bir gösterim içeriyor. Yama ile birlikte eklenen bir test, object graph üzerinde yürüyerek orijinal import'u kurtarıyor: boş demetin sınıfından başla, alt sınıflarını listele, modülü hâlâ gerçek builtins'i tutan birini bul ve gerçek import fonksiyonunu geri çek. Bu adımdan sonra blocklist, saldırganın artık kullanmadığı bir kapıyı koruyor. Her iki kaçış yolu da filtreden hiç geçmeyerek onu devre dışı bırakıyor.
Kod sandbox'a nasıl ulaşıyordu
Tehlikeli fallback hiçbir zaman varsayılan yapılandırma değildi. Yazıda atıf yapılan CERT/CC kayıtlarına göre buna ulaşmak için bir operatörün allow_code_execution=True ayarlaması veya CodeInterpreterTool'u elle eklemesi gerekiyordu. Araç daha sonra Docker'ı kontrol ediyor: varsa model kodu bir container içinde çalışıyor; yoksa araç sessizce süreç içi sandbox'a geri çekiliyor. Kardeş açıklama olan CVE-2026-2287 ise Docker'ın oturum ortasında durdurulmasını kapsıyor; bu, kimse güvenli olmayan bir şey yapılandırmamış olsa bile aynı fallback'i tetikliyor.
2026-03-15'te birleştirilen fb2323b numaralı düzeltme commit'i blocklist'i genişletmedi. Fallback'i sildi: Docker kullanılamadığında araç artık kodu host süreç içinde sessizce çalıştırmak yerine hata veriyor.
Gerçekte kimler etkileniyor
dev.to analizi, günümüzdeki gerçekçi maruziyetin dar olduğunu vurguluyor. Düzeltme ilk olarak aynı gün etiketlenen v1.11.0rc1'de yayımlandı. Nisan ayında yayımlanan 1.14.0 sürümü CodeInterpreterTool'u tamamen kaldırdı ve kod çalıştırma parametrelerini harici sandbox'lar lehine kaldırılmış olarak işaretledi; 1.15.21'ye kadar her güncel etiket düzeltmeyi içeriyor. crewai'nin taze bir pip install'u hiçbir zaman güvenlik açıklı kodu içermedi. Etkilenen kitle, 1.11.0rc1 altına sabitlenmiş projeler, eski crewai-tools fork'ları ve vendored kopyaları ile sandbox'ın model kodunu içeride tuttuğunu iddia eden güncelliğini yitirmiş öğreticiler üzerine inşa edilmiş kod tabanlarıdır.
Kaydın kendisi sürüm kontrolünü zorlaştırıyor. Etkilenen aralık bir sürüm numarası yerine commit sınırıyla — fb2323b'den önceki her revizyon — tanımlanıyor, dolayısıyla yapılacak basit bir pip karşılaştırması yok. İlgili GitHub advisory'si GHSA-2q68-3cp7-72v9 incelenmemiş durumda ve hem etkilenen hem yamalanmış alanlarında "Unknown" yazıyor; NVD ise CVE'yi daha fazla analiz olmadan içeri aldı ve CNA'nın puanını tek resmi puan olarak bıraktı. Kayıt 2026-04-06'da ayrıldı ve kabaca beş ay sonra yayımlandı; hiçbir kayıt bu gecikmeyi açıklamıyor.
Neden önemli
CVE yapısal bir ders belgeliyor, bir listede eksik bir kayıt değil. Import'ları filtreleyen süreç içi bir Python sandbox'ı yanlış katmanı izliyor: runtime, import sistemine hiç dokunmayan alternatif yollar — native kütüphane handle'ları, yerleşik nesnelerin sınıf hiyerarşisi — sunduğu için herhangi bir ad tabanlı blocklist'ın etrafından dolaşılabilir. Bu aynı zamanda agent framework'lerinde artık tekrar eden fail-open örüntüsünü de gözler önüne seriyor: Bir bağımlılık eksik olana kadar gerçek olan, o noktada sessizce atlanan izolasyon. Agent üretimi kod çalıştıran ekipler container veya harici sandbox'ları tercih etmeli, yerleşik sandbox'larla ilgili öğretici iddialarına şüpheyle yaklaşmalı ve sabitlenmiş framework sürümlerinin bu düzeltmelerden önce gelip gelmediğini kontrol etmeli.
- #security
- #python
- #ai-agents
- #crewai
- #cve
İlgili yazılar
- Drupal yüksek özellikli güvenlik bülteni CVE-2026-96364 16 contrib projeyi vuruyor; yamalama sürüm kontrolü gerektiriyor
- AWS bir Bedrock AgentCore injection hatasını iki kez düzeltti; ikinci düzeltmenin changelog kaydında hiçbir CVE yer almadı
- Apache HTTP Server 2.4.69, mod_vhost_alias'taki yığın tampon taşmasını düzeltiyor (CVE-2026-63292)