Meretas Toks CSRF menggunakan Hack Riwayat CSS

Pembaruan: Peneliti keamanan Sirdarckcat dan Gareth cukup berbaik hati untuk membagikan kode untuk token finder CSRF berbasis CSS murni di sini. Ini lebih tersembunyi daripada PoC saya di bawah ini, yang menggunakan kombinasi JS dan CSS. Jadi, itu masih akan berfungsi bahkan jika Anda menonaktifkan javascript dan Anda tidak aman lagi :(:( . Untuk membuat PoC ini lebih responsif terhadap klien, Anda perlu menggunakan beberapa stylesheet CSS menggunakan perintah impor. Satu-satunya masalah yang saya lihat dengan pendekatan berbasis CSS murni ini adalah akan ada latensi jaringan yang terlibat dengan ruang-ruang utama yang besar karena stylesheet CSS besar Anda perlu diunduh oleh browser Anda.


Saya sedang memikirkan masalah Pemalsuan Permintaan Lintas Situs dan strategi mitigasi saat ini yang digunakan dalam Industri. Dalam banyak aplikasi dunia nyata yang telah saya uji sejauh ini, saya melihat penggunaan token acak ditambahkan sebagai bagian dari url. Jika permintaan gagal memberikan token atau memberikan token dengan nilai yang salah, maka permintaan tersebut ditolak. Ini mencegah CSRF atau eksekusi lintas domain tanpa fungsi apa pun.

Selama ini, dianggap tidak mungkin bagi penyerang untuk menemukan token CSRF Anda menggunakan Serangan Brute Force di server.

Alasannya adalah:

  1. Itu menghasilkan banyak suara di jaringan dan lambat. Jadi kemungkinan besar IDS atau Web App Firewall akan mengambil perilaku jahat dan memblokir ip Anda. Misalnya, token CSRF Base16 dengan panjang 5 karakter (dimulai dengan karakter) akan menghasilkan sekitar 393.216 permintaan.
  2. Banyak aplikasi yang diprogram untuk batalkan sesi Anda setelah itu mendeteksi lebih dari sejumlah permintaan dengan nilai token yang tidak valid. Misalnya. 30.

Saya akan mengubah kepercayaan ini dengan menunjukkan kepada Anda teknik untuk cepat menemukan token CSF tanpa menghasilkan peringatan. Teknik ini adalah a serangan sisi klien, jadi hampir tidak ada lalu lintas jaringan yang dihasilkan dan karenanya, server Anda dan IDS / Web App Firewall menang’sama sekali tidak memperhatikannya. Serangan ini didasarkan pada Sejarah Hack CSS populer yang ditemukan oleh Jeremiah Grossman 3 tahun yang lalu.

Dalam exploit ini, kami menemukan token csrf dengan cara memaksa berbagai set url dalam riwayat browser. Kami akan mencoba untuk menanamkan nilai token csrf yang berbeda sebagai bagian dari url dan memeriksa apakah pengguna telah mengunjungi url tersebut. Jika ya, ada peluang baik bahwa pengguna menggunakan token CSRF yang sama di sesi aktif saat ini atau mungkin menggunakan token itu di sesi sebelumnya. Setelah kita memiliki daftar semua token tersebut, kita bisa mencoba serangan csrf kita di server menggunakan daftar kecil itu. Saat ini serangan ini layak untuk token dengan panjang 5 karakter atau lebih pendek. Saya mencobanya pada base16 string dengan panjang 5 dan mampu memaksa seluruh ruang kunci dalam waktu kurang dari 2 menit.

Beberapa prasyarat agar serangan ini berhasil juga

  1. Token CSRF tetap sama untuk sesi pengguna tertentu. misalnya csrf token = hash (session_id) OR
  2. Token CSRF yang dikirimkan dalam bentuk lama untuk sesi yang sama diterima. Sering kali, ini merupakan kasus yang meningkatkan pengalaman pengguna dan memungkinkan menggunakan tombol browser maju dan mundur.

Bukti dari konsep tersedia di sini.
Sebelum menjalankan PoC, Anda perlu mengubah nilai paramater url dan csrftoken.

Untuk pengujian menggunakan default, Anda harus terlebih dahulu mengunjungi salah satu url berikut, mis.

  1. https://securethoughts.com/?param1=val1&csrftoken = b59fe [ubah b59fe menjadi string 5-digit basis 16 yang dimulai dengan karakter, i.e.greater than a0000]
  2. http://tinyurl.com/l2lwgd [yang merupakan 301 redirect ke url sebelumnya].

catatan: http://www.securethoughts.com dan https://securethoughts.com diperlakukan secara berbeda saat menyimpan dalam riwayat browser.

Contoh dijalankan akan terlihat seperti ini -

meretas csrf token menggunakan hack sejarah cssmeretas csrf token menggunakan hack sejarah css

Untuk membuat serangan ini tidak mungkin dilakukan,

Solusi Sisi Server (untuk pengembang):

  • Jadikan token CSRF Anda cukup lama (8 karakter atau lebih) menjadi tidak layak untuk serangan KLIEN SISI. Kekuatan pemrosesan yang terus meningkat akan membuat serangan ini layak untuk token yang lebih lama juga.
  • Simpan token CSRF Anda sebagai bagian dari bidang formulir tersembunyi, alih-alih memasukkan url.
  • Gunakan token acak yang berbeda untuk setiap pengiriman formulir dan tidak menerima token yang sudah usang, bahkan untuk sesi yang sama.

Solusi Sisi Klien (untuk pelanggan / pengguna Anda):

  • Gunakan plugin browser seperti SafeHistory, yang bertahan terhadap teknik pelacakan berbasis tautan yang dikunjungi.
  • Gunakan mode penelusuran pribadi di peramban Anda.

Dan yang terakhir, tetapi tidak sedikit, XSS melenyapkan semua perlindungan CSRF yang mungkin. Jadi, singkirkan XSS terlebih dahulu.

Saya ingin mengucapkan terima kasih kepada Yeremia karena memberikan umpan baliknya yang mendalam tentang pos ini.

Brayan Jackson Administrator
Sorry! The Author has not filled his profile.
follow me