Chrome V8 HardenProtect'ı atlatmak için Sentinel Değerinin sızdırılmasıyla ilgili içgörü
Ön Söz
Sentinel değeri, algoritmalarda genellikle döngü veya özyinelemeli algoritmalarda durdurma koşulu olarak kullanılan özel bir değerdir. Chrome kaynak kodunda bu tür değerler yaygın olarak kullanılmaktadır. Son zamanlarda güvenlik araştırmacıları, TheHole nesnesinin sızdırılması yoluyla Chrome kumanda alanında rastgele kod yürütme gerçekleştirilebileceğini keşfettiler. Google ekibi ardından bu iki sıfırdan keşfedilen açığı hızlı bir şekilde düzeltti.
Ancak, V8'de JavaScript'e sızdırılmaması gereken başka yerel nesneler de bulunmaktadır. Bu makale, yeni bir nesne olan: Uninitialized Oddball'ı tartışacaktır. Bu geçiş yöntemi ilk olarak Project0 üyesinin gönderdiği bir sorunla ortaya çıkmıştı ve şu anda V8'in en son versiyonunda kullanılmaya devam etmektedir.
Dikkate değer olan, bu yöntemin oldukça güçlü bir genel kullanıma sahip olduğudur:
CVE-2021-30551'deki ilk POC, içsel başlatılmamış garip bir nesnenin sızdırılmasıdır.
CVE-2022-1486'nın POC'si ayrıca UninitializedOddball'ı doğrudan ifşa etti.
Atanmamış bir CVE'nin Sorunu da bu yöntemi kullandı.
Bu örnekler, sorunun önemini yeterince açıklamaktadır ve etkilenebilecek yazılımları yeniden gözden geçirmeye değer.
V8'de Sentinel Değeri
V8'in çoğu yerel nesnesi v8/src/roots/roots.h dosyasında tanımlanmıştır ve bellek içinde ardışık olarak yer almaktadır. Bu sızdırılmaması gereken yerel nesneler JavaScript'e sızdığında, sandbox içinde herhangi bir kodun çalıştırılmasına neden olabilir.
V8'in yerel fonksiyonlarını değiştirerek Uninitialized Oddball'ı JavaScript'e sızdırabiliriz. Bunun için %TheHole() fonksiyonundaki isolate ile ilgili kaydırmayı değiştirerek Uninitialized Oddball'ı döndürmesini sağlarız.
HardenType'ı Atlama
Uninitialized Oddball kullanarak göreceli olarak rastgele okuma/yazma gerçekleştirilebilir. Anahtar, optimize edilmiş read fonksiyonunun yalnızca obj'nin prop özelliğini kontrol etmesidir, ancak obj.prop anahtarı olarak value'yu kontrol etmemesidir. Bu, hesaplama sırasında tür karışıklığına neden olarak rastgele okuma gerçekleştirilmesini sağlar.
x86 mimarisinde, adres sıkıştırmasının olmaması nedeniyle, rastgele okuma ve yazma işlemleri tüm süreçle ilişkilidir. Adres sıkıştırmasının sağladığı kolaylıklar eksik olsa da, bazı büyük yazılım dosyalarının boyutları nedeniyle, hedef içeriğe okuma ve yazma işlemleri hala yüksek bir olasılıkla gerçekleşebilir.
PatchGap Uyarısı
Bu PatchGap sadece Issue1352549'u değil, aynı zamanda Issue1314616 ve Issue1216437 gibi birçok güvenlik açığını da kapsamaktadır. Yeni bir geçiş yöntemi kamuya açıklandıktan sonra, bu güvenlik açıklarının istismar edilmesi önemli ölçüde kolaylaştı. Hackerlar neredeyse ek bir araştırmaya ihtiyaç duymadan tam istismar zincirini tamamlayabilir.
Özet
V8'de benzer sorunlara sahip olabilecek birçok başka Sentinel değeri de var. Bu bize bazı ipuçları veriyor:
Diğer uninitialized_Oddball sızıntıları V8 RCE'yi de gerçekleştirebilir mi?
Bu tür sorunlar resmi olarak güvenlik sorunu olarak mı değerlendirilmelidir?
Fuzzer testlerinde Sentinel değerinin bir değişken olarak eklenmesi gerekir mi?
Her halükarda, bu tür sorunlar, hackerların tam istismar süresini önemli ölçüde kısaltacaktır, bu da bizim için büyük bir önem taşıyor.
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.
Chrome V8 motorundaki yeni güvenlik açığı: Uninitialized Oddball sızıntısı ile kum havuzunun aşılması
Chrome V8 HardenProtect'ı atlatmak için Sentinel Değerinin sızdırılmasıyla ilgili içgörü
Ön Söz
Sentinel değeri, algoritmalarda genellikle döngü veya özyinelemeli algoritmalarda durdurma koşulu olarak kullanılan özel bir değerdir. Chrome kaynak kodunda bu tür değerler yaygın olarak kullanılmaktadır. Son zamanlarda güvenlik araştırmacıları, TheHole nesnesinin sızdırılması yoluyla Chrome kumanda alanında rastgele kod yürütme gerçekleştirilebileceğini keşfettiler. Google ekibi ardından bu iki sıfırdan keşfedilen açığı hızlı bir şekilde düzeltti.
Ancak, V8'de JavaScript'e sızdırılmaması gereken başka yerel nesneler de bulunmaktadır. Bu makale, yeni bir nesne olan: Uninitialized Oddball'ı tartışacaktır. Bu geçiş yöntemi ilk olarak Project0 üyesinin gönderdiği bir sorunla ortaya çıkmıştı ve şu anda V8'in en son versiyonunda kullanılmaya devam etmektedir.
Dikkate değer olan, bu yöntemin oldukça güçlü bir genel kullanıma sahip olduğudur:
CVE-2021-30551'deki ilk POC, içsel başlatılmamış garip bir nesnenin sızdırılmasıdır.
CVE-2022-1486'nın POC'si ayrıca UninitializedOddball'ı doğrudan ifşa etti.
Atanmamış bir CVE'nin Sorunu da bu yöntemi kullandı.
Bu örnekler, sorunun önemini yeterince açıklamaktadır ve etkilenebilecek yazılımları yeniden gözden geçirmeye değer.
V8'de Sentinel Değeri
V8'in çoğu yerel nesnesi v8/src/roots/roots.h dosyasında tanımlanmıştır ve bellek içinde ardışık olarak yer almaktadır. Bu sızdırılmaması gereken yerel nesneler JavaScript'e sızdığında, sandbox içinde herhangi bir kodun çalıştırılmasına neden olabilir.
V8'in yerel fonksiyonlarını değiştirerek Uninitialized Oddball'ı JavaScript'e sızdırabiliriz. Bunun için %TheHole() fonksiyonundaki isolate ile ilgili kaydırmayı değiştirerek Uninitialized Oddball'ı döndürmesini sağlarız.
HardenType'ı Atlama
Uninitialized Oddball kullanarak göreceli olarak rastgele okuma/yazma gerçekleştirilebilir. Anahtar, optimize edilmiş read fonksiyonunun yalnızca obj'nin prop özelliğini kontrol etmesidir, ancak obj.prop anahtarı olarak value'yu kontrol etmemesidir. Bu, hesaplama sırasında tür karışıklığına neden olarak rastgele okuma gerçekleştirilmesini sağlar.
x86 mimarisinde, adres sıkıştırmasının olmaması nedeniyle, rastgele okuma ve yazma işlemleri tüm süreçle ilişkilidir. Adres sıkıştırmasının sağladığı kolaylıklar eksik olsa da, bazı büyük yazılım dosyalarının boyutları nedeniyle, hedef içeriğe okuma ve yazma işlemleri hala yüksek bir olasılıkla gerçekleşebilir.
PatchGap Uyarısı
Bu PatchGap sadece Issue1352549'u değil, aynı zamanda Issue1314616 ve Issue1216437 gibi birçok güvenlik açığını da kapsamaktadır. Yeni bir geçiş yöntemi kamuya açıklandıktan sonra, bu güvenlik açıklarının istismar edilmesi önemli ölçüde kolaylaştı. Hackerlar neredeyse ek bir araştırmaya ihtiyaç duymadan tam istismar zincirini tamamlayabilir.
Özet
V8'de benzer sorunlara sahip olabilecek birçok başka Sentinel değeri de var. Bu bize bazı ipuçları veriyor:
Diğer uninitialized_Oddball sızıntıları V8 RCE'yi de gerçekleştirebilir mi?
Bu tür sorunlar resmi olarak güvenlik sorunu olarak mı değerlendirilmelidir?
Fuzzer testlerinde Sentinel değerinin bir değişken olarak eklenmesi gerekir mi?
Her halükarda, bu tür sorunlar, hackerların tam istismar süresini önemli ölçüde kısaltacaktır, bu da bizim için büyük bir önem taşıyor.