Apa nama lainnya ?

  • CSRF (Cross Site Request Forgery)
  • One Click Attack
  • Session Riding

Apa itu CSRF (Cross Site Request Forgery) ?

CSRF adalah salah satu tipe serangan/vulnerabilities di web.

Sesuai dengan jenisnya (dari namanya), yaitu Forgery/Pemalsuan, maka serangan ini dilakukan dengan cara menipu pengguna/user yang punya akses tertentu di sebuah web, untuk melakukan sesuatu aksi yang menguntungkan penipu dengan memanfaatkan session pengguna/user tadi.

Oleh karenanya disebut juga dengan Session Riding, artinya si penipu tidak melakukan hijack/merampas session nya si pengguna. Tetapi dia melakukan riding/menumpang ke session pengguna tadi.

Kenapa bisa terjadi ?

Hal ini terjadi karena kasus Cookie-based session management. Maksudnya dengan kata lain adalah karena adanya session pengguna yang ditaruh di cookie dan digunakan sebagai alat otorisasi untuk request selanjutnya.

Contohnya
si Badu login ke sebuah aplikasi web. Otomatis dia akan mendapatkan session id yang di-generate dari server. Session id ini kemudian disimpan dalam cookie browser. Selanjutnya si Badu meng-click pilihan menu lain/URL lain. Otomatis di request tersebut browser akan melampirkan di request header nya session id yang sebelumnya disimpan di cookie.

Server yang menerima request tersebut akan mengecek session id yang dikirimkan. Dan karena server menganggap session id adalah syarat otorisasi dari user/pengguna yang telah login sebelumnya, dan ternyata session id yang dikirimkan itu valid, maka server akan mengizinkan dan melakukan aksi sesuai dengan yang dikirimkan oleh pengguna.

Cara Penipunya
Dengan adanya session pengguna yang disimpan di cookie ini, secara otomatis browser akan melakukan pengirimin session id untuk request request URL/API selanjutnya. Dan ini dimanfaatkan oleh penipu tersebut. Dia mencoba menumpang / riding di proses alur otorisasi yang otomatis oleh browser tersebut.

Dengan kata lain penipu mencoba untuk memalsukan request ke URL/API dengan memanfaatkan otorisasi pengguna yang sudah otomatis ter-set di cookie dan dikirimkan otomatis pula oleh browser.

Apa isi tumpangannya si penipu ?

Tentu saja isinya sesuai dengan keinginan penipu. Tergantung keinginannya penipu. Biasanya URL / API dilengkapi dengan url param atau body payload.

Si penipu bisa saja menyisipkan nilai untuk url param atau body payload dengan berbagai cara agar bisa dieksekusi secara tidak sengaja oleh pengguna.

Bagaimana caranya ?

Ada beberapa cara yang dapat dilakukan oleh penipu :

  • Membuat website palsu berisikan form yang melakukan pemalsuan url.

    Misalkan :

    url asli : http://bank.com/transfer

    <form id="transferForm" method="POST" action="transfer">
        <input type="hidden" name="username" value="${userName}">
        <input type="text" name="jumlahTransfer">
    <form>
    <button type="submit" form="transferForm" value="Submit">Submit</button>
    

url palsu : http://isengbro.com/transfer

<form id="transferForm" method="POST" action="http://bank.com/transfer">
    <input type="hidden" name="username" value="badu@isengbro.com">
    <input type="text" name="jumlahTransfer" value="100000">
<form>
<script>
    document.getElementById('transferForm').submit();
</script>

Lalu dengan berbagai cara, si penipu mengirimkan link url palsu diatas kepada korbannya. Bisa dengan cara kirim email kepada korban, membuat nama website yang mirip dengan website aslinya, mengirimkan email dengan gambar yang didalamnya terdapat link <img src="http://isengbro.com/transfer">

Coba lihat, di form http://isengbro.com/transfer diatas, dibuatlah sebuah parameter yang sudah dimodifikasi agar melakukan transfer 100.000 ke account badu@isengbro.com. Dan diakhir code, juga disisipkan kode javascript yang melakukan submit secara otomatis dengan data tersebut ke http://bank.com/transfer. Berbahaya sekali, karena pengguna tidak perlu meng-click tombol submit, tetapi cukup meng-click gambar dan otomatis script submit akan jalan.

Tentunya contoh diatas adalah contoh yang sederhana. Banyak cara yang lebih canggih dalam memanipulasi data yang dikirimkan melalui website palsu.

  • Mengirimkan email palsu / phising kepada calon korban, berisikan link yang sudah dimodifikasi.

contoh url : http://bank.com/transfer

<form id="transferForm" method="GET" action="transfer">
    <input type="hidden" name="username" value="${userName}">
    <input type="text" name="jumlahTransfer">
<form>
<button type="submit" form="transferForm" value="Submit">Submit</button>

Misalnya dari contoh diatas, pengguna mengisi nilai jumlah transfer sebesar 100.000, dan bisa dilihat bahwa ketika form nya disubmit , maka akan dikirim request ke : http://bank.com/transfer?username=xxxxx&jumlahTransfer=100000.

Tentunya persyaratan sebelumnya pengguna telah login dan mendapatkan session nya. Sehingga request ini juga otomatis dikirim bersama dengan session id nya di request header yang sebelumnya disimpan di cookie .

Penipu yang melakukan CSRF bisa memodifikasi URL ini menjadi http://bank.com/transfer?username=badu@isengbro.com&jumlahTransfer=300000 dan menempelkannya di sebuah url yang menarik atau di sebuah image url tag <img>, lalu dikirimkan melalui email kepada calon korban, dengan seolah-olah merupakan email resmi dari website http://bank.com.

Calon korban yang tidak sadar, merasa bahwa email itu adalah email resmi dari http://www.bank.com , sehingga calon korban meng-click image atau URL tersebut, sehingga otomatis account, jumlah transfer, dan session id yang sudah ada sebelumnya di cookie browser akan dikirimkan ke server.