DOM-Based Cross-Site Scripting Analysis

Novran Faathir · October 10, 2022

Artikel ini akan membahas tentang bagaimana cara melakukan Static Analysis untuk menemukan kerentanan DOM XSS.

Apa itu DOM XSS?

DOM-Based Cross-Site Scripting adalah salah satu celah XSS, celah ini juga bisa dibilang sebagai JavaScript XSS yang dimana Attacker akan mengeksploitasi XSS tersebut di level JavaScript.

Reflected XSS DOM XSS
Dapat dilihat menggunakan CTRL+U (view-source) Tidak dapat dilihat menggunakan CTRL+U (view-source)
Mudah ditemukan menggunakan Web Scanner Agak sulit untuk ditemukan menggunakan Web Scanner

JS XSS

DOM: Source and Sink

Note: Source dan Sink adalah kunci yang perlu diperhatikan untuk melakukan analisa terhadap celah DOM XSS.

Source

Di dalam JavaScript, Source adalah sebuah sintaks yang berguna untuk mengambil sebuah Value (isi), Value tersebut dapat diubah-ubah oleh User itu sendiri (bersifat Dynamic), bisa dibilang hal tersebut mirip-mirip seperti Parameter Input yang disimpan kedalam Variable.

Source:

  • location.search
  • location.hash
  • location.href
  • document.referrer

Sink

Sink adalah sebuah Function yang biasanya digunakan untuk memproses Value dari Source.

Sink:

  • document.write()
  • document.writeln()
  • element.innerHTML
  • element.outerHTML

Sebenarnya masih banyak lagi list Source dan Sink yang perlu diperhatikan, kalian dapat Googling untuk menemukan list yang lebih lengkap.

Example: Sink to Source Analysis

Ini adalah salah satu contoh untuk melakukan analisa terhadap DOM Manipulation.

source-to-sink-dom-xss

Pada JavaScript di atas terdapat sebuah Sink yaitu document.write() yang memanggil Variable dari productid. Variable productid sendiri menggunakan salah satu sintaks Source yaitu location.href yang di-parsing menggunakan Function searchParams untuk mengambil URL Parameter get('pid').

to “Sink” from “Source”
document.write() location.href

Exploitation

https://[redacted].com/[redacted]/cart?pid="%20onerror="alert(1)"%20x="

DOM Triggered

Before

Browse:
/cart?pid=179273640

Document:
document.write('<img src="/images/thumb-179273640.jpeg">')

After

Browse:
/cart?pid="%20onerror="alert(1)"%20x="

Document:
document.write('<img src="/images/thumb-" onerror="alert(1)" x=".jpeg">')

EOF

Untuk menemukan kerentanan DOM XSS sendiri sebenarnya kalian hanya perlu memperhatikan Source dan Sink yang terdapat pada JavaScript di Website yang sedang kalian lakukan Assessment.

Terima kasih.

Twitter, Facebook