Skenario 10 / 19FAIL

Unrestricted Resource Consumption - Authentication - Login Rate Limiting

Lingkungan lab — bukan sistem produksi

Tangkapan layar dan trafik mentah tidak diterjemahkan; teks di dalamnya mungkin menggunakan bahasa lain.

crAPI/Evidence/[FAIL] Unrestricted Resource Consumption - Authentication - Login Rate Limiting

01 — Catatan

Catatan pengujian

Kerentanan

[FAIL] Unrestricted Resource Consumption - Authentication - Login Rate Limiting

Deskripsi

Endpoint login crAPI tidak menerapkan rate limiting maupun account lockout. Percobaan login yang gagal berulang kali tidak dibatasi, sehingga memungkinkan brute-force/credential stuffing dan konsumsi sumber daya server tanpa batas.

Dampak

Availability: server dapat dibanjiri permintaan autentikasi tanpa hambatan. Confidentiality: memungkinkan brute-force kredensial untuk mengambil alih akun.

CWE

CWE-307: Improper Restriction of Excessive Authentication Attempts (CWE-770: Allocation of Resources Without Limits)

OWASP

API4:2023 - Unrestricted Resource Consumption

Skenario

Normal: satu login gagal -> 401. Eksploitasi: 20 percobaan beruntun -> semua 401 tanpa 429/lockout, membuktikan tidak ada pembatasan.

Endpoint

POST http://127.0.0.1:8888/identity/api/auth/login

Fitur terdampak

Autentikasi Login (crapi-identity)

Rekomendasi perbaikan

- Terapkan rate limiting per akun/IP dan account lockout progresif. - Tambahkan CAPTCHA/anti-automasi & deteksi anomali. - Batasi konkurensi/permintaan per klien.

Bukti konsep

1) (Screenshot 1) NORMAL: POST /identity/api/auth/login dengan password salah -> 401. 2) (Screenshot 2) EKSPLOITASI: kirim 20 percobaan login beruntun -> semua 401 tanpa HTTP 429/lockout, membuktikan tidak ada rate limiting.
Lihat catatan sumber (bahasa Indonesia)
Vulnerability: [FAIL] Unrestricted Resource Consumption - Authentication - Login Rate Limiting

Description:
Endpoint login crAPI tidak menerapkan rate limiting maupun account lockout. Percobaan login yang gagal berulang kali tidak dibatasi, sehingga memungkinkan brute-force/credential stuffing dan konsumsi sumber daya server tanpa batas.

Impact:
Availability: server dapat dibanjiri permintaan autentikasi tanpa hambatan. Confidentiality: memungkinkan brute-force kredensial untuk mengambil alih akun.

CWE:
CWE-307: Improper Restriction of Excessive Authentication Attempts (CWE-770: Allocation of Resources Without Limits)

OWASP:
API4:2023 - Unrestricted Resource Consumption

Scenario:
Normal: satu login gagal -> 401. Eksploitasi: 20 percobaan beruntun -> semua 401 tanpa 429/lockout, membuktikan tidak ada pembatasan.

Endpoint:
POST http://127.0.0.1:8888/identity/api/auth/login

Affected Feature:
Autentikasi Login (crapi-identity)

Remediation:
- Terapkan rate limiting per akun/IP dan account lockout progresif.
- Tambahkan CAPTCHA/anti-automasi & deteksi anomali.
- Batasi konkurensi/permintaan per klien.

POC:
1) (Screenshot 1) NORMAL: POST /identity/api/auth/login dengan password salah -> 401.
2) (Screenshot 2) EKSPLOITASI: kirim 20 percobaan login beruntun -> semua 401 tanpa HTTP 429/lockout, membuktikan tidak ada rate limiting.

02 — Tangkapan layar

Tangkapan layar (2)

01 / Normal: satu login gagal

Alur normal: satu percobaan login dengan kata sandi yang salah mendapat respons 401.

02 / Pengamatan: 20 percobaan login tanpa rate limit

Dampak: 20 percobaan login tidak terkena rate limit. Kondisi ini membuka peluang brute-force kredensial, credential stuffing, dan konsumsi sumber daya tanpa batas, yang mengancam ketersediaan serta kerahasiaan. Rekaman ini tidak membuktikan pengambilalihan akun atau denial of service.

03 — Request dan response

Rekaman HTTP

Sebagian nilai kredensial disamarkan pada tampilan HTML publik ini. Penyamaran ini tidak menjamin bahwa seluruh data sensitif atau berkas tertaut sudah disamarkan.

REKAMAN 01 / 1Normal: satu login gagal
HTTP request
POST /identity/api/auth/login HTTP/1.1
Host: 127.0.0.1:8888
Content-Type: application/json

{"email":"[REDACTED-EMAIL]","password":"[REDACTED-LAB-VALUE]"}
HTTP response
HTTP/1.1 401
Server: openresty/1.27.1.2
Content-Type: application/json
Content-Length: 76

{
  "token": null,
  "type": "",
  "message": "Invalid Credentials",
  "mfaRequired": false
}

Alur normal: satu percobaan login dengan kata sandi yang salah mendapat respons 401.

REKAMAN 02 / 2Pengamatan: 20 percobaan login tanpa rate limit
HTTP request
POST /identity/api/auth/login HTTP/1.1
Host: 127.0.0.1:8888
Content-Type: application/json

{"email":"[REDACTED-EMAIL]","password":"[REDACTED-LAB-VALUE]"}
# 20 percobaan login BERUNTUN -> semua 401, TIDAK ada HTTP 429/lockout
HTTP response
Status 20 percobaan beruntun:
401 401 401 401 401 401 401 401 401 401 401 401 401 401 401 401 401 401 401 401

=> tidak ada 429/lockout pada percobaan mana pun.

Dampak: 20 percobaan login tidak terkena rate limit. Kondisi ini membuka peluang brute-force kredensial, credential stuffing, dan konsumsi sumber daya tanpa batas, yang mengancam ketersediaan serta kerahasiaan. Rekaman ini tidak membuktikan pengambilalihan akun atau denial of service.