Gerçek Dünyadan PostMessage XSS Zafiyetinin Analizi

Grolar
2 min readJun 25, 2024

--

Geçen yıl bulduğum bir güvenlik açığı hakkında yazmak istiyorum. Bu açığı bugün tekrar kontrol ettiğimde, basit bir arama ile 100'den fazla yerde hala self olarak çalıştığını gördüm. Postmessage xss hakkındaki bir kaç tane güzel kaynağı aşağıya bırakacağım.

Keşif

Zafiyeti test etmek için `message event listener` kodunu incelerken şu adımları izledim:

İlk olarak, XSS elde edebileceğim sink’leri inceliyorum. Bu sink’leri internetten bulabilirsiniz (1), ama ben genellikle konsolda şüphelendiğim yerleri test etmeyi tercih ediyorum.

Sonra bu kodu tetiklemek için gereken koşulları anlamaya ve sağlamaya çalışıyorum. Tarayıcının debuggerı ile kodla biraz uğraştıktan sonra ilk vaka olan `iframe resize` ile XSS elde ediyorum. Burada görebileceğiniz gibi karmaşık koşullar yok, sadece basit bir şekilde `type` kontrol ediliyor.

`type`’ı daha önceden gönderilen mesajlardan elde edip payload’ı oluşturuyorum. Aşağıdaki payload’ı konsola yapıştırdığımızda XSS tetikleniyor:

window.postMessage({“type”:”gA5zf9WfzjO6O8B”, “event”:”iframe-resize”,”style”:”\n grolar;\n </style><img src=a onerror=alert(document.domain)><style> “},”*”)

Exploit

Buraya kadar basit bir postMessage XSS örneği. Ancak bunu sömürmeyi denediğimde birkaç zorlukla karşılaştım. `type` dinamik olarak oluşturuluyordu ve birkaç farklı zafiyet ile zincirlemeyi denedim, fakat işe yaramadı. Sonra diğer mesajlardan `type` değerini çalabileceğimi fark ettim. Eski kodu olmadığı için örnek koyamıyorum, ancak en son exploit kodu bu şekilde oldu:

Önleme

Bu zafiyeti önlemek için `type`’da taşınan ID’yi sadece chat iframe ile paylaşarak çözmüşler. postMessage sadece chat iframe’i ile paylaşıldığı için biz erişemiyoruz. XSS’i tetiklemenin tek yolu `type` ID’yi kopyalayıp yapıştırmak. Sömürmenin başka bir yolunu bulabilirseniz iş birliği yapabiliriz.

Bu kısımdan kesin emin değilim önceki kod elimde olmadığı için sadece tahminde bulunuyorum.

Kaynaklar ve İlgili Yazılar

Aşağıda bu tür zafiyetler hakkında daha fazla bilgi edinebileceğiniz kaynaklar ve yazılar bulabilirsiniz:

— -

Bulduğum bu açık üzerine yazdığım blog postu bu şekilde. İlk denemem olduğu için her türlü geri bildirimi memnuniyetle karşılarım.

--

--