Blocking main page to steal postmessage
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:
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ı:
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.
Last updated