deniz.in

Piyasalar

Hava durumu

Hava durumu yükleniyor

· kaynak dev.to (home feed)

CVE-2026-120338: Prefab UI sandbox'ı MCP çağıranlarına host dosyalarını okuma ve yazma imkânı verdi

JFrog, PrefectHQ'nun Prefab UI'sinde CVE-2026-120338'i açıkladı: Generative UI Python sandbox'ı host üzerindeki dosyaları okuyup yazabiliyordu. 0.14.0–0.20.2 sürümleri etkileniyor; 0.21.0 sorunu gideriyor.

CVE-2026-120338: Prefab UI sandbox'ı MCP çağıranlarına host dosyalarını okuma ve yazma imkânı verdi

JFrog Security Research, 1 Kasım'da CVE-2026-120338'i yayımladı: PrefectHQ'nun generative UI çerçevesi Prefab UI'daki bir açık, Python sandbox'ına kod gönderebilen herkese host sunucudaki dosyaları okuma ve yazma imkânı veriyordu. GitHub duyurusu bunu en yüksek CVSS puanı olan 10.0 ile değerlendiriyor. 0.14.0'dan 0.20.2'ye kadar olan sürümler etkileniyor ve düzeltme, açıklamanın kamuoyuna ulaşmasından birkaç gün önce, 26 Ekim'de 0.21.0'da yayımlandı.

Sandbox nasıl sızdırıyordu

Prefab'ın Generative UI'sı, çağıran tarafın verdiği Python kodunu, bir Deno alt süreci içinde — Pyodide yani Python'un WebAssembly derlemesi — çalıştırıyor; bu tasarım iyi yalıtılmış görünüyordu. JFrog'a göre iki uygulama tercihi her iki katmanı da etkisiz kıldı. Başlatıcı, Deno'yu kısıtsız --allow-read, --allow-write ve --allow-net bayraklarıyla başlatıyor, dış sürece tam dosya sistemi ve ağ erişimi veriyordu. Runner ayrıca Deno API'sini JavaScript'in global objesinde bırakıyordu ve Pyodide'in js modülü bunu vekil olarak sunuyor — böylece sandbox içindeki Python kodu js.Deno.readTextFileSync() ve js.Deno.writeTextFileSync() fonksiyonlarını doğrudan host üzerinde çağırabiliyordu. JFrog ayrıca, runner'daki yorumların ve genel dokümantasyonun alt süreci salt-okunur olarak tanımladığını, ki öyle olmadığını belirtiyor.

Dosya yazmaktan kod çalıştırmaya

Yalnızca yazma erişimi yetki tırmandırma için yeterliydi. 0.20.2 sürümünde JFrog, sunucunun sanal ortamındaki site-packages dizinine bir .pth dosyası yerleştirdi. Python'un site modülü, bir yorumlayıcı o ortamda her başlatıldığında .pth dosyalarındaki import satırlarını exec() ile çalıştırdığından, tek bir yazılan dosya, sandbox dışında kalıcı kod çalıştırmaya dönüştü.

Kimler risk altında

Yaygın uzaktan erişim yolu, tek bir add_provider(GenerativeUI()) çağrısıyla kaydedilen FastMCP'ın GenerativeUI sağlayıcısıdır. FastMCP dokümantasyonu, ortaya çıkan generate_prefab_ui aracını Python kodu kabul edip Pyodide sandbox'ında çalıştıran ve çıktıyı işleyen bir araç olarak tanımlıyor; JFrog, code argümanının ek denetimlerden geçmeden doğrudan iletildiğini tespit etti.

10.0 puanı, FastMCP'ın varsayılan auth=None yapılandırmasını, yani kimlik doğrulamasız ve ağdan erişilebilir bir sunucuyu varsayıyor. Kimlik doğrulama etkin olsa bile JFrog sorunu 9.9 puanlıyor, çünkü araç çağırmaya izinli her istemci bu hataya ulaşabiliyor. Dolaylı bir yol da var: araç, modelin yazdığı kodu çalıştırdığından, bir belgeye ya da web sayfasına gizlenmiş bir prompt injection, güvenilir ve kimliği doğrulanmış bir istemciyi düşmanca Python kodu göndermeye yönlendirebilir.

