Apa Itu Race Condition Vulnerability Dan Contoh Exploit Bug Race Condition - CRUDPRO

Apa Itu Race Condition Vulnerability Dan Contoh Exploit Bug Race Condition

Apa Itu Race Condition Vulnerability Dan Contoh Exploit Bug Race Condition

Ingat ini, dialog terkenal dari film Bollywood 3 idiot. Dalam perlombaan orang yang melewati garis finis pertama menjadi yang pertama.

Pernah terpikir jika semua peserta menyelesaikan garis finis secara bersamaan. Kedengarannya bagus ... Tapi apakah itu praktis dalam skenario kehidupan nyata? Itu bagian yang menarik.

Apa itu Race Condition?

Race Condition terjadi ketika beberapa utas dapat mengakses data bersama dan mereka mencoba mengubahnya secara bersamaan. Karena algoritme penjadwalan utas dapat bertukar antar utas kapan saja, Anda tidak tahu urutan utas yang akan mencoba mengakses data bersama. Oleh karena itu, hasil perubahan data tergantung pada algoritma penjadwalan thread, yaitu kedua thread “berlomba” untuk mengakses/mengubah data.

Mari kita ambil contoh untuk memahami skenario ini.

Apa Itu Race Condition Vulnerability Dan Contoh Exploit Bug Race Condition

Di sini 2 goroutine dipecat dan mereka diberikan tugas sederhana hanya untuk menginisialisasi nilai dalam variabel "nilai" dan menambah & mencetak nilai itu. Akhirnya ketika kedua goroutine selesai , nilai variabel "counter" harus dicetak.

Ekspektasi : Output yang diharapkan seharusnya

Apa Itu Race Condition Vulnerability Dan Contoh Exploit Bug Race Condition

Ya, kami mendapat seperti yang diharapkan. Tapi tunggu sebentar, tekan kode yang sama beberapa kali dan amati hasilnya.

Apa Itu Race Condition Vulnerability Dan Contoh Exploit Bug Race Condition

Sekarang kami mengerti apa sebenarnya masalahnya. Kedua goroutine mencoba mengakses lokasi memori yang sama secara bersamaan. Meskipun masalah ini dapat diselesaikan hanya dengan menambahkan mutex untuk menangani konkurensi ini. Tapi di sini kami sangat tertarik bagaimana Race Condition ini bisa berguna bagi penyerang.

Dimana saya bisa mencari skenario seperti itu?

Berburu bug adalah tentang memahami alur aplikasi web atau aplikasi seluler. Semakin Anda memahami target, semakin mudah untuk mengeksploitasinya juga.

Bagian kritis yang rentan terhadap jenis skenario di mana dua atau lebih sumber mencoba mengakses sumber daya yang sama. Vektor serangan yang paling umum adalah bagian yang berisi kode kupon, kode undangan, atau data lainnya yang hanya dapat digunakan sekali untuk pengguna tertentu. nah ini masuk akal sekarang.

Bagaimana saya menemukan bug serupa di program bug bounty!

Jadi, saya mencari di program publik yang hadir untuk waktu yang lama di Bugcowd. Saya mulai dengan fase pengintaian. Sementara pengintaian saya di latar belakang, saya mengamati fungsi dan perilaku aplikasi web itu.

Ada bagian mengundang teman karena fitur ini sekarang hadir di sebagian besar perusahaan. Saya tertarik dengan apa yang akan terjadi jika saya mengundang beberapa teman. Mereka memiliki banyak hadiah untuk ini tergantung pada negaranya.

Seperti ada satu opsi untuk Inggris, setiap kali pengguna mengundang 3 teman dan mereka menghabiskan 200 GBP (masing-masing). Pengguna yang mengundang mereka akan mendapatkan hadiah 50GBP (pound).

Bagaimana cara kerja undangan ini?

saat mengundang saya melihat 2 opsi

  1. Undang melalui tautan
  2. Undang melalui kode kupon

Saya pikir mari kita bermain dengan kode kupon. Di sini sebuah ide muncul di benak saya bagaimana dengan teman yang saya undang kode kupon lagi dan lagi & server menerima permintaan itu tetapi saya dapat melihat pengguna dapat menekan kode ini hanya sekali.

Lalu saya berpikir untuk mencari Race condition, tetapi bagaimana ini bisa membantu di sini?

Misalkan saya telah mengundang 18 pengguna jadi ketika 18 pengguna ini akan menghabiskan masing-masing 200GBP (yaitu 18*200 = 3600GBP) , saya akan mendapatkan 50GBP untuk setiap 3 pengguna(yaitu 6*50=300GBP) .

Saatnya menyerang

Persyaratan :

  1. Dua akun pengguna (pengguna1 , pengguna2)
  2. Turbo Intruder (plugin BurpSuite)

Turbo Intruder adalah alat yang jauh lebih kuat yang memiliki kemampuan untuk mengirim 30.000 permintaan per detik Jika dikonfigurasi dengan cara itu.

Untuk pemasangan dan penggunaan turbo penyusup, saya telah menemukan tutorial yang sempurna di sini: https://portswigger.net/research/turbo-intruder-embracing-the-billion-request-attack

Dari akun user1 saya mengambil kupon undangan.

Ada opsi di profil jika Anda lupa memasukkan kode undangan saat mendaftar maka Anda juga memiliki opsi untuk memasukkannya sesudahnya.

Jadi, saya mendaftar dengan akun user2 dan pergi ke bagian untuk memasukkan kode undangan, yang saya salin dari akun user1.

Kemudian saya memasukkan kode kupon itu dan menangkap permintaan itu di proksi Burp. Di bagian tubuh saya bisa melihat permintaan seperti ini

{“referralToken”:”kode undangan”}

Klik dua kali pada kode undangan untuk memilih dan mengirim permintaan ke penyusup turbo

Lalu aku bisa melihat permintaan seperti ini

POST /gateway/v1/virality/guests/18343692/referrals HTTP/1.1

Host: example.com

User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:74.0) Gecko/20100101 Firefox/74.0

.

.

Cookie: {cookie_value}

{“referralToken”:”%s”}

Seperti yang kita lihat, penyusup turbo menyetel kode undangan yang dipilih sebagai %s

Turbo penyusup mendukung skrip python untuk mengkonfigurasi dan menjalankan permintaan seperti yang kita inginkan. Saya menekan skrip di bagian skrip.

Apa Itu Race Condition Vulnerability Dan Contoh Exploit Bug Race Condition
Jalankan serangan

Kita bisa melihat ada sekitar beberapa tanggapan yang memiliki 200 kode status dan sisanya 40x

Apa Itu Race Condition Vulnerability Dan Contoh Exploit Bug Race Condition

Sekarang untuk mengonfirmasi apakah permintaan ini diterima oleh server dan undangan tercermin di profil pengguna1. Saya beralih di akun user1 dan memeriksa pengguna yang saya undang .

Apa Itu Race Condition Vulnerability Dan Contoh Exploit Bug Race Condition

Ya, kerentanan Race Condition berhasil dieksploitasi.

Dampaknya Sekarang

Seperti yang kita lihat user1 telah mengundang user2 beberapa kali (Katakanlah 18). Jadi ketika user2 akan menghabiskan 200GBP , di sini semua 18pengguna adalah sama (u1,u2…u18=user2) pengguna 1 akan mendapatkan 50*6=300GBP(yaitu 50*{total_invite/3}).