deniz.in

Piyasalar

Hava durumu

Hava durumu yükleniyor

· kaynak dev.to (home feed)

vm2 3.11.7 altı sandbox kaçışını yamalıyor, ikisi belirli Node.js sürümlerine bağlı

1 Ekim 2026 tarihli altı danışma belgesi, vm2 içindeki ayrı sandbox kaçışlarını belgeliyor; altısının tamamı 3.11.7'de düzeltildi ve iki tanesi yalnızca belirli Node.js sürüm hatlarında erişilebilir.

vm2 3.11.7 altı sandbox kaçışını yamalıyor, ikisi belirli Node.js sürümlerine bağlı

1 Ekim 2026'da yayımlanan altı güvenlik danışma belgesi, vm2 sandbox'ı içindeki kodun host Node.js sürecine ulaşmasının ayrı yollarını tanımlıyor ve altısının tamamı vm2 3.11.7'de giderildi. dev.to'daki bir yazıya göre etkilenen sürüm aralıkları raporlar arasında farklılık gösteriyor ve iki açıktan bazıları yalnızca belirli Node.js sürüm hatlarında erişilebilir hale geliyor; bu yüzden yama seviyesi ile runtime sürümünün birlikte kontrol edilmesi gerekiyor.

Metin olarak eşlenen policy

Üç başarısızlık, vm2'nin builtin policy girdilerini düz metin olarak karşılaştırmasından kaynaklanıyor; oysa Node.js modül adlarını kendi kuralları altında çözümlüyor.

CVE-2026-92957, şema önekiyle yazılmış negatif builtin girdileriyle ilgili. builtin: ['*', '-node:child_process'] yapılandıran bir gömücü, process başlatılmasını engellemek ister; ancak dev.to raporunda açıklandığı gibi lib/builtin.js'deki kontrol bu girdiyi child_process gibi kanonik adlarla karşılaştırıyor. Önekli biçim hiçbir şeyle eşleşmiyor ve sandbox içindeki require('child_process') çağrısı, execSync ve spawn eklenmiş gerçek host modülünü döndürüyor.

CVE-2026-92958 aynı policy yüzeyini diğer taraftan kırıyor. fs ve child_process'ı reddeden bir yapılandırma, fs/promises'ı reddetmiyor; çünkü wildcard genişletmesi alt yolu ilgisiz bir ad olarak ele alıyor. Sandbox içindeki kod daha sonra promise tabanlı filesystem API'si üzerinden host'ta dosya oluşturup yazabiliyor.

CVE-2026-92951 builtin'lardan paketlere geçiyor. Bir NodeVM harici bir izin listesini özel bir resolve callback ile birleştirdiğinde, istenen paket adı birebir (exact) eşleşmeyle kontrol edilmiyor; bu yüzden yalnızca left-pad içeren bir izin listesi, çakışan bir paket çözümlenebilir bir host yolunda zaten bulunuyorsa evil-left-pad'i de kabul ediyor.

Process başlatan çiftlenmiş bir önek

CVE-2026-92948, Node.js 24 ve üzerini etkiliyor. Bu sürümlerde module.builtinModules yalnızca şema içeren node:test anahtarını barındırıyor; bir gömücü bunu açıkça izin verdiğinde, vm2'nin genel yükleyicisi host modülüne salt okunur bir proxy saklıyor ve dahili require yolu, aramadan önce tek bir node: önekini kaldırıyor. node:node:test isteyen bir sandbox, bu saklı anahtara normalize ediliyor ve proxy'yi alıyor. node:test.run() çağrıları, çağıranın execArgv'sini yeni başlatılan bir Node sürecine iletiyor; böylece --eval= sandbox dışında JavaScript çalıştırıyor. Danışma belgesi, sandbox'ın fs, child_process, module ve process'in doğrudan import denemelerinin gösterim boyunca engellenmiş kaldığını kaydediyor.

Wrapper'ın yalıtamadığı durum