İki koşul riski sınırlıyor: Generative UI isteğe bağlıdır ve host'ta Deno kurulu olmalıdır. İkincisi göründüğünden daha zayıf bir engel, çünkü FastMCP dokümantasyonuna göre Deno ilk kullanımda otomatik kuruluyor. Ne GitHub duyurusunda ne de Strix'in CVE kaydında sahada istismar edildiğine dair bir bilgi var ve CVE, CISA'nın KEV kataloğunda bulunmuyor. Ayrıca dikkat çekmek gerekir: fastmcp[apps] ek paketi prefab-ui'ı çekiyor; dolayısıyla bir dağıtım, kimse adıyla eklemeden savunmasız paketi barındırabilir.

0.21 neyi değiştiriyor

Düzeltme, 25 Ekim'de birleştirilen PR #538 ile geldi. Kısaca, önyükleme sırasında gereken izinler, üretilmiş herhangi bir kod çalışmadan önce geri alınıyor. JFrog bunu üç değişikliğe bölüyor: runner, runtime ve Prefab kaynakları yüklendikten sonra ama kod kabul etmeden önce Deno'nun okuma, yazma ve ağ izinlerini geri alıyor; Deno --no-prompt ile başlıyor, böylece sonraki izin istekleri erişimi geri kazanamıyor; ve önyükleme ağ erişimi cdn.jsdelivr.net:443 ile sınırlanıyor. JFrog, okuma ve yazma yüklerinin 0.21.0 ve sonrasında artık bir Deno izin hatasıyla başarısız olduğunu bildiriyor.

Operatörler ne yapmalı

Her ortamda kurulu prefab-ui sürümünü kontrol edin, kod tabanında GenerativeUI kayıtlarını arayın ve en az 0.21.0'a yükseltin — 1 Kasım itibarıyla PyPI'daki en güncel sürüm 0.21.1'di. Yükseltme, önceden yazılmış bir dosyayı geri almaz; bu yüzden Gabriel Anhaia'nın dev.to yazısı, daha önce açığa çıkmış bir sunucunun sanal ortamını etkinleştirip site-packages içindeki .pth dosyalarını beklenmeyen import satırları açısından incelemeyi öneriyor. Bazıları meşrudur, örneğin editable kurulumlardan gelenler. Yükseltme henüz mümkün değilse JFrog'nun tavsiyesi net: güvenilmeyen istemcilerin erişebildiği bir sunucuda GenerativeUI kaydetmeyin.

Neden önemli

Bu, birçok FastMCP kullanıcısının geçişli olarak devraldığı bir paketteki en yüksek şiddette bir açık ve baypas edilen sandbox da içi boş bir yapı değildi — Deno içinde Pyodide makul bir yalıtım tasarımıdır. Bu yapılandırma yüzünden başarısız oldu: geniş izin bayrakları ve geride bırakılmış bir global obje, sandbox'taki koda host'a giden doğrudan bir yol verdi. Bu örüntü, modelin yazdığı kodu çalıştıran her yığın için genellenebilir ve generative UI MCP sunucularına yayıldıkça bu sandbox'lar birincil güvenlik sınırı hâline geliyor. Araştırmacının da yankıladığı pratik çıkarım, "sandbox" ifadesini sınanması gereken bir iddia olarak görmek: kendi dizininin dışını okumaya, bir dosya yazmaya ve giden bir bağlantı açmaya çalışan kod çalıştırın ve gerçekte neyin başarısız olduğunu izleyin.

  • #security
  • #vulnerability
  • #mcp
  • #python
  • #deno

İlgili yazılar