Chrome V8 Motorunda Sentinel Değeri Açığı Kullanım Analizi
Sentinel value, algoritmadaki özel bir değerdir ve genellikle döngü veya özyinelemeli algoritmalarda sonlandırma koşulu olarak kullanılır. Chrome kaynak kodunda çok sayıda Sentinel value bulunmaktadır. Daha önce yapılan bir araştırma, TheHole nesnesinin sızdırılması yoluyla Chrome kumanda kutusundaki herhangi bir kodun çalıştırılabileceğini göstermiştir. Google ekibi daha sonra ilgili güvenlik açıklarını düzeltmiştir.
Ancak, V8'de JS'ye sızdırılmaması gereken diğer yerel nesneler de bulunmaktadır. Bu makalede, sızıntısı, en son V8 sürümünde hala kullanılabilen bir kum havuzu atlatma yöntemine yol açan Uninitialized Oddball nesnesi tartışılmaktadır.
Dikkate değer olan, bu yönteminin belirli bir evrenselliğe sahip olmasıdır:
CVE-2021-30551 ilk PoC, internal uninitialized oddball'ı sızdırmaktır.
CVE-2022-1486'nın PoC'sinde UninitializedOddball doğrudan sızdırılmıştır.
Issue1352549 ( tahsis edilmemiş CVE)'in kullanım yöntemleri ayrıntılı olarak verilmiştir.
Bu örnekler, Uninitialized Oddball sızıntısını kullanarak saldırı olasılığının dikkate alınması gerektiğini göstermektedir.
V8'de Gözetmen Değeri
V8'in çoğu yerel nesnesi v8/src/roots/roots.h dosyasında tanımlanmıştır ve bellekte yan yana sıralanmıştır. Bu sızdırılmaması gereken yerel nesneler JavaScript'e sızdırıldığında, sandık içindeki herhangi bir kodun çalıştırılması mümkün hale gelebilir.
Bunu doğrulamak için, V8'in yerel fonksiyonu %TheHole()'in dönüş değerini Uninitialized Oddball olarak değiştirebilirsiniz.
HardenType korumasını aşma
Issue1352549'da tam bir geçiş kodu verilmiştir. Basitleştirilmiş ana mantık aşağıdaki gibidir:
javascript
function read(obj, idx) {
return obj[idx];
}
let uninitialized = %TheHole();
let arr = [1.1];
let res = read(uninitialized, 0x12345);
%DebugPrint(res);
Bu kod, en son V8 11.0.0 sürümünde hala göreli olarak herhangi bir okuma gerçekleştirebilir.
Optimize edilmiş read fonksiyonunun derleme kodunu analiz ettiğimizde, sadece obj'nin prop özelliğinin doğru olup olmadığını kontrol ettiğini, ancak obj.prop'un anahtar olarak değerini kontrol etmediğini görebiliriz. Bu, hesaplama sırasında tür karışıklığına neden olarak rastgele okuma gerçekleştirmektedir.
Uninitialized_oddball geçirildiğinde, belirli bir talimattan başlayarak obj üzerinden hesaplama yapılır ve nihayet vmovsd xmm0,[r9+r11*8+0x7] talimatında rastgele okuma tamamlanır, veriler xmm0 kaydedicisinde saklanır.
Önerilen düzeltme yöntemi, optimize edilmiş fonksiyonun dizi elemanlarını döndürdüğünde, dizinin haritasını kontrol etmeyi eklemektir; böylece doğrudan kaydırma hesaplayarak dizi değerlerini döndürmekten kaçınılır.
PatchGap Uyarısı
PatchGap olabilecek yazılımları incelerken, Skype'ın bu açığı henüz düzeltmediği tespit edildi. x86 mimarisinde, adres sıkıştırması bulunmadığı için, rastgele okuma ve yazma doğrudan tüm süreçle ilişkilidir.
Skype ASLR'yi açmış olsa da, dosyası oldukça büyük olduğundan, doğrudan 4GB bellekte yer aldığında, bir saldırganın sabit bir adrese okuma/yazma yapması, Skype dosya içeriğine ulaşma olasılığını artırır. PE ayrıştırma gibi geleneksel yöntemlerle birleştirildiğinde, tam bir zafiyet istismar zinciri oluşturulabilir.
Bu sefer PatchGap sadece Issue1352549 ile ilgili değil, aynı zamanda Issue1314616 ve Issue1216437 gibi benzerlerinin istismar zorluğunu da büyük ölçüde düşürdü. Hackerlar, daha önceki herhangi bir sızdırılmış uninitialized_oddball açığının tam istismarını gerçekleştirmek için neredeyse ek bir araştırmaya ihtiyaç duymuyor.
Özet
Bu makale, Sentinel value içindeki uninitialized_Oddball'ın sızdırılması yoluyla rastgele okuma ilkesinin nasıl uygulanacağını açıklamaktadır. V8'de başka Sentinel value'lar da bulunmaktadır ve bu benzer sorunlara yol açabilir. Bu bize aşağıdaki dersleri vermektedir:
Diğer uninitialized_Oddball sızmalarının da V8'in RCE'sini kolayca gerçekleştirebilir mi?
Bu tür sorunların resmi olarak bir güvenlik sorunu olarak ele alınıp alınmaması hala tartışmalıdır.
Fuzzer'da %TheHole/uninitialized_Oddball gibi Sentinel değerlerini değişken olarak eklemeyi düşünmek, diğer sömürücü ilkelere ulaşmak için faydalı olabilir.
Herhangi bir şekilde, bu tür sorunlar, hackerların tam istismar süresini önemli ölçüde kısaltacaktı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.
9 Likes
Reward
9
5
Repost
Share
Comment
0/400
CoffeeNFTrader
· 07-22 08:13
Bir başka güvenlik açığı, bir grup insan panik içinde.
View OriginalReply0
Hash_Bandit
· 07-21 21:23
js motoru madenciliği gerçek oldu...sömürü zorluğu maksimuma ulaştı
View OriginalReply0
ConsensusDissenter
· 07-20 00:25
Bir başka kod kara deliği ortaya çıktı, çok korkutucu.
View OriginalReply0
Blockblind
· 07-20 00:19
v8 de bu kadar büyük bir açığa mı sahip? Gülmekten ölüyorum.
View OriginalReply0
BlockchainTalker
· 07-20 00:12
aslında V8'in bununla hala zorlandığına şaşırdım... not: benim çalışma zamanı izolasyonum nerede fam?
Chrome V8 motoru Sentinel Value zafiyeti istismar analizi: Ek araştırma gerektirmeden RCE'yi gerçekleştirmek
Chrome V8 Motorunda Sentinel Değeri Açığı Kullanım Analizi
Sentinel value, algoritmadaki özel bir değerdir ve genellikle döngü veya özyinelemeli algoritmalarda sonlandırma koşulu olarak kullanılır. Chrome kaynak kodunda çok sayıda Sentinel value bulunmaktadır. Daha önce yapılan bir araştırma, TheHole nesnesinin sızdırılması yoluyla Chrome kumanda kutusundaki herhangi bir kodun çalıştırılabileceğini göstermiştir. Google ekibi daha sonra ilgili güvenlik açıklarını düzeltmiştir.
Ancak, V8'de JS'ye sızdırılmaması gereken diğer yerel nesneler de bulunmaktadır. Bu makalede, sızıntısı, en son V8 sürümünde hala kullanılabilen bir kum havuzu atlatma yöntemine yol açan Uninitialized Oddball nesnesi tartışılmaktadır.
Dikkate değer olan, bu yönteminin belirli bir evrenselliğe sahip olmasıdır:
CVE-2021-30551 ilk PoC, internal uninitialized oddball'ı sızdırmaktır.
CVE-2022-1486'nın PoC'sinde UninitializedOddball doğrudan sızdırılmıştır.
Issue1352549 ( tahsis edilmemiş CVE)'in kullanım yöntemleri ayrıntılı olarak verilmiştir.
Bu örnekler, Uninitialized Oddball sızıntısını kullanarak saldırı olasılığının dikkate alınması gerektiğini göstermektedir.
V8'de Gözetmen Değeri
V8'in çoğu yerel nesnesi v8/src/roots/roots.h dosyasında tanımlanmıştır ve bellekte yan yana sıralanmıştır. Bu sızdırılmaması gereken yerel nesneler JavaScript'e sızdırıldığında, sandık içindeki herhangi bir kodun çalıştırılması mümkün hale gelebilir.
Bunu doğrulamak için, V8'in yerel fonksiyonu %TheHole()'in dönüş değerini Uninitialized Oddball olarak değiştirebilirsiniz.
HardenType korumasını aşma
Issue1352549'da tam bir geçiş kodu verilmiştir. Basitleştirilmiş ana mantık aşağıdaki gibidir:
javascript function read(obj, idx) { return obj[idx]; }
let uninitialized = %TheHole(); let arr = [1.1]; let res = read(uninitialized, 0x12345); %DebugPrint(res);
Bu kod, en son V8 11.0.0 sürümünde hala göreli olarak herhangi bir okuma gerçekleştirebilir.
Optimize edilmiş read fonksiyonunun derleme kodunu analiz ettiğimizde, sadece obj'nin prop özelliğinin doğru olup olmadığını kontrol ettiğini, ancak obj.prop'un anahtar olarak değerini kontrol etmediğini görebiliriz. Bu, hesaplama sırasında tür karışıklığına neden olarak rastgele okuma gerçekleştirmektedir.
Uninitialized_oddball geçirildiğinde, belirli bir talimattan başlayarak obj üzerinden hesaplama yapılır ve nihayet vmovsd xmm0,[r9+r11*8+0x7] talimatında rastgele okuma tamamlanır, veriler xmm0 kaydedicisinde saklanır.
Önerilen düzeltme yöntemi, optimize edilmiş fonksiyonun dizi elemanlarını döndürdüğünde, dizinin haritasını kontrol etmeyi eklemektir; böylece doğrudan kaydırma hesaplayarak dizi değerlerini döndürmekten kaçınılır.
PatchGap Uyarısı
PatchGap olabilecek yazılımları incelerken, Skype'ın bu açığı henüz düzeltmediği tespit edildi. x86 mimarisinde, adres sıkıştırması bulunmadığı için, rastgele okuma ve yazma doğrudan tüm süreçle ilişkilidir.
Skype ASLR'yi açmış olsa da, dosyası oldukça büyük olduğundan, doğrudan 4GB bellekte yer aldığında, bir saldırganın sabit bir adrese okuma/yazma yapması, Skype dosya içeriğine ulaşma olasılığını artırır. PE ayrıştırma gibi geleneksel yöntemlerle birleştirildiğinde, tam bir zafiyet istismar zinciri oluşturulabilir.
Bu sefer PatchGap sadece Issue1352549 ile ilgili değil, aynı zamanda Issue1314616 ve Issue1216437 gibi benzerlerinin istismar zorluğunu da büyük ölçüde düşürdü. Hackerlar, daha önceki herhangi bir sızdırılmış uninitialized_oddball açığının tam istismarını gerçekleştirmek için neredeyse ek bir araştırmaya ihtiyaç duymuyor.
Özet
Bu makale, Sentinel value içindeki uninitialized_Oddball'ın sızdırılması yoluyla rastgele okuma ilkesinin nasıl uygulanacağını açıklamaktadır. V8'de başka Sentinel value'lar da bulunmaktadır ve bu benzer sorunlara yol açabilir. Bu bize aşağıdaki dersleri vermektedir:
Diğer uninitialized_Oddball sızmalarının da V8'in RCE'sini kolayca gerçekleştirebilir mi?
Bu tür sorunların resmi olarak bir güvenlik sorunu olarak ele alınıp alınmaması hala tartışmalıdır.
Fuzzer'da %TheHole/uninitialized_Oddball gibi Sentinel değerlerini değişken olarak eklemeyi düşünmek, diğer sömürücü ilkelere ulaşmak için faydalı olabilir.
Herhangi bir şekilde, bu tür sorunlar, hackerların tam istismar süresini önemli ölçüde kısaltacaktır.