Chrome V8 motorundaki Sentinel Value sızıntısının neden olduğu güvenlik risklerini araştırma
Ön söz
Sentinel değeri, algoritmalarda genellikle döngü veya özyinelemeli algoritmaların sonlanma koşulu olarak kullanılan özel bir değerdir. Chrome kaynak kodunda bu özel değer yaygın olarak kullanılmaktadır. Yakın zamanda bazı araştırmacılar, TheHole nesnesinin sızdırılması yoluyla CVE-2021-38003 ve CVE-2022-1364 için sandbox içinde rastgele kod çalıştırma gerçekleştirdi. Google ekibi daha sonra bu iki açığı hızla düzeltti.
Ancak, TheHole nesnesi dışında, V8'de JavaScript'e sızdırılmaması gereken diğer yerel nesneler de bulunmaktadır. Bu makale, Uninitialized Oddball nesnesine odaklanacak ve V8'in HardenProtect mekanizmasını atlatmanın yollarını tanıtacaktır. Dikkat edilmesi gereken bir nokta, bu atlatma yönteminin şu anda en son V8 sürümünde hala geçerli olması ve henüz düzeltilmemiş olmasıdır.
V8'de Sentinel Değeri
V8'in çoğu yerel nesnesi v8/src/roots/roots.h dosyasında tanımlanmıştır, bu nesneler bellekte birbirinin ardına sıralanmıştır. Eğer bu JavaScript'e sızdırılmaması gereken yerel nesneler sızdırılırsa, sandbox içinde herhangi bir kodun çalıştırılmasına neden olabilir.
Bunu doğrulamak için, V8'in yerel fonksiyonunu değiştirerek Uninitialized Oddball'ı JavaScript'e sızdırabiliriz. Spesifik olarak, %TheHole() fonksiyonundaki isolate'a göre olan kaydırmayı değiştirerek Uninitialized Oddball'ı döndürebiliriz.
HardenType korumasını aşma
Uninitialized Oddball nesnelerini kullanarak nispeten rastgele okuma/yazma işlemleri gerçekleştirilebilir. Optimize edilmiş JavaScript kodunda, read fonksiyonu obj.prop anahtarındaki değeri kontrol etmez, bunun yerine doğrudan JavaScript anlamına göre ofset hesaplar ve dizinin değerini alır. Bu, hesaplama sırasında tür karmaşasına yol açarak rastgele okuma yapılmasına neden olur.
Herhangi bir yazma işlemi için, Issue1352549'daki yapı yöntemini inceleyebilirsiniz. Önerilen düzeltme çözümü, optimize edilmiş fonksiyonun dizi elemanlarını döndürürken, dizinin haritasını kontrol etmeyi eklemektir; böylece doğrudan kaydırma ile dizi değerlerini hesaplamaktan kaçınılır.
PatchGap uyarısı
Issue1352549'u analiz ettikten sonra, bazı yazılımların PatchGap sorunu yaşayabileceğini fark ettik. Dikkate değer bir nokta, şu ana kadar Skype'ın bu açığı henüz düzeltmemiş olduğudur. x86 ortamında, rasgele okuma/yazma uygulaması farklılık gösterecektir, çünkü adres sıkıştırması yoktur ve doğrudan tüm süreçle ilgili olarak işlem yapabilir.
Bu seferki PatchGap sorunu yalnızca Issue1352549 ile ilgili değil, yeni bir geçiş yönteminin açıklanması, Issue1314616 ve Issue1216437 gibi açıkların istismarını büyük ölçüde kolaylaştırdı. Hackerlar, daha önceki uninitialized_oddball açığına yönelik tam istismarları gerçekleştirmek için neredeyse hiç araştırma maliyeti olmadan hareket edebilirler.
Özet
Bu makale, uninitialized_Oddball'ın Sentinel value içindeki sızıntısı yoluyla rastgele okuma ilkesinin nasıl gerçekleştirileceğini kısaca tartışmaktadır. V8'de benzer güvenlik sorunlarına yol açabilecek birçok başka Sentinel value da bulunmaktadır. Bu bize şu dersleri veriyor:
Diğer uninitialized_Oddball sızıntıları da V8'in uzaktan kod yürütmesini kolayca sağlayabilir mi?
Bu tür sorunların resmi bir güvenlik sorunu olarak kabul edilip edilmeyeceği konusunda hala tartışmalar var.
%TheHole/uninitialized_Oddball gibi Sentinel değerlerini fuzzer içinde değişken olarak eklemeyi düşünün, böylece diğer ilkelere yönelik istismarları keşfedebilirsiniz.
Bu tür sorunların resmi olarak güvenlik sorunu olarak görülüp görülmemesi önemli değil, bu sorunlar hackerların tam fayda sağlama süresini önemli ölçüde kısaltır.
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.
25 Likes
Reward
25
6
Share
Comment
0/400
FUD_Vaccinated
· 07-26 03:20
Yine siyah Google, bu delik çok sık oldu 8
View OriginalReply0
MetaverseLandlord
· 07-24 11:22
Aman Tanrım, başkalarının tarayıcı açıkları bu kadar gelişmiş mi?
Chrome V8 motoru Sentinel Değeri sızıntısı araştırması ve güvenlik risk analizi
Chrome V8 motorundaki Sentinel Value sızıntısının neden olduğu güvenlik risklerini araştırma
Ön söz
Sentinel değeri, algoritmalarda genellikle döngü veya özyinelemeli algoritmaların sonlanma koşulu olarak kullanılan özel bir değerdir. Chrome kaynak kodunda bu özel değer yaygın olarak kullanılmaktadır. Yakın zamanda bazı araştırmacılar, TheHole nesnesinin sızdırılması yoluyla CVE-2021-38003 ve CVE-2022-1364 için sandbox içinde rastgele kod çalıştırma gerçekleştirdi. Google ekibi daha sonra bu iki açığı hızla düzeltti.
Ancak, TheHole nesnesi dışında, V8'de JavaScript'e sızdırılmaması gereken diğer yerel nesneler de bulunmaktadır. Bu makale, Uninitialized Oddball nesnesine odaklanacak ve V8'in HardenProtect mekanizmasını atlatmanın yollarını tanıtacaktır. Dikkat edilmesi gereken bir nokta, bu atlatma yönteminin şu anda en son V8 sürümünde hala geçerli olması ve henüz düzeltilmemiş olmasıdır.
V8'de Sentinel Değeri
V8'in çoğu yerel nesnesi v8/src/roots/roots.h dosyasında tanımlanmıştır, bu nesneler bellekte birbirinin ardına sıralanmıştır. Eğer bu JavaScript'e sızdırılmaması gereken yerel nesneler sızdırılırsa, sandbox içinde herhangi bir kodun çalıştırılmasına neden olabilir.
Bunu doğrulamak için, V8'in yerel fonksiyonunu değiştirerek Uninitialized Oddball'ı JavaScript'e sızdırabiliriz. Spesifik olarak, %TheHole() fonksiyonundaki isolate'a göre olan kaydırmayı değiştirerek Uninitialized Oddball'ı döndürebiliriz.
HardenType korumasını aşma
Uninitialized Oddball nesnelerini kullanarak nispeten rastgele okuma/yazma işlemleri gerçekleştirilebilir. Optimize edilmiş JavaScript kodunda, read fonksiyonu obj.prop anahtarındaki değeri kontrol etmez, bunun yerine doğrudan JavaScript anlamına göre ofset hesaplar ve dizinin değerini alır. Bu, hesaplama sırasında tür karmaşasına yol açarak rastgele okuma yapılmasına neden olur.
Herhangi bir yazma işlemi için, Issue1352549'daki yapı yöntemini inceleyebilirsiniz. Önerilen düzeltme çözümü, optimize edilmiş fonksiyonun dizi elemanlarını döndürürken, dizinin haritasını kontrol etmeyi eklemektir; böylece doğrudan kaydırma ile dizi değerlerini hesaplamaktan kaçınılır.
PatchGap uyarısı
Issue1352549'u analiz ettikten sonra, bazı yazılımların PatchGap sorunu yaşayabileceğini fark ettik. Dikkate değer bir nokta, şu ana kadar Skype'ın bu açığı henüz düzeltmemiş olduğudur. x86 ortamında, rasgele okuma/yazma uygulaması farklılık gösterecektir, çünkü adres sıkıştırması yoktur ve doğrudan tüm süreçle ilgili olarak işlem yapabilir.
Bu seferki PatchGap sorunu yalnızca Issue1352549 ile ilgili değil, yeni bir geçiş yönteminin açıklanması, Issue1314616 ve Issue1216437 gibi açıkların istismarını büyük ölçüde kolaylaştırdı. Hackerlar, daha önceki uninitialized_oddball açığına yönelik tam istismarları gerçekleştirmek için neredeyse hiç araştırma maliyeti olmadan hareket edebilirler.
Özet
Bu makale, uninitialized_Oddball'ın Sentinel value içindeki sızıntısı yoluyla rastgele okuma ilkesinin nasıl gerçekleştirileceğini kısaca tartışmaktadır. V8'de benzer güvenlik sorunlarına yol açabilecek birçok başka Sentinel value da bulunmaktadır. Bu bize şu dersleri veriyor:
Diğer uninitialized_Oddball sızıntıları da V8'in uzaktan kod yürütmesini kolayca sağlayabilir mi?
Bu tür sorunların resmi bir güvenlik sorunu olarak kabul edilip edilmeyeceği konusunda hala tartışmalar var.
%TheHole/uninitialized_Oddball gibi Sentinel değerlerini fuzzer içinde değişken olarak eklemeyi düşünün, böylece diğer ilkelere yönelik istismarları keşfedebilirsiniz.
Bu tür sorunların resmi olarak güvenlik sorunu olarak görülüp görülmemesi önemli değil, bu sorunlar hackerların tam fayda sağlama süresini önemli ölçüde kısaltır.