Kerentanan
[FAIL] Improper Inventory Management - Authentication - OTP Endpoint Versions
Deskripsi
Endpoint verifikasi OTP tersedia dalam beberapa versi yang aktif bersamaan: versi lama /identity/api/auth/v2/check-otp masih berfungsi berdampingan dengan versi terbaru v3. Versi lama/undokumented meningkatkan attack surface dan berpotensi memiliki kontrol keamanan yang berbeda.
Dampak
Confidentiality & Integrity: versi lama yang masih hidup memperluas permukaan serangan; penyerang dapat memilih versi dengan proteksi paling lemah (mis. untuk brute-force OTP).
CWE
CWE-1059: Insufficient Technical Documentation (terkait CWE-1104: Use of Unmaintained Third Party Components / versi lama)
OWASP
API9:2023 - Improper Inventory Management
Skenario
v3 (versi saat ini) aktif. Eksploitasi: v2 (versi lama) juga masih aktif -> improper inventory (versi lama tidak dinonaktifkan).
Endpoint
POST http://127.0.0.1:8888/identity/api/auth/v2/check-otp
POST http://127.0.0.1:8888/identity/api/auth/v3/check-otp
Fitur terdampak
Reset Password via OTP (crapi-identity)
Rekomendasi perbaikan
- Nonaktifkan/retire versi API lama (v2) yang tidak lagi digunakan.
- Kelola inventaris versi API & dokumentasikan endpoint yang aktif.
- Terapkan kontrol keamanan seragam di semua versi yang masih hidup.
Bukti konsep
- (Screenshot 1) POST /identity/api/auth/v3/check-otp (versi saat ini) -> merespons.
- (Screenshot 2) POST /identity/api/auth/v2/check-otp (versi LAMA) -> masih merespons (Invalid OTP), membuktikan versi lama belum dinonaktifkan.
Rekaman lengkap
LAB Semua target adalah sistem lab. Tidak ada satu pun yang merupakan pekerjaan klien. Bukti ditampilkan apa adanya; secret dihitamkan.
Versi saat ini: v3/check-otp
Versi terbaru endpoint verifikasi OTP (v3) aktif.
HTTP request
POST /identity/api/auth/v3/check-otp HTTP/1.1
Host: 127.0.0.1:8888
Content-Type: application/json
{"email":"[REDACTED-EMAIL]","otp":"0000","password":"[REDACTED-LAB-VALUE]"}
HTTP response
HTTP/1.1 500
Server: openresty/1.27.1.2
Content-Type: application/json
Content-Length: 58
{
"message": "Invalid OTP! Please try again..",
"status": 500
}
Pengamatan: versi lama v2 masih aktif
Dampak: endpoint lama v2/check-otp masih aktif bersama v3 sehingga permukaan serangan bertambah. Perlindungannya mungkin berbeda dari v3 atau lebih lemah; rekaman ini belum membuktikan adanya bypass.
HTTP request
POST /identity/api/auth/v2/check-otp HTTP/1.1
Host: 127.0.0.1:8888
Content-Type: application/json
{"email":"[REDACTED-EMAIL]","otp":"0000","password":"[REDACTED-LAB-VALUE]"}
HTTP response
HTTP/1.1 500
Server: openresty/1.27.1.2
Content-Type: application/json
Content-Length: 58
{
"message": "Invalid OTP! Please try again..",
"status": 500
}
← Kasus sebelumnya: Broken Object Level Authorization - Workshop - Mechanic Report (Unauthenticated) Kasus berikutnya: JWT Signature Not Verified - Authentication - JWT Validation →