CVE-2026-92941, bir sandbox'ın host iş parçacığının varsayılan sertifika otoritelerini değiştirmesine izin veriyor. tls builtin'i, sıradan özellik atamayı engelleyen özyinelemeli salt okunur bir wrapper üzerinden sunuluyor; ancak tls.setDefaultCACertificates() sandbox'a özgü değil. Kavram kanıtı, izin verilen url modülü üzerinden URLSearchParams.getAll() ile gerçek bir host-realm dizisi oluşturuyor; çünkü yerel TLS işlevi, eşlenmiş bir sandbox değeri değil bir host dizisi istiyor. Çağrıdan sonra, sonraki host HTTPS istemcileri saldırgan kontrollü bir sertifika otorisince imzalanmış bir sertifikayı kabul ediyor. Bu API, Node.js 22.x içinde 22.19.0 ve sonrasında ile 24.x içinde 24.5.0 ve sonrasında mevcut.

CVE-2026-92944 ise runtime'a bağımlı durum olup Node.js 26 üzerindeki vm2'yi etkiliyor. V8'in oradaki SetPrototypeProperties yolu, PromiseThenLookupChain protector'unu geçersiz kılmadan mevcut Promise.prototype.then ve catch veri özelliklerini güncelliyor. Promise.prototype.finally(), eski protector'a güveniyor, InvokeThen hızlı yolunu izliyor ve özgün yerel then işlevini çağırarak vm2'nin wrapper'ını ve resetPromiseSpecies() sağlamlaştırmasını atlıyor. Saldırgan tarafından sağlanan species constructor, resolve ve reject işlevlerini veriyor ve o yerel reaksiyon noktasında kasıtlı olarak tetiklenen bir yığın taşması, constructor zinciri host Function ve process nesnelerine ulaşan bir host-realm RangeError üretiyor. Raporlayan kişi, vm2 3.10.2'den 3.11.5'e kadar Node.js 26.7.0 üzerinde her seferinde aynı sonucu aldı; Node.js 22.23.2, 24.19.0 ve 25.9.0'ın ise standart vm2 3.11.5 çalıştırırken güvenli olduğu bildirildi.

Operatörler ne yapmalı

Acil adım, vm2 3.11.7'ye geçmek ve kullanılan Node.js hattını kontrol etmek; çünkü CVE-2026-92944 Node.js 26 gerektirirken CVE-2026-92948 Node.js 24 veya üzerini gerektiriyor. Yükseltme hemen yapılamıyorsa, yazı şu önlemleri öneriyor: tehlikeli builtin'ları hem kanonik hem de şema önekli adlarla reddetmek ve fs, fs/promises, child_process, tls, module, process ile node:test'i tek bir karar olarak ele almak; harici bir izin listesinin önünde özel resolve callback'lerinden kaçınmak ve birebir paket tanımlayıcıları kullanmak; güven sınırı dışından gelen kod için process düzeyinde yalıtımı tercih etmek. Yazı ayrıca doğrulamanın yapılandırma incelemesinden daha değerli olduğunu savunuyor: sandbox içinde require('fs/promises'), require('child_process'), require('node:child_process') denemeleri ve bir node:node:test araması yapan kısa bir sonda, policy'nin gerçekten uygulanıp uygulanmadığını gösteriyor.

Neden önemli

vm2'nin temel garantisi, gömen uygulamanın güvenilmeyen kodun hangi builtin'lara ve paketlere ulaşabileceğini kontrol etmesidir. Bu kontrolün kayabileceğine dair altı bağımsız gösterim — önekli reddetme girdileri, genişletilmemiş alt yollar, çiftlenmiş bir şema öneki, birebir olmayan paket eşleşmesi, bir TLS setter'ı ve bir V8 hızlı yolu — adları kendi yöntemiyle normalize eden bir runtime karşısında metin tabanlı policy'nin ne kadar kırılgan olduğunu ortaya koyuyor. Yazıya göre altıdan beşi bu kök biçimi paylaşıyor; TLS vakası ise istisna, orada policy tuttu ama izin verilen modül yine de process geneli durumuna ulaştı. Node.js üzerinde güvenilmeyen JavaScript'i process içinde çalıştıran herkes 3.11.7'yi zorunlu görmeli, runtime sürümünü tehdit modelinin bir parçası olarak ele almalı ve process içi sandbox'ın, güvenmediği kod için doğru sınır olup olmadığını sormalı.

  • #node-js
  • #security
  • #javascript
  • #sandbox-escape
  • #vm2

İlgili yazılar