Blocking main page to steal postmessage

AWS hacklemeyi sıfırdan kahramanla öğrenin htARTE (HackTricks AWS Kırmızı Takım Uzmanı)!

Iframe'lerle RC Kazanma

Bu Terjanq yazısına göre, null kökenlerinden oluşturulan blob belgeleri güvenlik avantajı için izole edilir, bu da demektir ki eğer ana sayfayı meşgul tutarsanız, iframe sayfası çalıştırılacak.

Temel olarak, bu zorlukta izole edilmiş bir iframe çalıştırılır ve hemen ardından yüklendikten sonra ana sayfa bayrakla bir post mesajı gönderecektir. Ancak, bu postmessage iletişimi XSS'ye karşı savunmasızdır (iframe JS kodunu çalıştırabilir).

Bu nedenle, saldırganın amacı, ebeveynin iframe'i oluşturmasına izin vermek, ancak önce ebeveyn sayfanın duyarlı veriyi (bayrak) meşgul tutmak ve payload'ı iframe'e göndermek. Ebeveyn meşgulken, iframe payload'ı çalıştırır ve ebeveyn postmessage mesajını dinler ve bayrağı sızdırır. Sonunda, iframe payload'ı çalıştırdı ve ebeveyn sayfa meşgul olmaktan çıktı, bu yüzden bayrağı gönderir ve payload onu sızdırır.

Ancak, ebeveyn iframe'i oluşturduktan hemen sonra meşgul olmasını ve iframe'in duyarlı veriyi göndermeye hazır olana kadar meşgul olmasını nasıl sağlayabilirsiniz? Temel olarak, ebeveynin yürütmesini sağlayabileceğiniz async bir eylem bulmanız gerekiyor. Örneğin, bu zorlukta ebeveyn şu şekilde postmessage'ları dinliyordu:

window.addEventListener('message', (e) => {
if (e.data == 'blob loaded') {
$("#previewModal").modal();
}
});

Bu durumda, postMessage ile gönderilen bir büyük tamsayıyı karşılaştırmada dizeye dönüştürmek mümkündü ve bu işlem biraz zaman alacaktı:

const buffer = new Uint8Array(1e7);
win?.postMessage(buffer, '*', [buffer.buffer]);

Ve postmessage'i göndermek için, iframe oluşturulduktan hemen sonra, ebeveyninden veri almak için hazır hale gelmeden önce setTimeout'in milisaniyeleriyle oynamanız gerekecektir.

AWS hacklemeyi sıfırdan kahraman olmak için öğrenin htARTE (HackTricks AWS Kırmızı Takım Uzmanı)!

Last updated