Kembali lagi dengan daffa.info. Hari ini saya membahas tentang serangan no rate limit dan bagaimana cara pencegahannya, Sebelum membahas lebih lanjut. Apa itu serangan no rate limit? Ayo kita kupas pelan-pelan dibawah.

No Rate Limit adalah suatu celah yang dimanfaatkan untuk melakukan request berulang kali tanpa ada batasan dari website. Atau yang biasa dikenal dengan sebutan “bruteforce” dan serangan no rate limit attack ini termasuk ke dalam CWE-770: Allocation of Resources Without Limits or Throttling.

Skenario-skenario penyerangan

  • Spamming

Spamming ini berhubungan erat dengan email/sms. Dengan no rate limit attack, attacker dapat spam emai/sms korban dengan cara melakukan request yang diulang-ulang. Mencarinya bisa dengan mencari fitur “Forget password”,”Forget User”, dan lain-lain. Semisal saya punya request seperti ini

POST /accounts/auth/forgot HTTP/1.1
 Host: example.com
 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:71.0) Gecko/20100101 Firefox/71.0
 Accept: application/json
 Accept-Language: en-US,en;q=0.5
 Accept-Encoding: gzip, deflate
 Content-Type: application/json
 api-app-key: 3ed6ceed-0e86-44dd-a3ae-47be03c1f863
 Content-Length: 29
 Origin: https://example.com
 Connection: close
 Referer: https://example.com/auth/forgot-password

{"email":"example@gmail.com"}

Kemudian responsenya adalah

HTTP/1.1 200 OK
Date: Mon, 23 Dec 2019 06:17:22 GMT
Content-Type: application/json
......

Dan attacker mengulangi request yang sama seperti yang ada diatas untuk spamming email korban

Contoh email yang terkena spamming
  • Email/User Enumeration

Dampak lain selain spamming ialah email/user enumeration. Attacker tahu email/user apa saja yang sudah terdaftar di website tersebut. Biasanya terjadi pada fitur signup/register atau forget password.

POST /api/v1/home/checkexistence HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:69.0) Gecko/20100101 Firefox/69.0
Accept: application/json
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Content-Type: application/json
useAuth: A
Content-Length: 28
Origin: http://example.com
Connection: close
Referer: http://example.com/signup

{"email":"example@gmail.com"} 

Dan responsenya nanti adalah

HTTP/1.1 200 OK
Server: nginx/1.15.9 (Ubuntu)
Date: Wed, 02 Oct 2019 09:25:53 GMT
.......

{"status":false,"msg":"Email taken"}

Jika status false, berarti email tersebut sudah terdaftar di website example.com, Jika belum akan berstatus true. Ini hanyalah contoh semata, tidak semua website memiliki response yang sama.

  • Bypass Second Factor Authentication

Ini dampak paling berbahaya diantara dampak-dampak yang lain yaitu bypass 2FA. Ini biasa terjadi pada saat login, dan terdapat seperti verifikasi keamanan. Biasanya dalam bentuk kombinasi angka.

Image result for 2fa"
Contoh 2FA
GET /accounts/md15/verifications/email/111111 HTTP/1.1
Host: api.example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:71.0) Gecko/20100101 Firefox/71.0
Accept: application/json
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
api-app-key: 3ed6ceed-0e86-44dd-a3ae-47be03c1f863
Origin: https://example.com
Connection: close
Referer: https://example.com/auth/verification/md15/email

Contoh seperti ini dan responsenya adalah

HTTP/1.1 400 Bad Request
Date: Mon, 23 Dec 2019 06:38:34 GMT
Content-Type: application/json
Content-Length: 60

{"code":"Error","message":"Verification code is incorrect."}

Jadi, kita harus mencari kombinasi angka dari 0 sampai 999999 karena di website example.com membutuhkan 6 kombinasi angka. Disarankan memakai burpsuite karena lebih mudah untuk melakukan serangan ini.

Cara mengatasi

Memberi limit di setiap endpoint di website anda.

Sekian post hari ini, Terima kasih sudah berkunjung 🙂 tunggu post yang akan datang!