01 / RINGKASAN EKSEKUTIF
Ringkasan eksekutif
Pengujian lab crAPI mencakup 19 skenario: 11 FAIL dan 8 PASS. Hasil ini berlaku untuk lingkungan lab, bukan sistem produksi. Angka tersebut menghitung skenario pengujian, bukan kontrol keamanan yang berbeda.
LingkungancrAPIAplikasi lab · Pengujian penetrasi
Tangkapan layar49 Tangkapan layarDari skenario pengujian berstatus PASS dan FAIL
02 / METODOLOGI
Metodologi
Catatan pengujian menjelaskan fitur, langkah yang dilakukan, dan perilaku yang diamati. Jika tersedia, request normal dibandingkan dengan upaya penyalahgunaan untuk menunjukkan perbedaannya dan menjelaskan hasil pengujian.
- Ruang lingkup, endpoint, dan perilaku normal
- Langkah pengujian dan variasi request
- Response yang diamati dan dampak keamanan
- Hasil PASS atau FAIL, beserta referensi CWE/OWASP dan rekomendasi perbaikan jika relevan
03 / SKENARIO PENGUJIAN DAN BUKTISkenario pengujian dan bukti
Telusuri skenario berstatus PASS dan FAIL di bawah. Buka skenario untuk melihat tangkapan layar dan rekaman HTTP yang tersedia.
01 / 19FAIL
Broken Function Level Authorization - Workshop - Management Users Endpoint
2 tangkapan layar · 2 rekaman HTTP
Kerentanan
[FAIL] Broken Function Level Authorization - Workshop - Management Users Endpoint
Deskripsi
Endpoint manajemen /workshop/api/management/users/all -- yang semestinya hanya untuk administrator -- dapat diakses oleh pengguna terautentikasi biasa (role=user). Endpoint mengembalikan data seluruh pengguna aplikasi.
Dampak
Confidentiality: pengguna biasa mana pun dapat mengunduh PII seluruh pengguna (17 user): email, nomor telepon, dan saldo credit. Kontrol otorisasi tingkat fungsi (function-level) tidak ditegakkan.
CWE
CWE-285: Improper Authorization (terkait CWE-639)
OWASP
API5:2023 - Broken Function Level Authorization (dan API3:2023 - Excessive Data Exposure)
Skenario
Normal: user biasa hanya melihat data akunnya sendiri. Eksploitasi: user biasa yang sama mengakses endpoint manajemen /workshop/api/management/users/all -> 200 mengembalikan PII seluruh pengguna. Hasil akhir menampakkan CIA (Confidentiality).
Endpoint
GET http://127.0.0.1:8888/workshop/api/management/users/all
Fitur terdampak
Endpoint Manajemen Pengguna (crapi-workshop)
Rekomendasi perbaikan
- Terapkan otorisasi berbasis peran (role) pada seluruh endpoint manajemen/administratif; verifikasi role=admin di sisi server.
- Jangan mengandalkan ketiadaan tautan UI sebagai kontrol akses.
- Minimalkan data yang dikembalikan.
Bukti konsep
1) (Screenshot 1) NORMAL: GET /identity/api/v2/user/dashboard dengan token user biasa -> 200, hanya data akun sendiri (id=8).
2) (Screenshot 2) EKSPLOITASI + CIA: GET /workshop/api/management/users/all dengan token user biasa yang SAMA -> 200 mengembalikan PII seluruh pengguna (17 user).
Lihat catatan sumber (bahasa Indonesia)
Vulnerability: [FAIL] Broken Function Level Authorization - Workshop - Management Users Endpoint
Description:
Endpoint manajemen /workshop/api/management/users/all -- yang semestinya hanya untuk administrator -- dapat diakses oleh pengguna terautentikasi biasa (role=user). Endpoint mengembalikan data seluruh pengguna aplikasi.
Impact:
Confidentiality: pengguna biasa mana pun dapat mengunduh PII seluruh pengguna (17 user): email, nomor telepon, dan saldo credit. Kontrol otorisasi tingkat fungsi (function-level) tidak ditegakkan.
CWE:
CWE-285: Improper Authorization (terkait CWE-639)
OWASP:
API5:2023 - Broken Function Level Authorization (dan API3:2023 - Excessive Data Exposure)
Scenario:
Normal: user biasa hanya melihat data akunnya sendiri. Eksploitasi: user biasa yang sama mengakses endpoint manajemen /workshop/api/management/users/all -> 200 mengembalikan PII seluruh pengguna. Hasil akhir menampakkan CIA (Confidentiality).
Endpoint:
GET http://127.0.0.1:8888/workshop/api/management/users/all
Affected Feature:
Endpoint Manajemen Pengguna (crapi-workshop)
Remediation:
- Terapkan otorisasi berbasis peran (role) pada seluruh endpoint manajemen/administratif; verifikasi role=admin di sisi server.
- Jangan mengandalkan ketiadaan tautan UI sebagai kontrol akses.
- Minimalkan data yang dikembalikan.
POC:
1) (Screenshot 1) NORMAL: GET /identity/api/v2/user/dashboard dengan token user biasa -> 200, hanya data akun sendiri (id=8).
2) (Screenshot 2) EKSPLOITASI + CIA: GET /workshop/api/management/users/all dengan token user biasa yang SAMA -> 200 mengembalikan PII seluruh pengguna (17 user).
02 / 19FAIL
Broken Object Level Authorization - Vehicle - Location Tracking
2 tangkapan layar · 2 rekaman HTTP
Kerentanan
[FAIL] Broken Object Level Authorization - Vehicle - Location Tracking
Deskripsi
Endpoint lokasi kendaraan mengembalikan posisi GPS milik pengguna lain hanya berbekal UUID kendaraan. Server memverifikasi autentikasi tetapi tidak memverifikasi kepemilikan objek (BOLA/IDOR).
Dampak
Confidentiality: pelacakan lokasi fisik real-time pengguna lain serta kebocoran nama & email; berpotensi stalking/penargetan.
CWE
CWE-639: Authorization Bypass Through User-Controlled Key
OWASP
API1:2023 - Broken Object Level Authorization
Skenario
Normal: attacker membaca lokasi kendaraan miliknya sendiri -> 200. Eksploitasi: UUID diganti ke kendaraan korban -> 200 lokasi+email korban -> CIA (Confidentiality).
Endpoint
GET http://127.0.0.1:8888/identity/api/v2/vehicle/{vehicleId}/location
Fitur terdampak
Pelacakan Lokasi Kendaraan (crapi-identity)
Rekomendasi perbaikan
- Verifikasi kepemilikan kendaraan terhadap user pada token sebelum mengembalikan lokasi.
- Terapkan pemeriksaan otorisasi tingkat objek terpusat.
Bukti konsep
1) (Screenshot 1) NORMAL: GET /identity/api/v2/vehicle/9b3ce26b-d797-404b-a961-09d7e45e0d1b/location (kendaraan sendiri) dengan token attacker -> 200.
2) (Screenshot 2) EKSPLOITASI + CIA: ganti UUID pada path menjadi 8ba9066d-8484-4ef7-8a7b-c0fa3cb2e687 (kendaraan KORBAN), token sama -> 200 mengembalikan koordinat GPS + email korban ([REDACTED-EMAIL]).
Lihat catatan sumber (bahasa Indonesia)
Vulnerability: [FAIL] Broken Object Level Authorization - Vehicle - Location Tracking
Description:
Endpoint lokasi kendaraan mengembalikan posisi GPS milik pengguna lain hanya berbekal UUID kendaraan. Server memverifikasi autentikasi tetapi tidak memverifikasi kepemilikan objek (BOLA/IDOR).
Impact:
Confidentiality: pelacakan lokasi fisik real-time pengguna lain serta kebocoran nama & email; berpotensi stalking/penargetan.
CWE:
CWE-639: Authorization Bypass Through User-Controlled Key
OWASP:
API1:2023 - Broken Object Level Authorization
Scenario:
Normal: attacker membaca lokasi kendaraan miliknya sendiri -> 200. Eksploitasi: UUID diganti ke kendaraan korban -> 200 lokasi+email korban -> CIA (Confidentiality).
Endpoint:
GET http://127.0.0.1:8888/identity/api/v2/vehicle/{vehicleId}/location
Affected Feature:
Pelacakan Lokasi Kendaraan (crapi-identity)
Remediation:
- Verifikasi kepemilikan kendaraan terhadap user pada token sebelum mengembalikan lokasi.
- Terapkan pemeriksaan otorisasi tingkat objek terpusat.
POC:
1) (Screenshot 1) NORMAL: GET /identity/api/v2/vehicle/9b3ce26b-d797-404b-a961-09d7e45e0d1b/location (kendaraan sendiri) dengan token attacker -> 200.
2) (Screenshot 2) EKSPLOITASI + CIA: ganti UUID pada path menjadi 8ba9066d-8484-4ef7-8a7b-c0fa3cb2e687 (kendaraan KORBAN), token sama -> 200 mengembalikan koordinat GPS + email korban ([REDACTED-EMAIL]).
03 / 19FAIL
Broken Object Level Authorization - Workshop - Mechanic Report
2 tangkapan layar · 2 rekaman HTTP
Kerentanan
[FAIL] Broken Object Level Authorization - Workshop - Mechanic Report
Deskripsi
Endpoint mechanic_report menerima report_id sekuensial dan mengembalikan laporan servis milik pengguna lain (VIN & email pemilik) tanpa verifikasi keterkaitan dengan pemanggil.
Dampak
Confidentiality: kebocoran lintas-pengguna atas VIN, detail kendaraan, dan email pemilik untuk seluruh laporan servis.
CWE
CWE-639: Authorization Bypass Through User-Controlled Key
OWASP
API1:2023 - Broken Object Level Authorization (dan API3:2023 - BOPLA)
Skenario
Normal: membaca report_id=1. Eksploitasi: enumerasi report_id (mis. =2) -> membocorkan VIN + email owner berbeda -> CIA (Confidentiality).
Endpoint
GET http://127.0.0.1:8888/workshop/api/mechanic/mechanic_report?report_id={id}
Fitur terdampak
Laporan Servis Mekanik (crapi-workshop)
Rekomendasi perbaikan
- Verifikasi report_id terkait user/mekanik pemanggil.
- Gunakan UUID & minimalkan field yang dikembalikan.
Bukti konsep
1) (Screenshot 1) NORMAL: GET mechanic_report?report_id=1 dengan token attacker -> 200 (referensi).
2) (Screenshot 2) EKSPLOITASI + CIA: ubah parameter menjadi report_id=2 -> 200 membocorkan VIN + email pemilik lain ([REDACTED-EMAIL]).
Lihat catatan sumber (bahasa Indonesia)
Vulnerability: [FAIL] Broken Object Level Authorization - Workshop - Mechanic Report
Description:
Endpoint mechanic_report menerima report_id sekuensial dan mengembalikan laporan servis milik pengguna lain (VIN & email pemilik) tanpa verifikasi keterkaitan dengan pemanggil.
Impact:
Confidentiality: kebocoran lintas-pengguna atas VIN, detail kendaraan, dan email pemilik untuk seluruh laporan servis.
CWE:
CWE-639: Authorization Bypass Through User-Controlled Key
OWASP:
API1:2023 - Broken Object Level Authorization (dan API3:2023 - BOPLA)
Scenario:
Normal: membaca report_id=1. Eksploitasi: enumerasi report_id (mis. =2) -> membocorkan VIN + email owner berbeda -> CIA (Confidentiality).
Endpoint:
GET http://127.0.0.1:8888/workshop/api/mechanic/mechanic_report?report_id={id}
Affected Feature:
Laporan Servis Mekanik (crapi-workshop)
Remediation:
- Verifikasi report_id terkait user/mekanik pemanggil.
- Gunakan UUID & minimalkan field yang dikembalikan.
POC:
1) (Screenshot 1) NORMAL: GET mechanic_report?report_id=1 dengan token attacker -> 200 (referensi).
2) (Screenshot 2) EKSPLOITASI + CIA: ubah parameter menjadi report_id=2 -> 200 membocorkan VIN + email pemilik lain ([REDACTED-EMAIL]).
04 / 19FAIL
Improper Inventory Management - Authentication - OTP Endpoint Versions
2 tangkapan layar · 2 rekaman HTTP
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
1) (Screenshot 1) POST /identity/api/auth/v3/check-otp (versi saat ini) -> merespons.
2) (Screenshot 2) POST /identity/api/auth/v2/check-otp (versi LAMA) -> masih merespons (Invalid OTP), membuktikan versi lama belum dinonaktifkan.
Lihat catatan sumber (bahasa Indonesia)
Vulnerability: [FAIL] Improper Inventory Management - Authentication - OTP Endpoint Versions
Description:
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.
Impact:
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
Scenario:
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
Affected Feature:
Reset Password via OTP (crapi-identity)
Remediation:
- 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.
POC:
1) (Screenshot 1) POST /identity/api/auth/v3/check-otp (versi saat ini) -> merespons.
2) (Screenshot 2) POST /identity/api/auth/v2/check-otp (versi LAMA) -> masih merespons (Invalid OTP), membuktikan versi lama belum dinonaktifkan.
05 / 19FAIL
JWT Signature Not Verified - Authentication - JWT Validation
5 tangkapan layar · 3 rekaman HTTP · 2 catatan proses
Kerentanan
[FAIL] JWT Signature Not Verified - Authentication - JWT Validation
Deskripsi
Layanan identity crAPI tidak memverifikasi tanda tangan JWT. Token ber-header alg:none tanpa signature diterima, dan token RS256 yang payload-nya diubah tanpa di-resign juga diterima. Penyerang bebas memalsukan token untuk user mana pun dan menaikkan role menjadi admin.
Dampak
Confidentiality: data akun korban dapat dibaca. Integrity: identitas & role (admin) dapat dipalsukan -> account takeover penuh atas seluruh pengguna tanpa kredensial.
CWE
CWE-347: Improper Verification of Cryptographic Signature
OWASP
API2:2023 - Broken Authentication
Skenario
Normal: token sah role=user hanya mengakses data sendiri. Eksploitasi: token palsu (alg:none / RS256 ter-edit) menyamar sebagai ADMIN (sub=[REDACTED-EMAIL], role=admin) -> mengakses akun admin (id=5) -> CIA (Confidentiality + Integrity).
Endpoint
GET http://127.0.0.1:8888/identity/api/v2/user/dashboard (seluruh endpoint identity berbasis JWT)
Fitur terdampak
Autentikasi berbasis JWT (crapi-identity)
Rekomendasi perbaikan
- Verifikasi signature JWT dengan kunci publik RS256 pada tiap request.
- Tolak eksplisit alg:none & lakukan algorithm allow-listing (hanya RS256).
- Gunakan pustaka JWT matang; validasi exp/iss/aud.
Bukti konsep
1) (Screenshot 1) NORMAL: GET /identity/api/v2/vehicle/vehicles dengan token RS256 sah (ditampilkan utuh) -> 200, hanya data milik sendiri.
2) (Screenshot 2) PROSES alg:none: bongkar token asli, base64url-decode header & payload, ubah alg menjadi 'none' tanpa signature dan payload sub=[REDACTED-EMAIL]/role=admin, lalu susun ulang menjadi token palsu (ditampilkan utuh).
3) (Screenshot 3) EKSPLOITASI: kirim token alg:none -> 200 mengembalikan akun ADMIN (id=5, ROLE_ADMIN).
4) (Screenshot 4) PROSES tamper RS256: ambil token RS256 asli, edit payload sub=[REDACTED-EMAIL] & role=admin, pasang kembali signature LAMA tanpa re-sign (token utuh).
5) (Screenshot 5) DAMPAK CIA: kirim token RS256 tampered -> tetap 200 mengembalikan akun ADMIN -> membuktikan signature tidak diverifikasi (Confidentiality + Integrity).
Lihat catatan sumber (bahasa Indonesia)
Vulnerability: [FAIL] JWT Signature Not Verified - Authentication - JWT Validation
Description:
Layanan identity crAPI tidak memverifikasi tanda tangan JWT. Token ber-header alg:none tanpa signature diterima, dan token RS256 yang payload-nya diubah tanpa di-resign juga diterima. Penyerang bebas memalsukan token untuk user mana pun dan menaikkan role menjadi admin.
Impact:
Confidentiality: data akun korban dapat dibaca. Integrity: identitas & role (admin) dapat dipalsukan -> account takeover penuh atas seluruh pengguna tanpa kredensial.
CWE:
CWE-347: Improper Verification of Cryptographic Signature
OWASP:
API2:2023 - Broken Authentication
Scenario:
Normal: token sah role=user hanya mengakses data sendiri. Eksploitasi: token palsu (alg:none / RS256 ter-edit) menyamar sebagai ADMIN (sub=[REDACTED-EMAIL], role=admin) -> mengakses akun admin (id=5) -> CIA (Confidentiality + Integrity).
Endpoint:
GET http://127.0.0.1:8888/identity/api/v2/user/dashboard (seluruh endpoint identity berbasis JWT)
Affected Feature:
Autentikasi berbasis JWT (crapi-identity)
Remediation:
- Verifikasi signature JWT dengan kunci publik RS256 pada tiap request.
- Tolak eksplisit alg:none & lakukan algorithm allow-listing (hanya RS256).
- Gunakan pustaka JWT matang; validasi exp/iss/aud.
POC:
1) (Screenshot 1) NORMAL: GET /identity/api/v2/vehicle/vehicles dengan token RS256 sah (ditampilkan utuh) -> 200, hanya data milik sendiri.
2) (Screenshot 2) PROSES alg:none: bongkar token asli, base64url-decode header & payload, ubah alg menjadi 'none' tanpa signature dan payload sub=[REDACTED-EMAIL]/role=admin, lalu susun ulang menjadi token palsu (ditampilkan utuh).
3) (Screenshot 3) EKSPLOITASI: kirim token alg:none -> 200 mengembalikan akun ADMIN (id=5, ROLE_ADMIN).
4) (Screenshot 4) PROSES tamper RS256: ambil token RS256 asli, edit payload sub=[REDACTED-EMAIL] & role=admin, pasang kembali signature LAMA tanpa re-sign (token utuh).
5) (Screenshot 5) DAMPAK CIA: kirim token RS256 tampered -> tetap 200 mengembalikan akun ADMIN -> membuktikan signature tidak diverifikasi (Confidentiality + Integrity).
06 / 19FAIL
NoSQL Injection - Community - Coupon Validation
3 tangkapan layar · 3 rekaman HTTP
Kerentanan
[FAIL] NoSQL Injection - Community - Coupon Validation
Deskripsi
Endpoint validate-coupon memasukkan nilai JSON coupon_code langsung ke query MongoDB tanpa sanitasi tipe. Operator query (mis. $ne, $gt) mencocokkan kupon apa pun tanpa mengetahui kodenya.
Dampak
Confidentiality: kode & nilai kupon valid bocor. Integrity: validasi kupon dilewati (bypass), penyalahgunaan diskon.
CWE
CWE-943: Improper Neutralization of Special Elements in Data Query Logic (NoSQL Injection)
OWASP
API8:2023 - Security Misconfiguration (Injection)
Skenario
Normal: kode kupon string valid (TRAC075) -> 200. Eksploitasi: coupon_code diganti operator NoSQL ($ne/$gt) -> membocorkan kupon tanpa tahu kode -> CIA (Confidentiality + Integrity).
Endpoint
POST http://127.0.0.1:8888/community/api/v2/coupon/validate-coupon
Fitur terdampak
Validasi Kupon (crapi-community)
Rekomendasi perbaikan
- Paksa tipe string pada coupon_code; tolak objek/operator.
- Query di-parameter/sanitasi & validasi skema input.
Bukti konsep
1) (Screenshot 1) NORMAL: POST validate-coupon dengan coupon_code string valid "TRAC075" -> 200.
2) (Screenshot 2) EKSPLOITASI: ganti coupon_code menjadi operator {"$ne":"x"} -> 200 membocorkan kupon valid tanpa tahu kodenya.
3) (Screenshot 3) DAMPAK CIA: operator {"$gt":""} juga membocorkan kupon -> konfirmasi NoSQL injection.
Lihat catatan sumber (bahasa Indonesia)
Vulnerability: [FAIL] NoSQL Injection - Community - Coupon Validation
Description:
Endpoint validate-coupon memasukkan nilai JSON coupon_code langsung ke query MongoDB tanpa sanitasi tipe. Operator query (mis. $ne, $gt) mencocokkan kupon apa pun tanpa mengetahui kodenya.
Impact:
Confidentiality: kode & nilai kupon valid bocor. Integrity: validasi kupon dilewati (bypass), penyalahgunaan diskon.
CWE:
CWE-943: Improper Neutralization of Special Elements in Data Query Logic (NoSQL Injection)
OWASP:
API8:2023 - Security Misconfiguration (Injection)
Scenario:
Normal: kode kupon string valid (TRAC075) -> 200. Eksploitasi: coupon_code diganti operator NoSQL ($ne/$gt) -> membocorkan kupon tanpa tahu kode -> CIA (Confidentiality + Integrity).
Endpoint:
POST http://127.0.0.1:8888/community/api/v2/coupon/validate-coupon
Affected Feature:
Validasi Kupon (crapi-community)
Remediation:
- Paksa tipe string pada coupon_code; tolak objek/operator.
- Query di-parameter/sanitasi & validasi skema input.
POC:
1) (Screenshot 1) NORMAL: POST validate-coupon dengan coupon_code string valid "TRAC075" -> 200.
2) (Screenshot 2) EKSPLOITASI: ganti coupon_code menjadi operator {"$ne":"x"} -> 200 membocorkan kupon valid tanpa tahu kodenya.
3) (Screenshot 3) DAMPAK CIA: operator {"$gt":""} juga membocorkan kupon -> konfirmasi NoSQL injection.
07 / 19FAIL
OTP Bruteforce Protection Bypass - Authentication - Password Reset
3 tangkapan layar · 3 rekaman HTTP
Kerentanan
[FAIL] OTP Bruteforce Protection Bypass - Authentication - Password Reset
Deskripsi
Verifikasi OTP reset (/v3/check-otp) mengunci setelah 9 percobaan per sesi, NAMUN pembatas ini ter-reset setiap memanggil /forget-password yang sendirinya tidak di-rate-limit/CAPTCHA. Proteksi brute-force dapat dilewati dengan pola siklus.
Dampak
Confidentiality & Integrity: account takeover (ATO) atas pengguna mana pun yang emailnya diketahui melalui brute-force OTP 4-digit (10.000 kombinasi) tanpa hambatan efektif.
CWE
CWE-307: Improper Restriction of Excessive Authentication Attempts
OWASP
API2:2023 - Broken Authentication
Skenario
Normal: minta OTP lalu satu percobaan (Invalid). Eksploitasi: forget-password diulang tanpa batas me-reset lockout -> brute-force OTP 4-digit -> ATO -> CIA (Confidentiality + Integrity).
Endpoint
POST http://127.0.0.1:8888/identity/api/auth/v3/check-otp
POST http://127.0.0.1:8888/identity/api/auth/forget-password
Fitur terdampak
Reset Password via OTP (crapi-identity)
Rekomendasi perbaikan
- Rate limit + lockout PERSISTEN per akun (tak ter-reset oleh permintaan OTP baru).
- Throttle & CAPTCHA pada forget-password.
- OTP >=6 digit, kedaluwarsa singkat.
Bukti konsep
1) (Screenshot 1) NORMAL: POST forget-password {email korban} -> 200, OTP dikirim.
2) (Screenshot 2) NORMAL: POST v3/check-otp satu percobaan salah -> Invalid OTP.
3) (Screenshot 3) EKSPLOITASI + CIA: setelah lockout, panggil forget-password lagi (200, tanpa throttle) -> counter ter-reset & OTP baru; ulangi siklus [reset -> 9 tebakan] hingga OTP tertebak -> reset password korban (ATO).
Lihat catatan sumber (bahasa Indonesia)
Vulnerability: [FAIL] OTP Bruteforce Protection Bypass - Authentication - Password Reset
Description:
Verifikasi OTP reset (/v3/check-otp) mengunci setelah 9 percobaan per sesi, NAMUN pembatas ini ter-reset setiap memanggil /forget-password yang sendirinya tidak di-rate-limit/CAPTCHA. Proteksi brute-force dapat dilewati dengan pola siklus.
Impact:
Confidentiality & Integrity: account takeover (ATO) atas pengguna mana pun yang emailnya diketahui melalui brute-force OTP 4-digit (10.000 kombinasi) tanpa hambatan efektif.
CWE:
CWE-307: Improper Restriction of Excessive Authentication Attempts
OWASP:
API2:2023 - Broken Authentication
Scenario:
Normal: minta OTP lalu satu percobaan (Invalid). Eksploitasi: forget-password diulang tanpa batas me-reset lockout -> brute-force OTP 4-digit -> ATO -> CIA (Confidentiality + Integrity).
Endpoint:
POST http://127.0.0.1:8888/identity/api/auth/v3/check-otp
POST http://127.0.0.1:8888/identity/api/auth/forget-password
Affected Feature:
Reset Password via OTP (crapi-identity)
Remediation:
- Rate limit + lockout PERSISTEN per akun (tak ter-reset oleh permintaan OTP baru).
- Throttle & CAPTCHA pada forget-password.
- OTP >=6 digit, kedaluwarsa singkat.
POC:
1) (Screenshot 1) NORMAL: POST forget-password {email korban} -> 200, OTP dikirim.
2) (Screenshot 2) NORMAL: POST v3/check-otp satu percobaan salah -> Invalid OTP.
3) (Screenshot 3) EKSPLOITASI + CIA: setelah lockout, panggil forget-password lagi (200, tanpa throttle) -> counter ter-reset & OTP baru; ulangi siklus [reset -> 9 tebakan] hingga OTP tertebak -> reset password korban (ATO).
08 / 19FAIL
Server-Side Request Forgery - Workshop - Contact Mechanic
5 tangkapan layar · 5 rekaman HTTP
Kerentanan
[FAIL] Server-Side Request Forgery - Workshop - Contact Mechanic
Deskripsi
Endpoint contact_mechanic menerima URL penuh pada parameter mechanic_api dan melakukan permintaan HTTP server-side ke URL tersebut lalu memantulkan responsnya. Penyerang dapat mengarahkannya ke layanan INTERNAL yang tidak terekspos ke publik. Dieskalasi: SSRF diarahkan ke server email internal MailHog (mailhog:8025) untuk membaca email seluruh pengguna, memanen OTP reset-password korban, lalu mereset password korban -> Account Takeover.
Dampak
Confidentiality + Integrity (Critical): SSRF membaca seluruh inbox email internal (mailhog, 45 email) termasuk OTP/token reset milik pengguna lain, kemudian dipakai untuk mengambil alih akun korban tanpa mengetahui kredensialnya. Berlaku untuk akun mana pun yang emailnya diketahui.
CWE
CWE-918: Server-Side Request Forgery (SSRF)
OWASP
API7:2023 - Server Side Request Forgery
Skenario
Normal: mechanic_api menunjuk endpoint mekanik yang wajar. Eksploitasi (chain): SSRF -> MailHog internal -> baca email korban -> panen OTP -> reset password korban -> login sebagai korban (ATO). Hasil akhir menampakkan CIA (Confidentiality + Integrity).
Endpoint
POST http://127.0.0.1:8888/workshop/api/merchant/contact_mechanic
Fitur terdampak
Contact Mechanic / integrasi mechanic API (crapi-workshop)
Rekomendasi perbaikan
- Jangan terima URL penuh dari klien; gunakan allow-list host/endpoint mekanik sah.
- Blokir skema & rentang IP/host internal (loopback, RFC1918, nama service internal seperti mailhog/crapi-identity).
- Jangan pantulkan respons upstream mentah ke klien.
- Segmentasi jaringan: layanan internal (MailHog, actuator) tidak boleh terjangkau dari service yang menerima input URL.
Bukti konsep
1) (Screenshot 1) NORMAL: contact_mechanic dengan mechanic_api endpoint mekanik wajar -> server fetch server-side.
2) (Screenshot 2) EKSPLOITASI: mechanic_api = http://mailhog:8025/api/v2/messages -> SSRF membaca SELURUH inbox internal (45 email semua user).
3) (Screenshot 3) PANEN: mechanic_api = http://mailhog:8025/api/v2/search?kind=to&query=[REDACTED-EMAIL] -> membaca email OTP korban, OTP 4-digit ter-panen.
4) (Screenshot 4) CHAIN: OTP hasil panen dikirim ke /identity/api/auth/v3/check-otp -> 'OTP verified', password korban di-reset.
5) (Screenshot 5) DAMPAK CIA: login sebagai korban dengan password baru -> token diterbitkan -> Account Takeover.
Lihat catatan sumber (bahasa Indonesia)
Vulnerability: [FAIL] Server-Side Request Forgery - Workshop - Contact Mechanic
Description:
Endpoint contact_mechanic menerima URL penuh pada parameter mechanic_api dan melakukan permintaan HTTP server-side ke URL tersebut lalu memantulkan responsnya. Penyerang dapat mengarahkannya ke layanan INTERNAL yang tidak terekspos ke publik. Dieskalasi: SSRF diarahkan ke server email internal MailHog (mailhog:8025) untuk membaca email seluruh pengguna, memanen OTP reset-password korban, lalu mereset password korban -> Account Takeover.
Impact:
Confidentiality + Integrity (Critical): SSRF membaca seluruh inbox email internal (mailhog, 45 email) termasuk OTP/token reset milik pengguna lain, kemudian dipakai untuk mengambil alih akun korban tanpa mengetahui kredensialnya. Berlaku untuk akun mana pun yang emailnya diketahui.
CWE:
CWE-918: Server-Side Request Forgery (SSRF)
OWASP:
API7:2023 - Server Side Request Forgery
Scenario:
Normal: mechanic_api menunjuk endpoint mekanik yang wajar. Eksploitasi (chain): SSRF -> MailHog internal -> baca email korban -> panen OTP -> reset password korban -> login sebagai korban (ATO). Hasil akhir menampakkan CIA (Confidentiality + Integrity).
Endpoint:
POST http://127.0.0.1:8888/workshop/api/merchant/contact_mechanic
Affected Feature:
Contact Mechanic / integrasi mechanic API (crapi-workshop)
Remediation:
- Jangan terima URL penuh dari klien; gunakan allow-list host/endpoint mekanik sah.
- Blokir skema & rentang IP/host internal (loopback, RFC1918, nama service internal seperti mailhog/crapi-identity).
- Jangan pantulkan respons upstream mentah ke klien.
- Segmentasi jaringan: layanan internal (MailHog, actuator) tidak boleh terjangkau dari service yang menerima input URL.
POC:
1) (Screenshot 1) NORMAL: contact_mechanic dengan mechanic_api endpoint mekanik wajar -> server fetch server-side.
2) (Screenshot 2) EKSPLOITASI: mechanic_api = http://mailhog:8025/api/v2/messages -> SSRF membaca SELURUH inbox internal (45 email semua user).
3) (Screenshot 3) PANEN: mechanic_api = http://mailhog:8025/api/v2/search?kind=to&query=[REDACTED-EMAIL] -> membaca email OTP korban, OTP 4-digit ter-panen.
4) (Screenshot 4) CHAIN: OTP hasil panen dikirim ke /identity/api/auth/v3/check-otp -> 'OTP verified', password korban di-reset.
5) (Screenshot 5) DAMPAK CIA: login sebagai korban dengan password baru -> token diterbitkan -> Account Takeover.
09 / 19FAIL
Unauthenticated Order Access - Shop - Order Details
2 tangkapan layar · 2 rekaman HTTP
Kerentanan
[FAIL] Unauthenticated Order Access - Shop - Order Details
Deskripsi
Endpoint GET /workshop/api/shop/orders/{order_id} mengembalikan detail pesanan lengkap tanpa autentikasi, dengan order_id sekuensial yang mudah dienumerasi.
Dampak
Confidentiality: PII seluruh pelanggan (email, nomor telepon, produk, status, transaksi) bocor ke pihak tanpa kredensial, termasuk akun administrator.
CWE
CWE-306: Missing Authentication for Critical Function
OWASP
API5:2023 - Broken Function Level Authorization (dan API1:2023 - BOLA)
Skenario
Normal: akses order dengan token -> 200. Eksploitasi: hapus header Authorization -> tetap 200 + PII -> CIA (Confidentiality).
Endpoint
GET http://127.0.0.1:8888/workshop/api/shop/orders/{order_id}
Fitur terdampak
Riwayat/Detail Pesanan Toko (crapi-workshop)
Rekomendasi perbaikan
- Wajibkan autentikasi + verifikasi kepemilikan (order.user == pemanggil).
- Gunakan identifier non-sekuensial (UUID).
- Terapkan otorisasi terpusat.
Bukti konsep
1) (Screenshot 1) NORMAL: GET /workshop/api/shop/orders/5 dengan header Authorization valid -> 200.
2) (Screenshot 2) EKSPLOITASI + CIA: kirim ulang permintaan yang sama TANPA header Authorization -> tetap 200 dan membocorkan PII pemilik order ([REDACTED-EMAIL]).
Lihat catatan sumber (bahasa Indonesia)
Vulnerability: [FAIL] Unauthenticated Order Access - Shop - Order Details
Description:
Endpoint GET /workshop/api/shop/orders/{order_id} mengembalikan detail pesanan lengkap tanpa autentikasi, dengan order_id sekuensial yang mudah dienumerasi.
Impact:
Confidentiality: PII seluruh pelanggan (email, nomor telepon, produk, status, transaksi) bocor ke pihak tanpa kredensial, termasuk akun administrator.
CWE:
CWE-306: Missing Authentication for Critical Function
OWASP:
API5:2023 - Broken Function Level Authorization (dan API1:2023 - BOLA)
Scenario:
Normal: akses order dengan token -> 200. Eksploitasi: hapus header Authorization -> tetap 200 + PII -> CIA (Confidentiality).
Endpoint:
GET http://127.0.0.1:8888/workshop/api/shop/orders/{order_id}
Affected Feature:
Riwayat/Detail Pesanan Toko (crapi-workshop)
Remediation:
- Wajibkan autentikasi + verifikasi kepemilikan (order.user == pemanggil).
- Gunakan identifier non-sekuensial (UUID).
- Terapkan otorisasi terpusat.
POC:
1) (Screenshot 1) NORMAL: GET /workshop/api/shop/orders/5 dengan header Authorization valid -> 200.
2) (Screenshot 2) EKSPLOITASI + CIA: kirim ulang permintaan yang sama TANPA header Authorization -> tetap 200 dan membocorkan PII pemilik order ([REDACTED-EMAIL]).
10 / 19FAIL
Unrestricted Resource Consumption - Authentication - Login Rate Limiting
2 tangkapan layar · 2 rekaman HTTP
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.
11 / 19FAIL
Unsafe Consumption of APIs - Workshop - Contact Mechanic Upstream
2 tangkapan layar · 2 rekaman HTTP
Kerentanan
[FAIL] Unsafe Consumption of APIs - Workshop - Contact Mechanic Upstream
Deskripsi
Endpoint contact_mechanic mengonsumsi respons dari mechanic API (URL yang dikendalikan klien) dan memantulkannya kembali ke pengguna tanpa memvalidasi/menyaring struktur maupun isinya. Aplikasi secara implisit mempercayai data dari API upstream.
Dampak
Confidentiality & Integrity: data upstream yang tidak tepercaya (dan dapat dikendalikan penyerang) dipantulkan/diproses apa adanya; dapat dipakai untuk mengeksfiltrasi respons internal atau menyuntikkan konten yang dipercaya aplikasi.
CWE
CWE-20: Improper Input Validation (terkait CWE-345: Insufficient Verification of Data Authenticity)
OWASP
API10:2023 - Unsafe Consumption of APIs
Skenario
Normal: workshop mengonsumsi mechanic API sah. Eksploitasi: URL upstream diganti sembarang -> respons mentah dipantulkan tanpa validasi.
Endpoint
POST http://127.0.0.1:8888/workshop/api/merchant/contact_mechanic
Fitur terdampak
Contact Mechanic / integrasi mechanic API (crapi-workshop)
Rekomendasi perbaikan
- Validasi & saring respons upstream (skema, tipe konten) sebelum diproses/dipantulkan.
- Batasi tujuan upstream ke daftar putih tepercaya (lihat juga temuan SSRF).
- Jangan pantulkan respons mentah ke klien.
Bukti konsep
1) (Screenshot 1) NORMAL: contact_mechanic mengonsumsi mechanic API dan menyertakan responsnya.
2) (Screenshot 2) EKSPLOITASI: ganti mechanic_api ke URL sembarang -> workshop memantulkan respons mentah upstream tanpa validasi (unsafe consumption).
Lihat catatan sumber (bahasa Indonesia)
Vulnerability: [FAIL] Unsafe Consumption of APIs - Workshop - Contact Mechanic Upstream
Description:
Endpoint contact_mechanic mengonsumsi respons dari mechanic API (URL yang dikendalikan klien) dan memantulkannya kembali ke pengguna tanpa memvalidasi/menyaring struktur maupun isinya. Aplikasi secara implisit mempercayai data dari API upstream.
Impact:
Confidentiality & Integrity: data upstream yang tidak tepercaya (dan dapat dikendalikan penyerang) dipantulkan/diproses apa adanya; dapat dipakai untuk mengeksfiltrasi respons internal atau menyuntikkan konten yang dipercaya aplikasi.
CWE:
CWE-20: Improper Input Validation (terkait CWE-345: Insufficient Verification of Data Authenticity)
OWASP:
API10:2023 - Unsafe Consumption of APIs
Scenario:
Normal: workshop mengonsumsi mechanic API sah. Eksploitasi: URL upstream diganti sembarang -> respons mentah dipantulkan tanpa validasi.
Endpoint:
POST http://127.0.0.1:8888/workshop/api/merchant/contact_mechanic
Affected Feature:
Contact Mechanic / integrasi mechanic API (crapi-workshop)
Remediation:
- Validasi & saring respons upstream (skema, tipe konten) sebelum diproses/dipantulkan.
- Batasi tujuan upstream ke daftar putih tepercaya (lihat juga temuan SSRF).
- Jangan pantulkan respons mentah ke klien.
POC:
1) (Screenshot 1) NORMAL: contact_mechanic mengonsumsi mechanic API dan menyertakan responsnya.
2) (Screenshot 2) EKSPLOITASI: ganti mechanic_api ke URL sembarang -> workshop memantulkan respons mentah upstream tanpa validasi (unsafe consumption).
12 / 19PASS
Broken Access Control - Login - CSRF Token Cookie Binding
5 tangkapan layar · 0 rekaman HTTP
Catatan tertulis tidak tersedia untuk skenario pengujian ini. Tangkapan layar atau rekaman HTTP yang tersedia ditampilkan di bawah.
13 / 19PASS
Broken Object Level Authorization - Shop - Return Order
1 tangkapan layar · 1 rekaman HTTP
Kerentanan
[PASS] Broken Object Level Authorization - Shop - Return Order
Deskripsi
Diuji apakah aksi retur pesanan (return_order) rentan BOLA dengan mencoba meretur pesanan milik pengguna lain.
Dampak
Tidak ada dampak: server menegakkan otorisasi kepemilikan dan menolak permintaan (403).
CWE
CWE-639: Authorization Bypass Through User-Controlled Key (diuji, tidak rentan)
OWASP
API1:2023 - Broken Object Level Authorization (diuji negatif)
Skenario
Eksploitasi: return_order?order_id=1 (bukan milik attacker) -> 403. PASS (kontrol berjalan, CIA tidak terlanggar).
Endpoint
POST http://127.0.0.1:8888/workshop/api/shop/orders/return_order?order_id={id}
Fitur terdampak
Retur Pesanan (crapi-workshop)
Rekomendasi perbaikan
Pertahankan pemeriksaan kepemilikan pada aksi retur (kondisi saat ini sudah benar).
Bukti konsep
1) (Screenshot 1) EKSPLOITASI: POST return_order?order_id=1 (order milik user lain) dengan token attacker -> 403 "You are not allowed to access this resource!" (kontrol berjalan).
Lihat catatan sumber (bahasa Indonesia)
Vulnerability: [PASS] Broken Object Level Authorization - Shop - Return Order
Description:
Diuji apakah aksi retur pesanan (return_order) rentan BOLA dengan mencoba meretur pesanan milik pengguna lain.
Impact:
Tidak ada dampak: server menegakkan otorisasi kepemilikan dan menolak permintaan (403).
CWE:
CWE-639: Authorization Bypass Through User-Controlled Key (diuji, tidak rentan)
OWASP:
API1:2023 - Broken Object Level Authorization (diuji negatif)
Scenario:
Eksploitasi: return_order?order_id=1 (bukan milik attacker) -> 403. PASS (kontrol berjalan, CIA tidak terlanggar).
Endpoint:
POST http://127.0.0.1:8888/workshop/api/shop/orders/return_order?order_id={id}
Affected Feature:
Retur Pesanan (crapi-workshop)
Remediation:
Pertahankan pemeriksaan kepemilikan pada aksi retur (kondisi saat ini sudah benar).
POC:
1) (Screenshot 1) EKSPLOITASI: POST return_order?order_id=1 (order milik user lain) dengan token attacker -> 403 "You are not allowed to access this resource!" (kontrol berjalan).
14 / 19PASS
Broken Object Level Authorization - Vehicle - Location Tracking (Unauthenticated)
2 tangkapan layar · 2 rekaman HTTP
Kerentanan
[PASS] Broken Object Level Authorization - Vehicle - Location Tracking (Unauthenticated)
Deskripsi
Diuji akses endpoint lokasi kendaraan tanpa autentikasi apa pun.
Dampak
Tidak ada dampak: server mewajibkan autentikasi dan menolak (401).
CWE
CWE-306: Missing Authentication for Critical Function (diuji, tidak rentan pada jalur ini)
OWASP
API1:2023 - Broken Object Level Authorization (diuji negatif - jalur unauth)
Skenario
Normal: akses lokasi sendiri dengan token -> 200. Eksploitasi: hapus token -> 401. PASS (kontrol autentikasi berjalan).
Endpoint
GET http://127.0.0.1:8888/identity/api/v2/vehicle/{vehicleId}/location
Fitur terdampak
Pelacakan Lokasi Kendaraan (crapi-identity)
Rekomendasi perbaikan
Pertahankan wajib-autentikasi; tambahkan pula verifikasi kepemilikan objek (lihat temuan [FAIL] terkait).
Bukti konsep
1) (Screenshot 1) NORMAL: GET /identity/api/v2/vehicle/9b3ce26b-d797-404b-a961-09d7e45e0d1b/location kendaraan sendiri dengan token -> 200.
2) (Screenshot 2) EKSPLOITASI: kirim ulang TANPA header Authorization -> 401 (kontrol autentikasi berjalan).
Lihat catatan sumber (bahasa Indonesia)
Vulnerability: [PASS] Broken Object Level Authorization - Vehicle - Location Tracking (Unauthenticated)
Description:
Diuji akses endpoint lokasi kendaraan tanpa autentikasi apa pun.
Impact:
Tidak ada dampak: server mewajibkan autentikasi dan menolak (401).
CWE:
CWE-306: Missing Authentication for Critical Function (diuji, tidak rentan pada jalur ini)
OWASP:
API1:2023 - Broken Object Level Authorization (diuji negatif - jalur unauth)
Scenario:
Normal: akses lokasi sendiri dengan token -> 200. Eksploitasi: hapus token -> 401. PASS (kontrol autentikasi berjalan).
Endpoint:
GET http://127.0.0.1:8888/identity/api/v2/vehicle/{vehicleId}/location
Affected Feature:
Pelacakan Lokasi Kendaraan (crapi-identity)
Remediation:
Pertahankan wajib-autentikasi; tambahkan pula verifikasi kepemilikan objek (lihat temuan [FAIL] terkait).
POC:
1) (Screenshot 1) NORMAL: GET /identity/api/v2/vehicle/9b3ce26b-d797-404b-a961-09d7e45e0d1b/location kendaraan sendiri dengan token -> 200.
2) (Screenshot 2) EKSPLOITASI: kirim ulang TANPA header Authorization -> 401 (kontrol autentikasi berjalan).
15 / 19PASS
Broken Object Level Authorization - Workshop - Mechanic Report (Unauthenticated)
2 tangkapan layar · 2 rekaman HTTP
Kerentanan
[PASS] Broken Object Level Authorization - Workshop - Mechanic Report (Unauthenticated)
Deskripsi
Diuji akses endpoint mechanic_report tanpa autentikasi.
Dampak
Tidak ada dampak: server mewajibkan autentikasi dan menolak (401).
CWE
CWE-306: Missing Authentication for Critical Function (diuji, tidak rentan pada jalur ini)
OWASP
API1:2023 - Broken Object Level Authorization (diuji negatif - jalur unauth)
Skenario
Normal: baca report dengan token -> 200. Eksploitasi: hapus token -> 401. PASS (kontrol autentikasi berjalan).
Endpoint
GET http://127.0.0.1:8888/workshop/api/mechanic/mechanic_report?report_id={id}
Fitur terdampak
Laporan Servis Mekanik (crapi-workshop)
Rekomendasi perbaikan
Pertahankan wajib-autentikasi; tambahkan verifikasi kepemilikan objek (lihat [FAIL] terkait).
Bukti konsep
1) (Screenshot 1) NORMAL: GET mechanic_report?report_id=1 dengan token -> 200.
2) (Screenshot 2) EKSPLOITASI: kirim ulang TANPA header Authorization -> 401 (kontrol autentikasi berjalan).
Lihat catatan sumber (bahasa Indonesia)
Vulnerability: [PASS] Broken Object Level Authorization - Workshop - Mechanic Report (Unauthenticated)
Description:
Diuji akses endpoint mechanic_report tanpa autentikasi.
Impact:
Tidak ada dampak: server mewajibkan autentikasi dan menolak (401).
CWE:
CWE-306: Missing Authentication for Critical Function (diuji, tidak rentan pada jalur ini)
OWASP:
API1:2023 - Broken Object Level Authorization (diuji negatif - jalur unauth)
Scenario:
Normal: baca report dengan token -> 200. Eksploitasi: hapus token -> 401. PASS (kontrol autentikasi berjalan).
Endpoint:
GET http://127.0.0.1:8888/workshop/api/mechanic/mechanic_report?report_id={id}
Affected Feature:
Laporan Servis Mekanik (crapi-workshop)
Remediation:
Pertahankan wajib-autentikasi; tambahkan verifikasi kepemilikan objek (lihat [FAIL] terkait).
POC:
1) (Screenshot 1) NORMAL: GET mechanic_report?report_id=1 dengan token -> 200.
2) (Screenshot 2) EKSPLOITASI: kirim ulang TANPA header Authorization -> 401 (kontrol autentikasi berjalan).
16 / 19PASS
Mass Assignment - Authentication - User Registration
3 tangkapan layar · 3 rekaman HTTP
Kerentanan
[PASS] Mass Assignment - Authentication - User Registration
Deskripsi
Diuji apakah endpoint pendaftaran rentan mass assignment dengan menyisipkan field privileged (role=admin, isAdmin=true) pada body signup.
Dampak
Tidak ada dampak: server mengabaikan field privileged sehingga eskalasi hak tidak terjadi.
CWE
CWE-915: Improperly Controlled Modification of Dynamically-Determined Object Attributes (diuji, tidak rentan)
OWASP
API3:2023 - Broken Object Property Level Authorization (diuji negatif)
Skenario
Normal: registrasi standar. Eksploitasi: signup + role=admin/isAdmin. Hasil: login menunjukkan role tetap user -> PASS (kontrol berjalan, CIA tidak terlanggar).
Endpoint
POST http://127.0.0.1:8888/identity/api/auth/signup
Fitur terdampak
Registrasi Pengguna (crapi-identity)
Rekomendasi perbaikan
Pertahankan allow-list field yang boleh di-set klien saat registrasi (kondisi saat ini sudah benar).
Bukti konsep
1) (Screenshot 1) NORMAL: signup dengan field standar -> 200.
2) (Screenshot 2) EKSPLOITASI: signup dengan tambahan role=admin & isAdmin=true -> 200 (terdaftar).
3) (Screenshot 3) HASIL: login akun tsb -> JWT role tetap "user" -> field privileged diabaikan (kontrol berjalan).
Lihat catatan sumber (bahasa Indonesia)
Vulnerability: [PASS] Mass Assignment - Authentication - User Registration
Description:
Diuji apakah endpoint pendaftaran rentan mass assignment dengan menyisipkan field privileged (role=admin, isAdmin=true) pada body signup.
Impact:
Tidak ada dampak: server mengabaikan field privileged sehingga eskalasi hak tidak terjadi.
CWE:
CWE-915: Improperly Controlled Modification of Dynamically-Determined Object Attributes (diuji, tidak rentan)
OWASP:
API3:2023 - Broken Object Property Level Authorization (diuji negatif)
Scenario:
Normal: registrasi standar. Eksploitasi: signup + role=admin/isAdmin. Hasil: login menunjukkan role tetap user -> PASS (kontrol berjalan, CIA tidak terlanggar).
Endpoint:
POST http://127.0.0.1:8888/identity/api/auth/signup
Affected Feature:
Registrasi Pengguna (crapi-identity)
Remediation:
Pertahankan allow-list field yang boleh di-set klien saat registrasi (kondisi saat ini sudah benar).
POC:
1) (Screenshot 1) NORMAL: signup dengan field standar -> 200.
2) (Screenshot 2) EKSPLOITASI: signup dengan tambahan role=admin & isAdmin=true -> 200 (terdaftar).
3) (Screenshot 3) HASIL: login akun tsb -> JWT role tetap "user" -> field privileged diabaikan (kontrol berjalan).
17 / 19PASS
NoSQL Injection - Community - Coupon Validation (Normal Input)
2 tangkapan layar · 2 rekaman HTTP
Kerentanan
[PASS] NoSQL Injection - Community - Coupon Validation (Normal Input)
Deskripsi
Diuji validasi kupon dengan input string biasa (valid & tak dikenal), tanpa operator NoSQL.
Dampak
Tidak ada dampak: kode valid diterima, kode tak dikenal ditolak sebagaimana mestinya.
CWE
CWE-943: NoSQL Injection (diuji negatif untuk input string biasa)
OWASP
API8:2023 - Security Misconfiguration (diuji negatif - input normal)
Skenario
Normal: kode valid TRAC075 -> 200. Uji: string acak tak dikenal -> ditolak. PASS (validasi input normal berjalan). Injeksi operator ada di [FAIL].
Endpoint
POST http://127.0.0.1:8888/community/api/v2/coupon/validate-coupon
Fitur terdampak
Validasi Kupon (crapi-community)
Rekomendasi perbaikan
Terapkan pemaksaan tipe string & tolak operator/objek (lihat [FAIL] terkait).
Bukti konsep
1) (Screenshot 1) NORMAL: coupon_code="TRAC075" (valid) -> 200.
2) (Screenshot 2) UJI: coupon_code="INVALID_RANDOM_XYZ" (string tak dikenal) -> ditolak (validasi normal berjalan).
Lihat catatan sumber (bahasa Indonesia)
Vulnerability: [PASS] NoSQL Injection - Community - Coupon Validation (Normal Input)
Description:
Diuji validasi kupon dengan input string biasa (valid & tak dikenal), tanpa operator NoSQL.
Impact:
Tidak ada dampak: kode valid diterima, kode tak dikenal ditolak sebagaimana mestinya.
CWE:
CWE-943: NoSQL Injection (diuji negatif untuk input string biasa)
OWASP:
API8:2023 - Security Misconfiguration (diuji negatif - input normal)
Scenario:
Normal: kode valid TRAC075 -> 200. Uji: string acak tak dikenal -> ditolak. PASS (validasi input normal berjalan). Injeksi operator ada di [FAIL].
Endpoint:
POST http://127.0.0.1:8888/community/api/v2/coupon/validate-coupon
Affected Feature:
Validasi Kupon (crapi-community)
Remediation:
Terapkan pemaksaan tipe string & tolak operator/objek (lihat [FAIL] terkait).
POC:
1) (Screenshot 1) NORMAL: coupon_code="TRAC075" (valid) -> 200.
2) (Screenshot 2) UJI: coupon_code="INVALID_RANDOM_XYZ" (string tak dikenal) -> ditolak (validasi normal berjalan).
18 / 19PASS
OTP Bruteforce Protection - Authentication - Password Reset (Per-Session Lockout)
2 tangkapan layar · 2 rekaman HTTP
Kerentanan
[PASS] OTP Bruteforce Protection - Authentication - Password Reset (Per-Session Lockout)
Deskripsi
Diuji brute-force OTP dalam satu sesi OTP tanpa meminta OTP baru.
Dampak
Tidak ada dampak pada jalur ini: lockout memicu setelah 9 percobaan (HTTP 503) sehingga brute-force per-sesi gagal.
CWE
CWE-307: Improper Restriction of Excessive Authentication Attempts (kontrol per-sesi ADA)
OWASP
API2:2023 - Broken Authentication (diuji negatif - jalur per-sesi)
Skenario
Normal: satu percobaan OTP -> Invalid. Eksploitasi: brute-force -> lockout 503 setelah 9 percobaan. PASS (kontrol per-sesi berjalan). Bypass ada di [FAIL].
Endpoint
POST http://127.0.0.1:8888/identity/api/auth/v3/check-otp
Fitur terdampak
Reset Password via OTP (crapi-identity)
Rekomendasi perbaikan
Jadikan lockout PERSISTEN per akun agar tidak dapat di-reset lewat permintaan OTP baru (lihat [FAIL] terkait).
Bukti konsep
1) (Screenshot 1) NORMAL: POST v3/check-otp satu percobaan salah -> Invalid OTP.
2) (Screenshot 2) EKSPLOITASI: ulangi percobaan; pada percobaan ke-10 lockout memicu -> 503 "You've exceeded the number of attempts" (kontrol per-sesi berjalan).
Lihat catatan sumber (bahasa Indonesia)
Vulnerability: [PASS] OTP Bruteforce Protection - Authentication - Password Reset (Per-Session Lockout)
Description:
Diuji brute-force OTP dalam satu sesi OTP tanpa meminta OTP baru.
Impact:
Tidak ada dampak pada jalur ini: lockout memicu setelah 9 percobaan (HTTP 503) sehingga brute-force per-sesi gagal.
CWE:
CWE-307: Improper Restriction of Excessive Authentication Attempts (kontrol per-sesi ADA)
OWASP:
API2:2023 - Broken Authentication (diuji negatif - jalur per-sesi)
Scenario:
Normal: satu percobaan OTP -> Invalid. Eksploitasi: brute-force -> lockout 503 setelah 9 percobaan. PASS (kontrol per-sesi berjalan). Bypass ada di [FAIL].
Endpoint:
POST http://127.0.0.1:8888/identity/api/auth/v3/check-otp
Affected Feature:
Reset Password via OTP (crapi-identity)
Remediation:
Jadikan lockout PERSISTEN per akun agar tidak dapat di-reset lewat permintaan OTP baru (lihat [FAIL] terkait).
POC:
1) (Screenshot 1) NORMAL: POST v3/check-otp satu percobaan salah -> Invalid OTP.
2) (Screenshot 2) EKSPLOITASI: ulangi percobaan; pada percobaan ke-10 lockout memicu -> 503 "You've exceeded the number of attempts" (kontrol per-sesi berjalan).
19 / 19PASS
Unrestricted Access to Sensitive Business Flow - Shop - Coupon Claim
2 tangkapan layar · 2 rekaman HTTP
Kerentanan
[PASS] Unrestricted Access to Sensitive Business Flow - Shop - Coupon Claim
Deskripsi
Diuji apakah alur bisnis sensitif (klaim kupon untuk menambah saldo) dapat disalahgunakan dengan mengklaim kupon yang sama berulang kali (replay).
Dampak
Tidak ada dampak: server menolak klaim kedua atas kupon yang sama (already claimed); alur bisnis dibatasi per user.
CWE
CWE-837: Improper Enforcement of a Single, Unique Action (diuji, tidak rentan)
OWASP
API6:2023 - Unrestricted Access to Sensitive Business Flows (diuji negatif)
Skenario
Normal: klaim kupon pertama berhasil (saldo +75). Eksploitasi: replay kupon sama -> ditolak (already claimed). PASS (kontrol berjalan).
Endpoint
POST http://127.0.0.1:8888/workshop/api/shop/apply_coupon
Fitur terdampak
Klaim Kupon / Saldo (crapi-workshop)
Rekomendasi perbaikan
Pertahankan pembatasan klaim kupon per user (kondisi saat ini sudah benar).
Bukti konsep
1) (Screenshot 1) NORMAL: apply_coupon TRAC075 pertama kali -> berhasil, saldo bertambah.
2) (Screenshot 2) EKSPLOITASI: apply_coupon TRAC075 lagi -> ditolak 'already claimed' (kontrol berjalan).
Lihat catatan sumber (bahasa Indonesia)
Vulnerability: [PASS] Unrestricted Access to Sensitive Business Flow - Shop - Coupon Claim
Description:
Diuji apakah alur bisnis sensitif (klaim kupon untuk menambah saldo) dapat disalahgunakan dengan mengklaim kupon yang sama berulang kali (replay).
Impact:
Tidak ada dampak: server menolak klaim kedua atas kupon yang sama (already claimed); alur bisnis dibatasi per user.
CWE:
CWE-837: Improper Enforcement of a Single, Unique Action (diuji, tidak rentan)
OWASP:
API6:2023 - Unrestricted Access to Sensitive Business Flows (diuji negatif)
Scenario:
Normal: klaim kupon pertama berhasil (saldo +75). Eksploitasi: replay kupon sama -> ditolak (already claimed). PASS (kontrol berjalan).
Endpoint:
POST http://127.0.0.1:8888/workshop/api/shop/apply_coupon
Affected Feature:
Klaim Kupon / Saldo (crapi-workshop)
Remediation:
Pertahankan pembatasan klaim kupon per user (kondisi saat ini sudah benar).
POC:
1) (Screenshot 1) NORMAL: apply_coupon TRAC075 pertama kali -> berhasil, saldo bertambah.
2) (Screenshot 2) EKSPLOITASI: apply_coupon TRAC075 lagi -> ditolak 'already claimed' (kontrol berjalan).
04 / DOKUMEN ASLILaporan PDF asli
Baca PDF asli di bawah atau buka di tab baru.
Jika PDF tidak muncul: Buka PDF (ID) ↗
Laporan HTML menyajikan catatan pengujian dan materi pendukung, bukan salinan kata demi kata dari PDF. Lihat PDF untuk laporan dan tata letak aslinya.