Case : Perampokan Acme Fashion, Inc. Ver 2

Mem-Bypass Validasi Client Side

Kesalahan lain yang ditemukan oleh tim peneliti keamanan adalah cara input divalidasi sebelum dilewatkan ke Shopcart.exe. Aplikasi Web terdiri dari banyak script dan komponen interaktif. Semua itu terutama untuk berinteraksi dengan user melalui form HTML pada browser. Bagian interaktif dari tiap komponen mengambil input dari form HTML dan memprosesnya pada server. Form HTML berciri generik bila berfungsi sebagai pengambil data, dan tak ada cara lain untuk menjamin validasi data di dalam form seperti itu. Misalnya, bila sebuah form HTML didesain untuk menerima tanggal, user bisa saja memasukkan tanggal seperti ini: 99/88/77 dan browser tidak mempedulikannya. Aplikasi harus memiliki mekanisme validasi inputnya sendiri untuk mem-filter input-input yang salah bentuk atau tidak sesuai dengan kriteria yang sudah ditentukan pada aplikasi. Validasi input untuk form HTML bisa dilakukan baik pada server-side dengan Perl, PHP, atau ASP, dll. Juga dapat dilakukan pada client-side dengan menggunakan bahasa script seperti JavaScript atau Vbscript.

Tim pengembangan Acme menyadari kebutuhan validasi input seperti itu. Tetapi, karena Shopcart.exe merupakan aplikasi yang berciri Prepackaged (tidak bisa dimodifikasi lebih lanjut), maka ia tidak bisa dimodifikasi untuk bisa menggabungkan validasi input dengan script client-side pada browser-nya sendiri, mungkin dengan tujuan untuk menghemat penggunaan CPU server, sehingga pekerjaan itu dijalankan oleh browser klien.

Namun, kenyataannya mekanisme client-side manapun bisa diubah-ubah dengan cara mengedit atau mengganti-ganti source code HTML yang diterima oleh browser. Tim penguji keamanan menemukan beberapa contoh validasi client-side yang digunakan pada http://www.acme-fashion.com. menunjukkan validasi input sedang dijalankan pada sistem Acme. Contoh : Seorang user berusaha membeli sejumlah ”-5” pakaian dan sebuah peringatan muncul bahwa user memasukkan nilai yang salah.

Berikut ini adalah kode JavaScript untuk memvalidasi input yang dipisahkan dari elemen-elemen HTML-nya.

function validate(e) {

if(isNaN(e.value) || e.value <= 0) {

alert (“Please enter a valid number”) ;

e.value = 1;

e.focus();

return false;

}

else {

return true;

}

}

:

:

Kode ini memastikan bahwa hanya angka positif saja yang diperbolehkan pada field qty. Tetapi, karena validasi ini dilakukan oleh script client-side, maka bisa dengan mudah di-bypass. Menonaktifkan eksekusi JavaScript dengan cara men-setting preferensi browser bisa membuat hacker mem-bypass validasi pada client-side. Jika kita memasukkan nilai apa saja yang diinginkan pada field-field input.

Bagaimana menonaktifkan JavaScript pada Netscape. Sekarang jika user memasukkan nilai ”-3”, browser akan mengeluarkan request POST berikut ini pada server.

POST /cgi-bin/shopcart.exe/MYSTORE-AddItem HTTP/1.0

Referer: http://www.acme-fashions.com /shirtcatalog/shirts2.asp

Connection: Keep-Alive

User-Agent: Mozilla/4.76 [en] (Windows NT 5.0; U)

Host: http://www.acme-fashions.com

Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, image/png, */*

Accept-Encoding:gzip Accept-Language: en

Accept-Charset: iso-8859-1,*,utf-8

Cookie: ASPSESSIONIDQQGQQKIG=ONEHLGJCCDFHBDHCPKGANANH; shopcartstore=3009912

Content-type: application/x-www-form-urlencoded

Content-length: 63

PartNo=OS0015&Item=Acme+Shirts&Price=-3&qty=1&buy.x=16&buy.y=5

Selanjutnya dapat kita lihat bagaimana request HTTP ini bisa mem-bypass seluruhnya validasi input pada client-side. menunjukkan respon pada server.

Pada contoh diatas user telah membuat pesanan untuk 5 baju masing-masing seharga 55,99 dolar, dan hari berikutnya membeli -3(minus 3) baju masing-masing seharga 89,99 dolar. Total biaya adalah 4,98 dolar. Kemampuan untuk meletakkan angka negatif pada jumlah pembelian bisa membuat si pembeli kegirangan. Kecacatan inilah yang menyebabkan karyawan pengiriman Acme menerima order jumlah item dengan angka negatif.

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: