Yaygın olarak kullanılan bir JavaScript sanal alanındaki uzaktan kod yürütme (RCE) güvenlik açığı, CVSS güvenlik açığı risk ölçeğinde en yüksek puan olan 10’u almıştır; tehdit aktörlerinin bir sanal alan kaçışı yürütmesine ve barındırma makinesinde kabuk komutları çalıştırmasına izin verir.

Bulut güvenlik firması Oxeye’dan araştırmacılar, “Sandbreak” adını verdikleri tehlikeli kusuru keşfettiler. vm2NPM paket yöneticisine göre aylık 16 milyondan fazla indirmeye sahip bir JavaScript sanal alanı.

Oxeye mimarı Yuval Ostrovsky ve güvenlik araştırmacısı Gal Goldshtein, “Bu güvenlik açığının maksimum CVSS puanı 10’a sahip olması ve son derece popüler olması, potansiyel etkisinin yaygın ve kritik olduğu anlamına geliyor.” bir blog yazısı 10 Ekim’de yayınlandı.

Oxeye, kusuru 16 Ağustos’ta buldu ve iki gün sonra proje sahiplerini bilgilendirdi. 28 Ağustos’ta GitHub yayınlandı CVE-2022-36067 ve güvenlik açığına mümkün olan en yüksek risk derecesini verdi.

Araştırmacılar, projenin koruyucularının, yüksek güvenlik açığı riski nedeniyle sanal alanı kullanan herkes tarafından uygulanması gereken vm2 sürüm 3.9.11’de Sandbreak için bir yama yayınlamaya hızlı bir şekilde tepki gösterdi.

Sandbox’lar: Tarihsel Olarak Güvenilir

Tüm sanal alanlar gibi, vm2 de uygulamaların güvenilir kod çalıştırabileceği yalıtılmış bir ortam sunar; geliştiriciler veya ağ yöneticileri, çalıştıkları uygulamayı, sistemi veya platformu etkilemeden programları çalıştırmak veya dosyaları açmak için bunları kullanabilir, modern uygulamalarda hayati bir amaca hizmet eder. .

Yazılım geliştiricileri genellikle yeni programlama kodunu test etmek için sanal alanları kullanır ve siber güvenlik araştırmalarında önemli bir araç olarak bilinirler ve araştırmacıların potansiyel olarak kötü amaçlı yazılımları bir ağın veya uygulama ortamının diğer bölümlerine zarar vermeden test etmelerine olanak tanır.

Gerçekten de, bir sandbox’ın evrensel olarak güvenilir olduğu gerçeği, Sandbreak kusurunu bu kadar kritik yapan şeydir ve araştırmacılar, uygulamalarını desteklemek için tüm sandbox kullanıcıları arasında bir alarm vermesi gerektiğini söyledi.

Gönderide, “Tanımları gereği, korumalı alanlar güvenli yerler olarak kabul edilir ve potansiyel olarak tehlikeli kodları uygulamalarımızdan izole eden mekanizmalar olarak güvenilirdir” diye yazdılar. “Fakat bu güven sarsılırsa ne olur?”

Teknik Analiz

Araştırmacılar, vm2’nin bakımını yapan ekibe ifşa edilen önceki güvenlik gecikmelerini analiz ederken keşfettikleri Sandbreak araştırmalarında tam da bunu keşfettiler.

Hata, siber saldırganların Node.js’deki hata mekanizmasını kötüye kullanmasına izin verecek olan vm2 hata raporlayıcısında bulunur. Araştırmacılar, sanal alandan kaçmak için uygulamada meydana gelen bir hatanın çağrı yığınını özelleştirebileceklerini açıkladı.

Araştırmacılar, gönderide “Çağrı yığınını özelleştirmek, global ‘Hata’ nesnesi altında ‘prepareStacktrace’ yöntemini uygulayarak bunu başarabilir” dedi. “Bu, bir hata oluştuğunda ve atılan hata nesnesinin ‘yığın’ özelliğine erişildiğinde, Node.js’nin argüman olarak bir dizi ‘CallSite’ nesnesinin yanında hatanın bir dize temsilini sağlarken bu yöntemi çağıracağı anlamına gelir. “

Araştırmacılar, CallSite nesnelerinin sorun nedeniyle maruz kaldığı yöntemlerden birinin, ilgili yığın çerçevesinde bulunan “bu” nesneyi döndürmekten sorumlu olan “getThis” olduğunu buldu.

Bu davranış, sandbox kaçışlarına yol açabilir, çünkü “CallSite” nesnelerinin bazıları “‘getThis’ yöntemini çağırırken sandbox dışında oluşturulan nesneleri döndürebilir” diye yazdılar. Saldırganlar, sanal alanın dışında oluşturulan bir “CallSite” nesnesini ele geçirebilirse, Node’un genel nesnelerine erişebilir ve oradan rastgele sistem komutları yürütebilir.

Azaltmayı Atlamak

vm2’nin koruyucuları, “prepareStackTrace”i geçersiz kılmanın gerçekten bir sandbox kaçışına yol açabileceğinin farkındaydı. Error nesnesini ve “prepareStackTrace” yöntemini kendi uygulamalarıyla sararak kaçış yolunu azaltmaya çalıştıklarını, bu da herhangi birinin yöntemi geçersiz kılmasını ve kaçışı gerçekleştirmesini engellemeyi başardıklarını söylediler.

Ancak Oxeye araştırmacıları, vm2’nin “WeakMap” JavaScript yerleşik türüyle ilgili belirli yöntemleri kaydırmayı kaçırdığı için bunu atlayabileceklerini buldular. Araştırmacılar, “Bu, saldırganın kendi ‘prepareStackTrace’ uygulamasını sağlamasına, ardından bir hatayı tetiklemesine ve sanal alandan kaçmasına izin verdi” diye yazdı.

Oxeye araştırmacıları, sanal alandan kaçmak için geçersiz kılmak için ihtiyaç duydukları işlevin Error nesnesinin hazırlıkStackTrace işlevi olduğunu bilerek, daha da ileri gitti ve global Error nesnesini kendi nesneleriyle geçersiz kılmaya karar verdi.

Bunu yapmak, sandbox’tan kaçmalarını sağlayan preparStackTrace işlevini uyguladı. Birkaç basit adım sonra, şu anda yürütülmekte olan sürece erişebildiklerini ve sanal alanı çalıştıran sistemde komutları çalıştırabileceklerini söylediler.

Sandbox’ları Güvenle Kullanmak

Araştırmacılar, doğaları gereği korumalı alanların bir uygulama veya sistem içinde güvenilmeyen kodu güvenli bir şekilde çalıştırması anlamına gelse de, işletmelerin otomatik olarak risksiz olduklarını varsaymamaları gerektiği konusunda uyardılar.

Ancak, bir ortamda sanal alan kullanmak kaçınılmazsa, Oxeye bir uygulamanın mantıksal, hassas bölümünü korumalı alan kodunu çalıştıran mikro hizmetten ayırarak riski azaltmayı önerir.

Araştırmacılar, “bir tehdit aktörü sanal alandan başarılı bir şekilde ayrılırsa, saldırı yüzeyinin izole edilmiş mikro hizmetle sınırlı olmasını” sağlayacak.

İşletmeler ayrıca mümkün olduğunda JavaScript gibi dinamik bir programlama diline dayanan bir sanal alan kullanmaktan kaçınmaları gerektiğini söylediler.

Araştırmacılar, yazılarında, “Dilin dinamik doğası, potansiyel bir saldırgan için saldırı yüzeyini genişleterek bu tür saldırılara karşı savunmayı çok daha zor hale getiriyor” dedi.



siber-1