Memahami Teknik Penyebaran Status Berantai di Facebook
Hari ini saya menyadari ada yang tidak
beres dengan status teman-teman facebook saya. Banyak yang mendadak
statusnya berisi promosi suatu link bahkan hingga berkali-kali. Apa
gerangan yang terjadi? Dalam artikel ini saya akan membedah teknik
penyebaran status berantai tersebut.
Analisa
Mari kita mulai analisa kita dengan mengambil sample satu URL jebakan, yaitu tinyurl.com/sayank. Ini adalah url versi pendek yang bila diklik akan melakukan redirect ke url aslinya, yaitu:
URL tersebut akan saya pecah menjadi 3 bagian:
Bagian pertama adalah URL untuk update status. Bagian kedua adalah query string parameter yang terdiri dari dua parameter, yaitu display dan user_message_prompt. Bagian ketiga adalah isi dari parameter user_message_prompt yang merupakan payload javascript untuk mengubah status secara otomatis.
The Prompt
Sebelum masuk lebih jauh membahas payloadnya, mari kita lihat dulu bentuk tampilan dari URL untuk mengubah status ini. Gambar ini adalah screenshot ketika browser membuka URL:
http://m.facebook.com/connect/prompt_feed.php?display=wap&user_message_prompt=Masukkan Status
Dari gambar di atas kini kita memahami
fungsi dari parameter user_message_prompt, yaitu sebagai judul
pertanyaan/prompt. Agar user mengerti apa yang harus diinputkan, dalam
setiap prompt harus diberi judul yang jelas, contohnya: “Input your
PIN”, “Enter your Name”, “Password:” dan sebagainya. Silakan anda
mencoba bermain-main dengan mengubah-ubah nilai user_message_prompt
sesuka anda di address bar dan perhatikan apa yang terjadi.
Reflected Cross Site Scripting
Normalnya
user_message_prompt diisi dengan murni teks saja berupa
instruksi/petunjuk apa yang harus diinputkan user. Bila parameter
user_message_prompt berisi teks murni saja, maka tidak ada yang perlu
dikhawatirkan, namun bagaimana bila parameter tersebut diisi dengan kode
HTML atau javascript?
Perhatikan apa yang terjadi bila user_message_prompt diisi dengan kode HTML:
Perhatikan juga apa yang terjadi bila user_message_prompt diisi dengan kode HTML:
Bagaimana bila user_message_prompt
tidak hanya diisi dengan kode HTML, tapi diisi dengan kode javascript?
Mari kita coba memasukkan javascript sederhana berikut ini:
Kita sudah melihat bagaimana
user_message_prompt tidak hanya bisa diisi dengan normal teks, namun
juga bisa diisi dengan kode HTML dan javascript yang dieksekusi browser.
Ini adalah vulnerability yang disebut dengan XSS (Cross Site
Scripting), lebih tepatnya reflected-XSS (karena kode yang diinjeksikan
dalam URL “dipantulkan” kembali sebagai response HTTP).
The Payload
Dalam contoh sebelumnya kita mencoba
memasukkan javascript sederhana yang hanya menampilkan prompt input
kepada user. Sebenarnya javascript bisa dipakai untuk melakukan hampir
apa saja mulai dari yang sekedar iseng seperti mengubah status, sampai
yang serius seperti seperti mencuri cookie korban atau take-over
komputer korban dengan mengeksploitasi kelemahan pada browsernya.
Hal-hal inilah yang disebut dengan payload. Attacker bebas memasukkan
payload apa saja yang dia inginkan seperti mengubah status, mencuri
cookie dsb.
Perhatikan kembali isi parameter user_message_prompt yang didapat dari tinyurl.com/sampahh:
agi pembaca yang jeli tentu merasa aneh, kenapa ada karakter single-quote (‘) sebelum tag script? Perlukah karakter single-quote ini? Jawabannya adalah tidak perlu sama sekali. Saya melihat semua yang membuat url sejenis ini dalam payloadnya selalu ada karakter single-quote di depan tag script. Mungkin pembuatnya hanya ikut-ikutan saja tanpa benar-benar mengerti apa yang terjadi, karena dia mencontoh orang lain memakai single-quote, maka diapun ikut memakai single-quote.
Payload untuk mengubah status
sebenarnya sangat sederhana. Berikut ini adalah payload untuk mengubah
status di facebook secara otomatis:
Onload
adalah event yang terjadi bila suatu halaman web selesai di-load.
Baris pertama pada kode di atas artinya meminta browser untuk
mengeksekusi sebuah fungsi secara otomatis ketika halaman ini selesai
diload. Fungsi yang dimaksud terdiri dari dua baris kode sederhana
untuk mengubah nilai textarea message dan melakukan submit form.
Baris kedua dimaksudkan untuk mengubah nilai dari textarea bernama message seperti gambar di bawah ini.
Langkah terakhir adalah memanggil
fungsi submit() untuk melakukan submit form. Jadi sangat sederhana cara
untuk mengubah status secara otomatis, cukup dua langkah saja, mengisi
message dengan isi status, lalu submit, status pun selesai diubah.
Varian Lain dengan IFRAME
Saya juga menemukan varian lain yang
memakai iframe. Varian ini lebih berbahaya karena bisa disisipkan dalam
web apapun dan bisa dengan mudah melakukan pengubahan status berulang
kali. Salah satu teman facebook saya menjadi korban freesmsvoip.com
sampai berkali-kali.