· kaynak dev.to (home feed)
CVE-2026-100721: vm2 sandbox kaçışının kaynağı modül izin listesindeki uçtan yoksun önek regex'i
dev.to'da yayınlanan bir kök neden analizine göre, 9.5 puanlı CVE-2026-100721'nin kaynağı son ucu sabitlenmemiş bir izin listesi regex'i; bu durum konuk kodun onaylanmamış kardeş modülleri host yetkileriyle yüklemesine imkân veriyordu. vm2 3.12.2'de düzeltildi.

İzin gibi davranan bir önek
dev.to'da yayımlanan bir kök neden analizi, Node.js sandboxing kütüphanesi vm2'deki 9.5 puanlı sandbox kaçışı olan CVE-2026-100721'yi, konuk kodun hangi modülleri yükleyebileceğini denetleyen mekanizmadaki tek bir eksik regex sınırına bağlıyor.
Yazarın açıkladığı gibi bu kusur ne bir parser hatası ne de klasik bir VM kaçışı. Bir yetkilendirme hatası: vm2'nin NodeVM'i, gömücünün require.external aracılığıyla özel bir resolver sağlamasına izin veriyor ve vm2, sonraki require çağrılarının izin listesiyle karşılanabilmesi için çözümlenen her yolu kaydediyor. lib/resolver-compat.js içindeki LegacyResolver.customResolve'taki bu kaydetme adımı, çözümlenen yolu yalnızca bir başlangıç sabiti içeren bir regex olarak sakladı — ne sondaki yol ayracı ne de dize sonu işaretçisi vardı. Bunun sonucunda isPathAllowedForModule kontrolü, onaylanan dizeyle başlayan her yolu onaylıyordu.
Tek bir izinli modül kardeşlerini de yetkilendirdi
8 Eylül'de çalışan bir proof-of-concept donanımıyla birlikte yayımlanan bakımcının kendi duyurusu GHSA-5h3f-q97h-ccvc, saldırının şeklini net biçimde ortaya koyuyor. Bir sandbox foo adlı bir modülü izin listesine alırsa ve yanında foo2 adlı ikinci bir paket duruyorsa, ilk meşru require çağrısı .../node_modules/foo önekini kaydediyor. Konuk kod daha sonra .../node_modules/foo2/index.js mutlak yolunu isteyebiliyor; önek eşleşiyor ve NodeVM'nin varsayılan bağlamı host olduğundan kardeş modül hostRequire üzerinden yükleniyor ve en üst düzey kodu, vm2'nin readonly sarmalayıcıları uygulanmadan tam Node.js yetkisiyle çalışıyor.
dev.to yazısına göre duyurudaki donanım, host tarafındaki bir child_process çağrısının ürettiği PREFIX_PWN dizgisiyle başarımı bildiriyor; örtüşen önekten yoksun kontrol kurulumu ise ENOTFOUND ile reddediliyor.
Zaman çizelgesi ve önem derecesi
NVD kaydı 27 Eylül'de CNA olarak VulnCheck ile ortaya çıktı ve NVD şu anda bunu ertelenmiş olarak işaretlerken MITRE kaydı yayımlanmış olarak listeliyor — atıf yapmadan önce kontrol edilmesi gereken bir tutarsızlık. GHSA duyurusu ve vm2 3.12.2'deki düzeltme 8 Eylül'de yayımlandı. Puanlama CVSS 4.0 altında 9.5, 3.1 altında 9.0; ancak SSVC sömürüyü yalnızca proof-of-concept düzeyinde değerlendiriyor: yazar sahadaki kullanıma dair bir rapor ve KEV girişi bulamadı. Aynı gün iki kardeş duyuru daha geldi — CVE-2026-100722 ve 7.5 önemli bir zlib sorunu olan CVE-2026-100723 — yani yalnızca bu hatayı yamamak kütüphaneyi temizlemez.
Gerçekte kim risk altında
dev.to analizi kapsam konusunda özenli. Hata, varsayılan olmayan bir kurulum gerektiriyor: require.external ile birlikte özel bir resolver fonksiyonu. Özel resolver içermeyen hazır bir vm2 yapılandırması customResolve'a bu şekilde ulaşmıyor ve CVSS 4.0 vektörü bu ön koşulu kodlarken CISA'nın SSVC'si sorunu otomatikleştirilemez olarak işaretliyor. İşin batığı şu: özel resolver ile izin listesi eşleştirmesi, kontrollü dış modül erişimi vermenin belgelenmiş yolu tam da budur — özellik güvenlik sınırı olmak için var ve sınır aşırı eşleşti.
Tespit etme ve düzeltme
3.12.2'deki düzeltme, kaydı sınır eşleşmeli bir temel yola çeviriyor ve sürüm notlarına göre hiçbir API'yi değiştirmiyor; dolayısıyla yükseltme tek başına tüm çare. Hemen yama yapamayan ekipler dakikalar içinde denetleyebilir: npm ls vm2 kurulu sürümü doğrular; external: ve bir resolve fonksiyonuyla birlikte new NodeVM araması yapmak riskli yapılandırmayı bulur. Yazar ayrıca —açıkça doğrulanmamış olarak işaretleyerek— npm duyuru veritabanının düzeltmenin gerisinde kaldığı, npm audit'in en az bir kayıt için 3.12.1'i temiz gösterdiği iddiasını aktarıyor; bu da denetçiye değil kurulu sürüm kontrolüne güvenmek için bir neden. Yazar kaçışı kendisinin yeniden üretmediğini belirtiyor; anlatım, mekanizma üzerinde hemfikir olan NVD açıklamasını, bakımcının duyurusunu ve sürüm notlarını izliyor.
vm2 artık söylentilere göre ölü proje değil
Analiz yaygın bir varsayımı da düzeltiyor. vm2, 2023'te bakımcının kendi güvenlik sorunlarının tamamen giderilemeyeceği uyarıları eşliğinde emekliye ayrılmış olsa da, depo artık 2025 sonundaki v3.10.0'dan 3.12.2'ye uzanan düzenli bir sürüm merdiveni, bir güvenlik ilkesi dosyası ve Node'un yanı sıra Bun'u kapsayan CI gösteriyor — ve bakımcı bu duyuruyu, çalışan bir PoC ile birlikte, düzeltmenin yayımlandığı gün kendisi yayımladı. Yazarın ölçülü sonucu şu: aktif olarak bakımı yapılan bir izolasyon kütüphanesi, kararlı bir rakiple yüzleşmeye otomatik olarak uygun değil: vm2 güvenilir ama düşmanca olmayan girdiyi sağlamlaştirmek için makul kalabilir, ancak düşmanca koda karşı sert bir sınır olarak değil.
Neden önemli
vm2'yi belgelenmiş dış modül kalıbıyla gömen herkes için izin listesi, kast edilenden sessizce daha genişti ve tek satırlık bir sürüm yükseltmesi bunu kapatıyor. Daha geniş ders bu kütüphanenin çok ötesine genelleniyor: dize öneki eşleştirmesine dayanan her erişim denetimi — CI yol filtreleri, registry hostname'leri, dosya yolu izin listeleri — sınır sabitleme ve testler hak eden bir yetkilendirme kodudur. Ve bu olay, "ölü proje" söylentilerini, bir yükselt-ya-da-sök kararı yönlendirmeden önce yeniden doğrulama hatırlatmasıdır.
- #node-js
- #security
- #javascript
- #vulnerability
- #sandbox
İlgili yazılar
- AWS bir Bedrock AgentCore injection hatasını iki kez düzeltti; ikinci düzeltmenin changelog kaydında hiçbir CVE yer almadı
- ShieldCrash PoC'si, Microsoft Defender'ın ShieldBreak düzeltmesini atlatarak SYSTEM olarak dosya okuyor
- Adobe Connect 12.12 ve Android Uygulaması 4.5, APSB26-150'deki dokuz açığı kapatıyor