Sentinel değerinin Chrome V8'deki uygulaması ve güvenlik etkileri
Sentinel değeri, algoritmalarda özel bir değerdir ve genellikle döngü veya özyinelemeli algoritmaların bitiş koşulu olarak kullanılır. Chrome V8 motoru kaynak kodunda geniş bir şekilde Sentinel değeri kullanılmaktadır. Son zamanlarda, güvenlik araştırmacıları, belirli bir Sentinel değeri nesnesinin sızdırılması yoluyla Chrome sandbox'ında rastgele kod yürütmenin mümkün olduğunu keşfettiler.
V8'de, JavaScript ortamına sızmaması gereken çeşitli yerel nesneler bulunmaktadır. Daha önce ifşa edilen TheHole nesnesinin yanı sıra, Uninitialized Oddball nesnesinin sızması da güvenlik sorunlarına yol açabilir. Bu yöntem ilk olarak Issue1352549'da ortaya çıkmış olup, şu anda V8'in en son sürümünde hala kullanılabilir, Google henüz düzeltmemiştir.
Bu yöntem oldukça güçlü bir genel geçerliğe sahiptir:
Issue1216437(CVE-2021-30551)'de, internal uninitialized oddball'ın sızdırılması için ilk kez POC verilmiştir.
Issue1314616(CVE-2022-1486)'de UninitializedOddball nesnesi de doğrudan sızdırılmıştır.
Issue1352549('de CVE) olmadan tam olarak nasıl kullanılacağını açıkladı.
Bu örnekler, Sentinel değeri sızıntısının birden fazla yazılım sürümünü etkileyebileceğini göstermektedir.
V8'in çoğu yerel nesnesi v8/src/roots/roots.h dosyasında tanımlanmıştır ve bellek içinde yan yana düzenlenmiştir. Bu nesneler JavaScript ortamına sızdığında, sandıkçının kaçması mümkün olabilir.
Bu yöntemi doğrulamak için, V8'in yerel fonksiyonu %TheHole()'i değiştirerek Uninitialized Oddball nesnesini sızdırabilirsiniz.
Bu yöntem, V8'in HardenType korumasını aşmak için kullanılabilir. Anahtar nokta, optimize edilmiş JavaScript read fonksiyonunun nesne özelliklerini yeterince kontrol etmemesi, bu da tür karışıklığına yol açarak rastgele okuma/yazma işlemlerinin gerçekleştirilmesine neden olmaktadır.
Önerilen düzeltme, optimize edilmiş fonksiyonun dizi elemanlarını döndürürken dizi haritasının kontrolünü ekleyerek, doğrudan ofset hesaplayıp değer döndürmekten kaçınmaktır.
Dikkate değer bir husus, Skype gibi yazılımların bu tür açıklar içerebileceğidir. x86 platformunda, adres sıkıştırmasının eksikliği nedeniyle, rastgele okuma ve yazma aralığı daha büyüktür. Saldırganlar bu açığı kullanarak tam bir istismar zinciri gerçekleştirebilir.
Uninitialized Oddball dışında, V8'de benzer riskleri barındırabilecek başka birçok Sentinel değeri bulunmaktadır. Diğer Sentinel değerlerinin sızıntısının neden olduğu güvenlik sorunlarını daha derinlemesine araştırmayı öneririz ve ilgili senaryoları bulanık testlere eklemeyi düşünmeliyiz.
Bu tür bir sorunun resmi olarak güvenlik açığı olarak sınıflandırılıp sınıflandırılmamasına bakılmaksızın, saldırganların tam istismar süresini önemli ölçüde kısaltabilir, bu da dikkate alınması gereken bir durumdur.
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
12 Likes
Reward
12
5
Repost
Share
Comment
0/400
LowCapGemHunter
· 08-05 12:29
Yine bir güvenlik açığı keşfedildi, v8 hemen düzeltmeye gelsin.
Chrome V8 motoru Sentinel değeri sızıntısı, kumanda kaçışı riskine neden oluyor.
Sentinel değerinin Chrome V8'deki uygulaması ve güvenlik etkileri
Sentinel değeri, algoritmalarda özel bir değerdir ve genellikle döngü veya özyinelemeli algoritmaların bitiş koşulu olarak kullanılır. Chrome V8 motoru kaynak kodunda geniş bir şekilde Sentinel değeri kullanılmaktadır. Son zamanlarda, güvenlik araştırmacıları, belirli bir Sentinel değeri nesnesinin sızdırılması yoluyla Chrome sandbox'ında rastgele kod yürütmenin mümkün olduğunu keşfettiler.
V8'de, JavaScript ortamına sızmaması gereken çeşitli yerel nesneler bulunmaktadır. Daha önce ifşa edilen TheHole nesnesinin yanı sıra, Uninitialized Oddball nesnesinin sızması da güvenlik sorunlarına yol açabilir. Bu yöntem ilk olarak Issue1352549'da ortaya çıkmış olup, şu anda V8'in en son sürümünde hala kullanılabilir, Google henüz düzeltmemiştir.
Bu yöntem oldukça güçlü bir genel geçerliğe sahiptir:
Issue1216437(CVE-2021-30551)'de, internal uninitialized oddball'ın sızdırılması için ilk kez POC verilmiştir.
Issue1314616(CVE-2022-1486)'de UninitializedOddball nesnesi de doğrudan sızdırılmıştır.
Issue1352549('de CVE) olmadan tam olarak nasıl kullanılacağını açıkladı.
Bu örnekler, Sentinel değeri sızıntısının birden fazla yazılım sürümünü etkileyebileceğini göstermektedir.
V8'in çoğu yerel nesnesi v8/src/roots/roots.h dosyasında tanımlanmıştır ve bellek içinde yan yana düzenlenmiştir. Bu nesneler JavaScript ortamına sızdığında, sandıkçının kaçması mümkün olabilir.
Bu yöntemi doğrulamak için, V8'in yerel fonksiyonu %TheHole()'i değiştirerek Uninitialized Oddball nesnesini sızdırabilirsiniz.
Bu yöntem, V8'in HardenType korumasını aşmak için kullanılabilir. Anahtar nokta, optimize edilmiş JavaScript read fonksiyonunun nesne özelliklerini yeterince kontrol etmemesi, bu da tür karışıklığına yol açarak rastgele okuma/yazma işlemlerinin gerçekleştirilmesine neden olmaktadır.
Önerilen düzeltme, optimize edilmiş fonksiyonun dizi elemanlarını döndürürken dizi haritasının kontrolünü ekleyerek, doğrudan ofset hesaplayıp değer döndürmekten kaçınmaktır.
Dikkate değer bir husus, Skype gibi yazılımların bu tür açıklar içerebileceğidir. x86 platformunda, adres sıkıştırmasının eksikliği nedeniyle, rastgele okuma ve yazma aralığı daha büyüktür. Saldırganlar bu açığı kullanarak tam bir istismar zinciri gerçekleştirebilir.
Uninitialized Oddball dışında, V8'de benzer riskleri barındırabilecek başka birçok Sentinel değeri bulunmaktadır. Diğer Sentinel değerlerinin sızıntısının neden olduğu güvenlik sorunlarını daha derinlemesine araştırmayı öneririz ve ilgili senaryoları bulanık testlere eklemeyi düşünmeliyiz.
Bu tür bir sorunun resmi olarak güvenlik açığı olarak sınıflandırılıp sınıflandırılmamasına bakılmaksızın, saldırganların tam istismar süresini önemli ölçüde kısaltabilir, bu da dikkate alınması gereken bir durumdur.