Chrome v8 HardenProtect atlatma: Sentinel Value kullanarak rastgele kod yürütme

Sentinel Value ile Chrome v8 HardenProtect oyalama

Sentinel değeri, algoritmalardaki özel bir değerdir ve genellikle döngü veya özyinelemeli algoritmaların sonlandırma koşulu olarak kullanılır. Chrome kaynak kodunda bu tür özel değerler yaygın olarak kullanılmaktadır. Son zamanlarda bazı Sentinel değeri nesnelerinin sızdırılması yoluyla Chrome sandbox'ında rastgele kod yürütmenin sağlanabileceğine dair araştırmalar yapılmıştır.

Bu makale, Uninitialized Oddball nesnelerini kullanarak Chrome v8 HardenProtect mekanizmasını aşma yöntemini araştıracaktır. Bu yöntem, ilk olarak Project0 üyeleri tarafından Issue1352549'da önerilmiştir ve şu anda V8'in en son sürümünde de kullanılabilir, Google henüz buna yönelik bir düzeltme yapmamıştır.

Dikkate değer olan, bu yöntemin güçlü bir evrenselliğe sahip olduğudur:

  1. Issue1216437(CVE-2021-30551)'de, internal uninitialized oddball'ın sızdırılması için ilk kez bir poc verilmiştir.

  2. Issue1314616(CVE-2022-1486)'de UninitializedOddball nesnesi de doğrudan sızdırılmıştır.

  3. Issue1352549('de CVE)'in gösterilmediği bu yöntem için tam bir istismar zinciri sunulmaktadır.

Bu vakalar, bu geçiş yönteminin birden fazla yazılım sürümünü etkileyebileceğini göstermektedir. Şu ana kadar, Skype gibi yazılımlar bu güvenlik açığını henüz düzeltmemiştir.

V8'de Sentinel Değeri

V8 kaynak kodunda birçok yerel nesne tanımlanmıştır, bunlar arasında çeşitli Sentinel değeri de bulunmaktadır. Bu nesneler bellekte yan yana sıralanır. Eğer sızdırılmaması gereken yerel nesneler JavaScript'e açılırsa, sandbox içinde rastgele kod yürütme gerçekleştirmek mümkün olabilir.

Bu yöntemi doğrulamak için, V8'in %TheHole() fonksiyonunu değiştirerek Uninitialized Oddball nesnesini döndürebiliriz.

Özel Keşif, Sentinel Value Sızıntısı ile Chrome v8 HardenProtect'i Aşmak

HardenType'ı Atlat

Aşağıdaki kod, sızdırılmış Uninitialized Oddball nesnesini kullanarak rastgele okumayı nasıl gerçekleştireceğinizi göstermektedir:

javascript function read(obj, idx) { return obj[idx]; }

let uninitialized_oddball = %GetUninitialized(); let ab = new ArrayBuffer(8); let f64 = new Float64Array(ab); let u32 = new Uint32Array(ab);

for (let i = 0; i < 0x10000; i++) { read({prop: 1.1}, 0);
}

%OptimizeFunctionOnNextCall(read);

let val = read({prop: uninitialized_oddball}, 0x1234); f64[0] = val; console.log(u32[0].toString(16), u32[1].toString(16));

Optimize edilmiş read fonksiyonunun assembler kodu, fonksiyonun sadece obj'nin prop özelliğini kontrol ettiğini, obj.prop'un değerini kontrol etmeden doğrudan ofset hesapladığını, bu durumun tür karışıklığına neden olduğunu ve herhangi bir okuma gerçekleştirdiğini gösteriyor.

Özel İnceleme: Sentinel Value ile Chrome v8 HardenProtect'i Aşma

Önerilen düzeltme: Optimize edilmiş fonksiyon dizi elemanlarını döndürdüğünde, doğrudan kaydırma hesaplamaktan kaçınmak için dizi haritasını kontrol etmek.

Özel Açıklama Sentinel Value ile Chrome v8 HardenProtect'i Aşma

PatchGap uyarısı

Bu sarmalayıcı yöntem yalnızca tarihsel açıkları etkilemekle kalmaz, aynı zamanda mevcut yazılımları da etkileyebilir. Örneğin, Skype şu anda bu sorunu henüz çözmedi. x86 platformunda, adres sıkıştırmasının eksikliği nedeniyle, rastgele okuma/yazma alanı daha büyüktür.

Bu sefer PatchGap yalnızca Issue1352549 ile ilgili değil, aynı zamanda Issue1314616 ve Issue1216437 gibi benzerlerinin istismarını büyük ölçüde kolaylaştırdı. Üreticilerin ilgili güvenlik açıklarını kapsamlı bir şekilde kontrol etmeleri önerilir.

Özel ifşa Sentinel Value ile Chrome v8 HardenProtect'i atlatma

Özet

Bu makalede, Uninitialized Oddball kullanarak V8'de herhangi bir okuma gerçekleştirme yöntemini tanıtmaktadır. V8'de başka çeşitli Sentinel değerleri de bulunmaktadır ve benzer güvenlik açıkları olabilir. Daha fazla araştırma yapılması önerilmektedir:

  1. Diğer Sentinel değerinin sızdırılması V8 RCE'yi gerçekleştirebilir mi?
  2. Sentinel değerini bir değişken olarak Fuzzer'a ekleyin, yeni sömürü ilkelere ulaşın.
  3. Bu tür sorunların getirebileceği güvenlik risklerini ciddiye almak.

Bu sorunun resmi olarak bir güvenlik açığı olarak listelenip listelenmediğine bakılmaksızın, hackerların tam istismar süresini önemli ölçüde kısaltabilir. Umarım bu makale ilgili tarafların dikkatini çeker.

Özel Açıklama: Chrome v8 HardenProtect'i geçmek için Sentinel Value sızıntısı

Özel Açıklama: Chrome v8 HardenProtect'i Aşmak için Sentinel Value Sızıntısı

Özel Açıklama: Chrome v8 HardenProtect'i Aşmak için Sentinel Value Sızıntısını Kullanma

Özel ifşa: Sentinel Value ile Chrome v8 HardenProtect'i aşma

Özel ifşa ile Sentinel Value'yi kullanarak Chrome v8 HardenProtect'i aşma

SENC-4.71%
View Original
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.
  • Reward
  • 6
  • Repost
  • Share
Comment
0/400
WinterWarmthCatvip
· 12h ago
Güçlü detaylı gönderi kesinlikle beğenilmeli
View OriginalReply0
StakeOrRegretvip
· 08-08 15:35
Yine tarayıcıda bir güvenlik açığı bulundu.
View OriginalReply0
LayerZeroHerovip
· 08-07 02:24
Biraz havalı bir açık
View OriginalReply0
Web3ProductManagervip
· 08-07 02:23
Burada süper riskli bir uç durum var
View OriginalReply0
GhostWalletSleuthvip
· 08-07 02:11
Açıklar gerçekten önlenemez.
View OriginalReply0
UnluckyLemurvip
· 08-07 02:04
Bu açık büyük bir su birikintisi var.
View OriginalReply0
Trade Crypto Anywhere Anytime
qrCode
Scan to download Gate app
Community
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)