· kaynak dev.to (home feed)
AWS bir Bedrock AgentCore injection hatasını iki kez düzeltti; ikinci düzeltmenin changelog kaydında hiçbir CVE yer almadı
dev.to'daki bir analiz, Bedrock AgentCore Python SDK'sındaki install_packages() fonksiyonunda yer alan argument injection açığının v1.6.1'de yamalandığını, pip extras sözdizimiyle aşıldığını ve v1.18.1'de tekrar yamalandığını ortaya koyuyor.

AWS'nin Bedrock AgentCore'u için Python SDK, install_packages() yardımcı fonksiyonunda kapatılması iki düzeltme gerektiren bir argument injection açığıyla birlikte yayınlandı — ve ikinci düzeltme, changelog kaydında bir güvenlik sorunu olduğuna dair hiçbir ipucu vermeden geldi. dev.to'da yayınlanan bir yazı, hatanın her iki turunu da ilk yamadan (v1.6.1) v1.18.1'de kapatılan aşmaya kadar izliyor; bu paralelde, BeyondTrust'un Phantom Labs ekibinin tam araştırması 28 Eylül'de yayınlandı.
Hata nasıl çalışıyordu
AgentCore'un Code Interpreter'ı, agent'ların çalışma zamanında (runtime) Python kütüphaneleri kurmasına izin veriyor ve SDK onlar adına pip install komutunu sarmalıyor: çağıran taraf bir paket adları listesi geçiyor ve SDK kurulumu izole bir sandbox içinde çalıştırıyor. dev.to analizine ve atıfta bulunduğu advisory'lere göre — GHSA-6rfw-mq36-jm8h ve AWS bülteni 2026-044-aws — 1.1.3 ile 1.6.0 arasındaki sürümler bu dizgileri neredeyse hiçbir doğrulama olmadan bir shell komutuna birleştiriyordu. Hazırlanmış bir paket adı, pip argümanı olarak konumundan kaçıp sandbox içinde saldırgan tarafından seçilen komutları çalıştırabiliyordu; bu bir CWE-88 argument injection'dı ve gösterilen yollardan biri, ikinci bir komutu kaçırmak için yeni satır karakteri kullanıyordu.
NVD her iki CVE'yi de CVSS 3.1 7.3 ve CVSS 4.0 8.4 olarak derecelendiriyor; durumları Secondary ve Awaiting Analysis olarak işaretlenmiş. Puanlama vektörleri doğrudan etkiyi host'a ya da AWS hesabına değil, sandbox sınırında tutuyor. Ancak ilk advisory, hazırlanmış bir adın pip'i saldırgan kontrolündeki bir paket indeksine yönlendirebileceğini ve sandbox dosyaları ile ortam değişkenlerini (environment variables) açığa çıkarabileceğini de belirtiyor — sandbox'larda API anahtarları, session token'ları veya kaynak kodu bulunduğu her durumda önemli bir ayrım.
İlk düzeltme neden tutmadı
İlk yama 10 Nisan'da v1.6.1 ile birlikte geldi; CVE-2026-12530 kaydı 17 Haziran'da yayınlandı ve bulucusu Sergio Garcia'ya atıf yapıldı. Aşma, pip'in extras sözdizimini kullanıyordu: package[extra1,extra2] biçimindeki dizgiler, yeni doğrulamanın hiç incelemediği bir noktadan komut ikamesini (command substitution) taşıyordu. CVE-2026-16796 olarak izlenen ve 1.18.1'in altındaki tüm sürümleri etkileyen bu ikinci açık, 17 Temmuz'da PR #581 ile düzeltildi ve advisory'si bir hafta sonra yayınlandı.
dev.to yazısına göre v1.18.1 changelog kaydı yalnızca paket belirteci (specifier) doğrulamasının sıkılaştırıldığını söylüyor — CVE numarası yok, injection'a atıf yok. Gerçek düzeltmenin shlex tabanlı tırnaklamayı, hangi extras sözdizimine izin verildiğine dair daha katı bir izin listesiyle (allowlist) eşleştirdiği bildiriliyor: girdiyi birleştirmek değil, ayrıştırmak (parse etmek).
Yükseltme (escalation) araştırması
BeyondTrust'un Phantom Labs ekibi tam bulgularını 28 Eylül'de "Package Name to Role Credentials in Code Interpreter" başlığıyla yayınladı; yanına da bu sandbox'lardan DNS ve S3 üzerinden veri sızdırma (exfiltration) yollarını gösteren agentcore-sandbox-breakout adlı bir depo ekledi. dev.to yazarı, kimlik bilgisi zincirini kendilerinin yeniden üretmediğini açıkça belirtiyor; dolayısıyla paket adından rol kimlik bilgilerine uzanan yükseltme, bağımsız olarak doğrulanmış bir sonuç değil, BeyondTrust'un bulgusu olarak duruyor.
Kendi projenizi kontrol etmek
İki CVE'nin kapsadığı sürüm aralıkları farklı ve sürüm kontrollerini yanıltan ayrıntı tam da bu: CVE-2026-12530 1.1.3'ten 1.6.1'e kadar olan sürümleri, CVE-2026-16796 ise 1.18.1'in altındaki her şeyi kapsıyor. Güncel sürüm v1.24.0 olduğundan, rutin bir yükseltme ikisini de temizliyor. dev.to yazısı, genel bir "1.18.1'den önce" kesim noktasına güvenmek yerine kurulu sürümü her aralıkla ayrı ayrı karşılaştırmayı ve kod tabanında install_packages çağrı noktalarını grep'lemeyi öneriyor — her biri, bir zamanlar model çıktısı, bir yapılandırma değeri ya da bir kullanıcı isteği olarak hayatına başlamış bir dizginin komuta dönüştüğü bir yer.
Neden önemli
Zaman çizelgesinden iki ders çıkıyor. Birincisi, serbest biçimli dizgilerden shell komutları oluşturan her SDK yardımcı fonksiyonu bir sink'tir ve agent yığınlarında bu dizgiler nadiren geliştiricilerden gelir: paket listeleri genellikle bir modelin planından ya da bir plugin manifest'inden kaynaklanır, dolayısıyla güven sınırı, LLM çıktısının parametreye dokunduğu her yerdedir. İkincisi, yama saatine değil, araştırma saatine bakın: ikinci düzeltme 17 Temmuz'da geldi, ancak derinlemesine araştırma 28 Eylül'de geldi — dev.to yazarının da belirttiği gibi, bir düzeltme mevcut olmasına rağmen dağıtımların sessizce açık kalabileceği 73 günlük bir boşluk. Yinelenen bu örüntü ayrıca ilk onarımın bir tasarım değişikliği değil, yama biçiminde olduğunu düşündürüyor; girdileri birleştirmek yerine ayrıştırmak, hatayı nihayet kapatan şey oldu.
- #aws
- #security
- #python
- #agents
- #vulnerability