Fungsi JavaScript Tanpa Tanda Kurung via Error Object

Judul asli: Yet another way to invoke functions without parentheses

Mengapa Ini Penting

Teknik ini memperluas vektor serangan XSS dan bypass CSP tanpa karakter tanda kurung.

Peneliti keamanan menemukan cara baru memanggil fungsi JavaScript sembarangan tanpa tanda kurung, memanfaatkan fungsi prepareStackTrace milik objek Error.

Bartosz, peneliti keamanan, mempublikasikan teknik baru untuk mengeksekusi fungsi JavaScript tanpa menggunakan tanda kurung — metode yang relevan dalam konteks bypass Content Security Policy (CSP) dan eksploitasi XSS.

Teknik ini mengeksploitasi fungsi `Error.prepareStackTrace`, yang normalnya digunakan untuk memformat stack trace dan dipanggil saat atribut `stack` dari objek Error diakses. Fungsi ini kebetulan memiliki signature yang sama dengan konstruktor `Function`, sehingga bisa disalahgunakan untuk menghasilkan fungsi JavaScript arbitrer.

Problema utamanya: stack trace bukan kode JavaScript yang valid. Untuk mengatasinya, peneliti menimpa `Array.prototype.toString` dengan `Error.prototype.toString`, lalu mencemari `Object.prototype.message` melalui prototype pollution agar output-nya berisi payload yang diinginkan.

Langkah terakhir adalah mengeksekusi fungsi yang sudah dibuat. Caranya menggunakan trik `valueOf` — menimpa fungsi valueOf objek lalu memanggilnya sebagai nilai primitif dengan operator unary `+`. Payload final hanya lima baris kode dan bisa langsung diuji di konsol browser.

Sumber

blog.ikaes.de — Baca artikel asli →