Esas olarak sunucu tarafı oluşturma ve test çerçeveleri için kullanılan, yaygın olarak kullanılan bir JavaScript kitaplığı olan Happy DOM’da kritik bir güvenlik açığı belirlendi. CVE-2025-61927 olarak kataloglanan güvenlik açığı, saldırganların kütüphanenin sanal makine (VM) bağlamından kaçmasına olanak tanıyor ve bu da güvenlik açığı bulunan sistemlerde olası uzaktan kod yürütülmesine yol açıyor. Bu kusur, Happy DOM’a bağlı milyonlarca uygulamayı tehdit ediyor.
Happy DOM’daki VM Bağlamından Kaçış Güvenlik Açığı’nı (CVE-2025-61927) Anlama
Bu güvenlik açığının temelinde Node.js VM bağlamının Happy DOM 19 ve önceki sürümlerinde uygunsuz şekilde yalıtılması yatmaktadır. VM bağlamının güvenli bir sanal alan görevi görmesi ve güvenilmeyen kodun ana bilgisayar sisteminden ödün vermeden yürütülmesine olanak sağlaması amaçlanmaktadır. Ancak bu izolasyon kusurludur ve kötü amaçlı JavaScript kodunun sanal alandan kaçmasına ve daha üst düzey sistem işlevlerine erişmesine olanak tanır.
Güvenlik araştırmacısı Mas0nShi, güvenlik açığının JavaScript yapıcılarının miras zincirinden yararlandığını ortaya çıkardı. Saldırganlar, bağlamın nesnelerinden yapıcı zincirinde yukarıya doğru çıkarak küresel boyuta ulaşabilirler. İşlev Rastgele kod dizelerinin değerlendirilmesine izin veren yapıcı. Bu, sınırlamayı etkili bir şekilde ortadan kaldırır ve VM bağlam korumalarını atlayarak işlem düzeyinde kod yürütülmesine olanak tanır.
Saldırı, kullanılan modül sistemine bağlı olarak farklılık gösterir: CommonJS veya ECMAScript modülleri (ESM). Saldırganlar CommonJS’ye erişebildiği için CommonJS çalıştıran sistemler özellikle açığa çıkar. gerekmek() saldırı yüzeyini artırarak ek modülleri içe aktarmalarına ve yürütmelerine olanak tanır. Buna karşılık, ESM ortamları içe aktarma veya gerektirme erişimini sınırlayarak bazı yetenekleri azaltır ancak yine de süreç düzeyinde bilgi alımına izin verir.
Kapsam ve Etki
Happy DOM, kullanıcı tarafından oluşturulan veya güvenilmeyen HTML içeriğini işleyen sunucu tarafı oluşturma (SSR) ve test ortamları için yaygın olarak benimsenmiştir. Kusur, JavaScript uygulamalarını oluşturmak ve test etmek için kitaplığa güvenen yaklaşık 2,7 milyon kullanıcıyı etkiliyor. En fazla risk altındaki uygulamalar, kullanıcı tarafından kontrol edilen içeriği dinamik olarak işleyen ve saldırganlara kötü amaçlı komut dosyaları yerleştirme ve yürütme fırsatı yaratan uygulamalardır.
Tipik saldırı senaryoları şunları içerir:
- Veri Sızdırması: Saldırganlar hassas ortam değişkenlerine, yapılandırma dosyalarına veya gizli belirteçlere erişim sağlayabilir.
- Yanal Hareket: Kötü niyetli aktörler, sistemler arasında yanal olarak hareket etmek için ortamdaki ağ erişiminden yararlanabilir, ancak Happy DOM, CORS gibi bazı ağ korumaları uygulamaktadır.
- Kod Yürütme: Saldırganlar alt süreçlerden yararlanarak rasgele komutlar çalıştırabilir.
- Kalıcılık: Dosya sistemi erişimi, saldırganların ana bilgisayardaki kötü amaçlı yükleri değiştirmesine veya kalıcı hale getirmesine olanak tanıyabilir.
Teknik Detaylar ve Çoğaltma
CommonJS kurulumlarında saldırganlar gerekmek() kaçış yoluyla işlev görür ve aşağıdaki gibi çekirdek Node.js modüllerinin içe aktarılmasına izin verir: fs dosyaları okumak için:
const { Pencere } = require(‘mutlu-dom’);
const pencere = yeni Pencere({ konsol });window.document.write(`
const süreci = this.constructor.constructor(‘dönüş süreci’)();
const require = proses.mainModule.require;console.log(‘Dosyalar:’, require(‘fs’).readdirSync(‘.’).slice(0,3));
‘);
ECMAScript modül bağlamlarında, modüllerin içe aktarılması kısıtlanmış olmasına rağmen, saldırganlar yine de modüllere erişebilir. işlem PID gibi süreç düzeyindeki bilgileri nesneye aktarın ve edinin:
const { Pencere } = require(‘mutlu-dom’);
const pencere = yeni Pencere({ konsol });window.document.write(`
const süreci = this.constructor.constructor(‘dönüş süreci’)();console.log(‘PID:’, süreç.pid);
‘);
Sorunun özü, Happy DOM’daki JavaScript değerlendirme özelliğinin varsayılan olarak etkin olmasıdır; bu, kullanıcılar için her zaman açık değildir ve güvenilmeyen kodlarla çalışırken riskler oluşturur.
Yanıt ve Öneriler
Güvenlik açığı giderildiJavaScript değerlendirmesinin varsayılan olarak devre dışı bırakıldığı Happy DOM sürüm 20’de sed. Bu sürüm aynı zamanda potansiyel olarak güvenli olmayan ortamlarda JavaScript değerlendirmesi etkinleştirildiğinde uyarılar da içerirts.
Kötüye kullanım riskini azaltmak için kullanıcıların derhal sürüm 20 veya sonraki bir sürüme yükseltmeleri şiddetle tavsiye edilir. Hemen yükseltme yapamayanlar için, işlenen içeriğe tamamen güvenilmediği sürece JavaScript değerlendirmesini tamamen devre dışı bırakmanız önerilir.
Node.js’yi şu komutla çalıştırarak ek sağlamlaştırma elde edilebilir: –dizelerden-kod-oluşturmasına izin verme bayrak. Bu bayrak, aşağıdaki gibi dize tabanlı kod oluşturma yöntemlerini engeller: değerlendirme() Ve İşlev() Happy DOM’da JavaScript değerlendirmesi etkinleştirilmiş olsa bile, işlem düzeyinde çalışmayı engelleyerek VM bağlam kaçışını etkili bir şekilde engeller. Özellikle, değerlendirme() Ve İşlev() izole edilmiş Happy DOM VM bağlamının kendisinde güvenli bir şekilde kullanılabilir durumda kalır.