Chrome V8 Motorundaki Sentinel Value'nin Güvenlik Etkilerini Derinlemesine İnceleme
Sentinel değeri, algoritmalardaki özel bir değerdir ve genellikle döngü veya özyinelemeli algoritmaların bitiş koşulu olarak kullanılır. Chrome kaynak kodunda çeşitli Sentinel değerleri bulunmaktadır. Daha önce yapılan araştırmalar, TheHole nesnesinin sızdırılması yoluyla Chrome kumanda içinde rastgele kod yürütmenin gerçekleştirilebileceğini göstermiştir. Google ekibi daha sonra ilgili güvenlik açıklarını düzeltmiştir.
Ancak, V8'de JavaScript'e sızmaması gereken başka yerel nesneler de bulunmaktadır. Bu makalede, Issue1352549'da ilk kez ortaya çıkan Uninitialized Oddball nesnesinin etrafından dolanma yöntemi tartışılacaktır. Dikkate değer bir nokta, bu yöntemin şu anda V8'in en son sürümünde hala kullanılabilir olması ve henüz düzeltilmemiş olmasıdır.
Bu yöntem belli bir evrenselliğe sahiptir:
Issue1216437(CVE-2021-30551)'de içsel başlatılmamış oddball'ı sızdıran poc ilk kez sunulmuştur.
Issue1314616(CVE-2022-1486)'de UninitializedOddball doğrudan sızdırılmıştır.
Issue1352549(NoCVE)'in etkisi dikkate değerdir.
Bu durumlar, PatchGap etkisi altında olabilecek yazılımları yeniden gözden geçirmenin gerekli olduğunu göstermektedir. Şu anda Skype bu açığı henüz kapatmamıştır.
V8'deki çoğu yerel nesne, v8/src/roots/roots.h dosyasında tanımlanmıştır ve bellekte bitişik olarak yer alır. Bu sızdırılmaması gereken yerel nesneler JavaScript'e sızdırıldığında, sandbox içinde rastgele kod yürütme gerçekleştirilebilir.
Bu yöntemi doğrulamak için, V8'in yerel fonksiyonunu değiştirebiliriz ve Uninitialized Oddball'ı JavaScript'e sızdırabiliriz. Özellikle, %TheHole() fonksiyonundaki isolate'e göre ofseti değiştirerek Uninitialized Oddball'ı döndürmesini sağlayabiliriz.
Bu yöntemi kullanarak HardenType korumasını atlayabilir ve nispeten rastgele okuma/yazma işlemleri gerçekleştirebilirsiniz. Optimize edilmiş JavaScript kodunu analiz ettiğimizde, obj.prop kontrol edilirken obj.prop için anahtar olan Value'nun doğrulanmadığını, doğrudan JavaScript semantiğine göre kaydırma hesaplandığını ve dizi değerinin alındığını görebiliriz; bu da tür karışıklığına neden olmaktadır.
uninitialized_oddball'ın V8 belleğinde daha önce sıralanması ve daha ilkel olması nedeniyle, TheHole nesnesinden daha kolay bir şekilde taklit edilebilir. TheHole ile ilgili düzeltmeler yapıldıktan sonra, bu yöntem geçiştirilmek için tercih edilen seçenek haline geldi.
Optimize edilmiş fonksiyonun dizi elemanlarını dönerken, doğrudan hesaplama yaparak değer döndürmekten kaçınmak için dizi haritasının kontrolünü eklemeyi öneririm.
Dikkate değer olan, Skype'ın bu açığı henüz kapatmamış olmasıdır. x86 sistemlerinde adres sıkıştırması olmadığı için, rastgele okuma/yazma işlemi, tüm süreç açısından görece bir durumdadır. Skype ASLR'yi açmış olsa da, dosyanın büyük olması nedeniyle, hacker'ların sabit adreslere okuma/yazma yapması, Skype dosya içeriğine erişme olasılığını oldukça artırmaktadır. Bu, tam bir istismar zincirini tamamlamayı önemli ölçüde kolaylaştırmaktadır.
Bu PatchGap sadece Issue1352549'u kapsamakla kalmıyor, aynı zamanda yeni bir bypass yönteminin açıklanması, Issue1314616 ve Issue1216437 gibi açıkların istismar zorluğunu büyük ölçüde azalttı. Hackerlar, daha önce herhangi bir sızdırılan uninitialized_oddball açığını tam olarak istismar etmek için neredeyse ek bir araştırma yapmalarına gerek kalmıyor.
V8'de ayrıca başka birçok Sentinel değeri bulunmaktadır ve bunlar da benzer güvenlik açıklarına sahip olabilir. Fuzz testlerinde %TheHole/uninitialized_Oddball gibi Sentinel değerlerini değişken olarak dikkate almanız önerilir, böylece diğer potansiyel istismarları keşfedebilirsiniz.
Bu tür sorunların resmi olarak güvenlik sorunu olarak görülüp görülmemesi önemli değil, bunlar hackerların tam bir istismar gerçekleştirme süresini büyük ölçüde kısaltacaktır. Chrome gibi yazılımların güvenliğini artırmak için bu alana sürekli dikkat etmemiz ve araştırmalar yapmamız gerekiyor.
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.
14 Likes
Reward
14
3
Repost
Share
Comment
0/400
GateUser-00be86fc
· 8h ago
Hey v8 yine küçük bir açık ortaya çıkardı.
View OriginalReply0
Blockblind
· 8h ago
Bu hatanın bu kadar uzun süre düzeltilmemesi de gerçekten ilginç.
Chrome V8 motoru Sentinel Value güvenlik riskleri derinlik analizi
Chrome V8 Motorundaki Sentinel Value'nin Güvenlik Etkilerini Derinlemesine İnceleme
Sentinel değeri, algoritmalardaki özel bir değerdir ve genellikle döngü veya özyinelemeli algoritmaların bitiş koşulu olarak kullanılır. Chrome kaynak kodunda çeşitli Sentinel değerleri bulunmaktadır. Daha önce yapılan araştırmalar, TheHole nesnesinin sızdırılması yoluyla Chrome kumanda içinde rastgele kod yürütmenin gerçekleştirilebileceğini göstermiştir. Google ekibi daha sonra ilgili güvenlik açıklarını düzeltmiştir.
Ancak, V8'de JavaScript'e sızmaması gereken başka yerel nesneler de bulunmaktadır. Bu makalede, Issue1352549'da ilk kez ortaya çıkan Uninitialized Oddball nesnesinin etrafından dolanma yöntemi tartışılacaktır. Dikkate değer bir nokta, bu yöntemin şu anda V8'in en son sürümünde hala kullanılabilir olması ve henüz düzeltilmemiş olmasıdır.
Bu yöntem belli bir evrenselliğe sahiptir:
Issue1216437(CVE-2021-30551)'de içsel başlatılmamış oddball'ı sızdıran poc ilk kez sunulmuştur.
Issue1314616(CVE-2022-1486)'de UninitializedOddball doğrudan sızdırılmıştır.
Issue1352549(NoCVE)'in etkisi dikkate değerdir.
Bu durumlar, PatchGap etkisi altında olabilecek yazılımları yeniden gözden geçirmenin gerekli olduğunu göstermektedir. Şu anda Skype bu açığı henüz kapatmamıştır.
V8'deki çoğu yerel nesne, v8/src/roots/roots.h dosyasında tanımlanmıştır ve bellekte bitişik olarak yer alır. Bu sızdırılmaması gereken yerel nesneler JavaScript'e sızdırıldığında, sandbox içinde rastgele kod yürütme gerçekleştirilebilir.
Bu yöntemi doğrulamak için, V8'in yerel fonksiyonunu değiştirebiliriz ve Uninitialized Oddball'ı JavaScript'e sızdırabiliriz. Özellikle, %TheHole() fonksiyonundaki isolate'e göre ofseti değiştirerek Uninitialized Oddball'ı döndürmesini sağlayabiliriz.
Bu yöntemi kullanarak HardenType korumasını atlayabilir ve nispeten rastgele okuma/yazma işlemleri gerçekleştirebilirsiniz. Optimize edilmiş JavaScript kodunu analiz ettiğimizde, obj.prop kontrol edilirken obj.prop için anahtar olan Value'nun doğrulanmadığını, doğrudan JavaScript semantiğine göre kaydırma hesaplandığını ve dizi değerinin alındığını görebiliriz; bu da tür karışıklığına neden olmaktadır.
uninitialized_oddball'ın V8 belleğinde daha önce sıralanması ve daha ilkel olması nedeniyle, TheHole nesnesinden daha kolay bir şekilde taklit edilebilir. TheHole ile ilgili düzeltmeler yapıldıktan sonra, bu yöntem geçiştirilmek için tercih edilen seçenek haline geldi.
Optimize edilmiş fonksiyonun dizi elemanlarını dönerken, doğrudan hesaplama yaparak değer döndürmekten kaçınmak için dizi haritasının kontrolünü eklemeyi öneririm.
Dikkate değer olan, Skype'ın bu açığı henüz kapatmamış olmasıdır. x86 sistemlerinde adres sıkıştırması olmadığı için, rastgele okuma/yazma işlemi, tüm süreç açısından görece bir durumdadır. Skype ASLR'yi açmış olsa da, dosyanın büyük olması nedeniyle, hacker'ların sabit adreslere okuma/yazma yapması, Skype dosya içeriğine erişme olasılığını oldukça artırmaktadır. Bu, tam bir istismar zincirini tamamlamayı önemli ölçüde kolaylaştırmaktadır.
Bu PatchGap sadece Issue1352549'u kapsamakla kalmıyor, aynı zamanda yeni bir bypass yönteminin açıklanması, Issue1314616 ve Issue1216437 gibi açıkların istismar zorluğunu büyük ölçüde azalttı. Hackerlar, daha önce herhangi bir sızdırılan uninitialized_oddball açığını tam olarak istismar etmek için neredeyse ek bir araştırma yapmalarına gerek kalmıyor.
V8'de ayrıca başka birçok Sentinel değeri bulunmaktadır ve bunlar da benzer güvenlik açıklarına sahip olabilir. Fuzz testlerinde %TheHole/uninitialized_Oddball gibi Sentinel değerlerini değişken olarak dikkate almanız önerilir, böylece diğer potansiyel istismarları keşfedebilirsiniz.
Bu tür sorunların resmi olarak güvenlik sorunu olarak görülüp görülmemesi önemli değil, bunlar hackerların tam bir istismar gerçekleştirme süresini büyük ölçüde kısaltacaktır. Chrome gibi yazılımların güvenliğini artırmak için bu alana sürekli dikkat etmemiz ve araştırmalar yapmamız gerekiyor.