Pengujian keamanan · Pengujian lab · Lingkungan simulasi

crAPI Laporan pengujian keamanan

Laporan HTML ini menyajikan catatan pengujian lab dan materi pendukungnya, bukan salinan kata demi kata dari PDF asli. PDF yang tersedia ditampilkan di bawah.

19Skenario pengujian
11Skenario FAIL
08Skenario PASS
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.

  1. Ruang lingkup, endpoint, dan perilaku normal
  2. Langkah pengujian dan variasi request
  3. Response yang diamati dan dampak keamanan
  4. Hasil PASS atau FAIL, beserta referensi CWE/OWASP dan rekomendasi perbaikan jika relevan
03 / SKENARIO PENGUJIAN DAN BUKTI

Skenario 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 ASLI

Laporan 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.