BOOK THIS SPACE FOR AD
ARTICLE ADCross site scripting (XSS) merupakan jenis kerentanan website berbasis injeksi yang memungkinkan attacker menjalankan kode Javascript berbahaya pada browser korban.
XSS termasuk ke dalam OWASP Top Ten (10 kerentanan umum pada website) dalam kategori injection dan berada di urutan ketiga dalam OWASP Top Ten 2021.
XSS terjadi ketika string yang diinputkan user ditampilkan kembali ke browser tanpa melakukan sanitasi terlebih dahulu. Akibatnya, attacker dapat menginputkan kode Javascript apapun yang akan dieksekusi di browser.
British airways. Pada tahun 2018, British Airways diserang oleh Magecart, kelompok hacker terkenal yang terkenal dengan serangan skimming kartu kredit. Kelompok ini mengeksploitasi kerentanan XSS dalam library JavaScript yang disebut Feedify, yang digunakan di situs web British Airway.
Para penyerang memodifikasi skrip untuk mengirim data pelanggan ke server jahat, yang menggunakan nama domain yang mirip dengan British Airways. Server palsu tersebut memiliki sertifikat SSL, sehingga user percaya bahwa mereka membeli dari server yang aman. Mereka berhasil melakukan skimming kartu kredit pada 380.000 transaksi pemesanan sebelum pelanggaran ditemukan.
Fortnite. Pada tahun 2019, game multipemain yang populer ini mengalami kerentanan XSS yang dialami oleh lebih dari 200 juta pengguna. Halaman yang sudah tidak aktif dan tidak aman luput dari perhatian para pengembang Fortnite. Laman tersebut memiliki kerentanan XSS yang memungkinkan penyerang untuk mendapatkan akses tidak sah ke data semua pengguna Fornite.
Penyerang dapat menggunakan XSS, yang dikombinasikan dengan kerentanan Single Sign On (SSO) yang tidak aman, untuk mengarahkan pengguna ke halaman login palsu. Ini akan memungkinkan mereka mencuri mata uang virtual di dalam game, dan merekam percakapan pemain. Check Point menemukan serangan tersebut dan memberi tahu Fortnite, tetapi tidak diketahui apakah kerentanan tersebut dieksploitasi oleh penyerang untuk sementara.
eBay. Pada akhir 2015 dan awal 2016, eBay memiliki kerentanan XSS yang parah. Situs web ini menggunakan parameter “url” yang mengarahkan pengguna ke halaman yang berbeda pada platform, tetapi nilai parameter tersebut tidak divalidasi. Hal ini memungkinkan penyerang untuk menyuntikkan kode berbahaya ke dalam sebuah halaman.
Kerentanan ini memungkinkan penyerang mendapatkan akses penuh ke akun penjual eBay, menjual produk dengan harga diskon, dan mencuri detail pembayaran. Ini secara aktif digunakan oleh penyerang untuk memanipulasi daftar eBay dari produk bernilai tinggi seperti kendaraan. eBay akhirnya memperbaiki kerentanan tersebut, tetapi serangan lanjutan terus berlanjut hingga 2017.
Terdapat tiga jenis XSS, yaitu:
Reflected XSS. Pada Reflected XSS, payload yang diinputkan attacker akan langsung direfleksikan pada request yang sama. Contohnya pada fitur pencarian, payload tersebut akan dijalankan segera setelah user menekan enter.
Stored XSS. Pada Stored XSS, payload yang diinputkan attacker akan disimpan terlebih dahulu di database dan akan dijalankan ketika user mengunjungi halaman yang terkena dampak. Contohnya pada fitur komentar blog, payload tersebut akan dijalankan setiap user mengunjungi halaman blog tersebut.
DOM XSS. DOM XSS terjadi ketika payload dieksekusi dengan mengubah DOM pada browser korban. DOM (Document Object Model) sendiri merupakan interface yang memungkinkan developer memanipulasi elemen HTML menggunakan Javascript. Contohnya ketika menampilkan pesan error, developer akan mengambil isi pesan error dari query URL dan menampilkannya langsung pada elemen HTML.
Mencuri session login. Attacker dapat menggunakan kode Javascript untuk mengakses dan mencuri session login user lain. Sangat berbahaya jika yang menjadi korban adalah user dengan hak akses tinggi seperti administrator. Attacker akan menggunakan Javascript untuk mengambil session cookie pada browser korban lalu akan dikirimkan ke server attacker.
Attacker kemudian tinggal menambahkan cookie tersebut pada browser miliknya, dan dapat langsung masuk menggunakan akun orang lain tanpa login terlebih dahulu.
Deface website. XSS juga dapat digunakan untuk melakukan defacement pada website. Attacker akan membuat payload yang akan menampilkan pesan tertentu kepada pengunjung.
Phishing. Attacker dapat memasukkan payload HTML yang akan membuat form seolah-olah untuk login. Kredensial login dari form tersebut nantinya akan dikirim ke server milik attacker.
Keylogger. Attacker dapat memasukkan payload Javascript yang akan menangkap seluruh tombol keyboard yang ditekan user.
Redirect ke website berbahaya. Attacker juga dapat langsung meredirect user menuju website berbahaya di bawah kendalinya.
Source image: Research GatePada Reflected XSS dan DOM XSS, attacker membutuhkan interaksi user agar payload yang telah ia masukkan dapat berjalan. Maka dari itu, attacker akan mengirimkan link website yang mengandung payload XSS kepada user. Biasanya attacker akan menggunakan URL shortener untuk memperpendek link, sehingga korban tidak menaruh curiga. Setelah korban mengakses link tersebut, maka payload XSS akan berjalan.
Sementara pada Stored XSS, attacker tidak memerlukan interaksi user. Attacker biasanya memasukkan payload pada halaman yang sering dikunjungi user seperti di fitur chatting, komentar, dll. Setiap kali user mengunjungi halaman tersebut, maka payload XSS akan dijalankan. Sehingga stored XSS dinilai lebih berbahaya daripada Reflected dan DOM XSS.
XSS dapat dicegah dengan cara:
Validasi inputan. Yaitu dengan menghapus tag HTML dan event Javascript yang tidak diperlukan pada inputan user seperti <script>, <img>, dll.
Sanitasi output. Lakukan sanitasi pada semua output yang akan ditampilkan ke user. Gunakan fungsi atau library yang dapat meng-encode karakter-karakter khusus (seperti <, >, &, dll.) agar tidak diinterpretasikan sebagai kode HTML atau JavaScript oleh browser.
Gunakan Content Security Policy (CSP). CSP dapat membantu dalam mengurangi risiko XSS dengan membatasi sumber daya yang diizinkan untuk dijalankan atau diload di halaman web. Hal ini dilakukan dengan mengatur HTTP header ‘Content-Security-Policy’.
Hindari Penggunaan innerHTML. Sebisa mungkin, hindari penggunaan innerHTML dalam JavaScript karena dapat meningkatkan risiko XSS. Sebagai gantinya, gunakan textContent untuk manipulasi teks atau metode yang lebih aman untuk memanipulasi DOM.
Gunakan Template Engines yang Aman. Banyak template engine modern secara otomatis melakukan escape terhadap output untuk menghindari XSS. Pastikan untuk menggunakan fitur keamanan ini.
Perbarui dan Patch Secara Berkala. Pastikan untuk selalu memperbarui dan mempatch software, library, dan dependencies ke versi terbaru untuk memastikan keamanan dari kerentanan yang diketahui.
Gunakan Cookie dengan Atribut HttpOnly dan Secure. Dengan menandai cookie sebagai HttpOnly, Anda dapat melindungi cookie dari diakses melalui JavaScript, yang bisa mengurangi dampak dari serangan XSS. Atribut Secure memastikan cookie hanya dikirim melalui koneksi HTTPS.
Edukasi dan Pelatihan Developer. Edukasi tim developer tentang risiko dan teknik pencegahan XSS. Sangat penting untuk menerapkan teknik pengembangan aplikasi yang aman.
XSS merupakan serangan yang cukup berbahaya. Penting sekali untuk menerapkan pengembangan aplikasi yang aman untuk mencegah serangan ini.