Selasa, 16 Juli 2024

CROSS SITE REQUEST FORGERY

 

 CROSS SITE REQUEST FORGERY

Apa Itu Cross-Site Request Forgery (CSRF)?

Cross-Site Request Forgery (CSRF) adalah salah satu jenis serangan pada aplikasi web di mana penyerang mengeksploitasi identitas pengguna untuk mengirimkan permintaan yang tidak sah ke server aplikasi. CSRF sering kali berhasil karena aplikasi web tidak memverifikasi keaslian permintaan yang datang dari pengguna yang telah diautentikasi.

Cara Kerja CSRF

  1. Pengguna Login: Pengguna login ke situs web A dan mendapatkan cookie sesi yang sah.
  2. Penyerang Membuat Permintaan Berbahaya: Penyerang membuat halaman web berbahaya atau email yang mengandung permintaan berbahaya ke situs web A.
  3. Pengguna Mengunjungi Halaman Berbahaya: Pengguna mengunjungi halaman berbahaya tersebut atau membuka email yang mengandung permintaan berbahaya.
  4. Permintaan Tidak Sah Dikirim: Karena pengguna sudah login ke situs web A, permintaan berbahaya tersebut dikirim ke server dengan menggunakan cookie sesi pengguna, sehingga permintaan tersebut tampak sah bagi server.

Sebelum Update: Script Rentan Terhadap Serangan CSRF

Berikut adalah contoh formulir transfer uang yang rentan terhadap serangan CSRF:

index.html

<!DOCTYPE html>
<html>
  <body>
    <h2>Transfer Uang</h2>
    <form action="transfer.php" method="POST">
      <label for="amount">Jumlah:</label><br />
      <input type="text" id="amount" name="amount" /><br />
      <label for="to">Kepada:</label><br />
      <input type="text" id="to" name="to" /><br /><br />
      <input
        type="hidden"
        name="csrf_token"
        value="<?php echo generateToken(); ?>"
      />
      <input type="submit" value="Transfer" />
    </form>
  </body>
</html>


transfer.php

<?php
session_start();
// Proses transfer (tanpa perlindungan CSRF)
$amount = $_POST['amount'];
$to = $_POST['to'];
echo "Transferred $amount to $to";
?>

Pada contoh di atas, tidak ada perlindungan terhadap serangan CSRF. Penyerang dapat membuat formulir yang mengirimkan permintaan POST ke `transfer.php` tanpa sepengetahuan pengguna.

Hasil user


Contoh Serangan CSRF

Berikut adalah contoh script yang dapat digunakan oleh penyerang untuk mengeksploitasi kelemahan CSRF pada aplikasi:

csrf_attack.html:

<!DOCTYPE html>
<html>
  <body>
    <h2>CSRF Attack</h2>
    <form action="http://localhost/csrf/transfer.php" method="POST">
      <input type="hidden" name="amount" value="1000" />
      <input type="hidden" name="to" value="attacker_account" />
      <input type="submit" value="Submit" />
    </form>
  </body>
</html>

Hasil attacker



Sesudah Update: Script Terlindungi dari Serangan CSRF

Untuk melindungi aplikasi web dari serangan CSRF, kita dapat menambahkan token CSRF pada formulir dan memverifikasinya di sisi server.


1. Mengubah `index.html` menjadi `index.php`:

   Karena `index.html` adalah file HTML statis, kita perlu mengubahnya menjadi file PHP untuk bisa menghasilkan token CSRF dinamis.

<?php
session_start();

function generateToken() {
    if (empty($_SESSION['csrf_token'])) {
        $_SESSION['csrf_token'] = bin2hex(random_bytes(32));
    }
    return $_SESSION['csrf_token'];
}
?>

<!DOCTYPE html>
<html>
<body>
  <h2>Transfer Uang</h2>
  <form action="transfer.php" method="POST">
    <label for="amount">Jumlah:</label><br />
    <input type="text" id="amount" name="amount" /><br />
    <label for="to">Kepada:</label><br />
    <input type="text" id="to" name="to" /><br /><br />
    <input type="hidden" name="csrf_token" value="<?php echo generateToken(); ?>" />
    <input type="submit" value="Transfer" />
  </form>
</body>
</html>


2. Memastikan Token CSRF Diterima dan Diverifikasi di `transfer.php`:

<?php
session_start();

function generateToken() {
    if (empty($_SESSION['csrf_token'])) {
        $_SESSION['csrf_token'] = bin2hex(random_bytes(32));
    }
    return $_SESSION['csrf_token'];
}

function verifyToken($token) {
    return $token === $_SESSION['csrf_token'];
}

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    if (!isset($_POST['csrf_token']) || !verifyToken($_POST['csrf_token'])) {
        die('Invalid CSRF token');
    }

    // Proses transfer
    $amount = $_POST['amount'];
    $to = $_POST['to'];
    // Lakukan logika transfer di sini
    echo "The account has been verified and the transfer was successfully made to $to an amount of $amount.";
} else {
    die('Invalid request method');
}
?>


   

3. Memastikan Permintaan POST Terkirim dengan Token yang Benar:

   Pastikan bahwa Anda mengakses file `index.php` melalui server lokal Anda, misalnya `http://localhost/csrf/index.php`, bukan `index.html`.

4. Memastikan Tidak Ada Cache yang Mengganggu:

   Bersihkan cache browser atau gunakan mode incognito untuk memastikan tidak ada cache yang mengganggu proses pengiriman token CSRF.

Dengan langkah-langkah di atas, token CSRF seharusnya dihasilkan dan diverifikasi dengan benar, sehingga menghindari kesalahan "Invalid CSRF token". Pastikan juga bahwa session bekerja dengan baik dan tidak ada konflik di server lokal Anda.

Hasil user


Hasil attacker



Dampak dari Serangan CSRF

Serangan CSRF memungkinkan penyerang untuk membuat pengguna yang sah melakukan tindakan yang tidak diinginkan tanpa sepengetahuan mereka. Dampak dari serangan ini dapat sangat merugikan, termasuk:

  1. Transaksi Finansial Tidak Sah:

    • Penyerang dapat memaksa pengguna untuk melakukan transfer uang atau pembelian online tanpa sepengetahuan pengguna.
  2. Pengubahan Informasi Akun:

    • Informasi pribadi pengguna, seperti alamat email, kata sandi, atau preferensi akun, dapat diubah oleh penyerang.
  3. Penyalahgunaan Hak Istimewa:

    • Pengguna dengan hak administratif dapat dipaksa untuk membuat perubahan kritis pada sistem atau menambahkan pengguna dengan hak istimewa tinggi.
  4. Pencurian Identitas:

    • Informasi pribadi dan kredensial pengguna dapat disalahgunakan untuk berbagai bentuk penipuan dan pencurian identitas.
  5. Kerugian Reputasi:

    • Serangan CSRF pada aplikasi web yang dikelola dapat merusak reputasi bisnis dan mengurangi kepercayaan pengguna.

Kesimpulan

Cross-Site Request Forgery (CSRF) adalah serangan yang mengeksploitasi sesi yang sah untuk mengirimkan permintaan tidak sah ke server. Untuk melindungi aplikasi web dari CSRF, teknik seperti penggunaan token CSRF, verifikasi referer/origin, penggunaan CAPTCHA, pengaturan SameSite pada cookie, dan validasi sisi server harus diimplementasikan. Dengan langkah-langkah ini, risiko serangan CSRF dapat diminimalkan.

Tidak ada komentar:

Posting Komentar

install mutillidae

 SEKEDAP