
Laporan pentest yang tebal tidak otomatis bagus. Laporan yang penuh istilah teknis juga tidak otomatis berguna.
Yang penting adalah apakah laporan itu membantu tim menjawab tiga pertanyaan:
- Apa risiko nyata untuk bisnis?
- Temuan mana yang harus diperbaiki dulu?
- Bagaimana membuktikan perbaikannya sudah benar?
Artikel ini untuk owner, founder, CTO, product lead, dan technical lead yang menerima laporan pentest atau security audit. Untuk peta titik auditnya, baca audit keamanan aplikasi dengan standard pentest. Untuk detail area teknis, baca juga pentest API aplikasi modern, audit login/session/access control, dan business logic vulnerability.
Untuk membaca laporan dengan sehat, rujukan yang berguna adalah NIST SP 800-115 untuk lifecycle testing dan assessment, OWASP WSTG untuk metodologi pengujian web, serta OWASP ASVS untuk memahami requirement kontrol keamanan aplikasi.
Mulai dari scope
Sebelum membaca finding, baca scope dulu.
Cek:
- domain dan subdomain apa yang diuji;
- API mana yang masuk scope;
- mobile app masuk atau tidak;
- role test account apa saja yang dipakai;
- production atau staging;
- black-box, grey-box, atau white-box;
- tanggal testing;
- batasan destructive testing;
- integrasi payment/webhook diuji atau tidak;
- retest termasuk atau tidak.
Jika scope tidak mencakup API, jangan menganggap API sudah aman. Jika hanya role customer yang diuji, jangan menganggap admin panel sudah aman. Jika mobile app tidak masuk, jangan menganggap storage lokal dan deep link sudah aman.
Scope menentukan arti laporan.
Jangan terjebak jumlah temuan
Laporan dengan 40 temuan low belum tentu lebih buruk daripada laporan dengan 3 temuan critical.
Yang perlu dilihat:
- apakah temuan membuka data sensitif;
- apakah temuan bisa dipakai account takeover;
- apakah temuan bisa melewati payment;
- apakah temuan menyentuh tenant lain;
- apakah temuan bisa dieksploitasi user biasa;
- apakah temuan bisa dirangkai dengan temuan lain;
- apakah exploit butuh kondisi sulit atau mudah.
Jumlah finding membantu melihat workload, bukan prioritas risiko.
Pahami severity dengan impact bisnis
Severity teknis seperti CVSS berguna, tapi jangan berhenti di angka.
Gunakan pembacaan operasional:
- Critical: account takeover, akses data sensitif lintas tenant, payment bypass, RCE, secret production leak, admin takeover.
- High: akses fungsi admin tertentu, data exposure nyata, auth bypass sebagian, SSRF internal terbatas, webhook bisa dipalsukan.
- Medium: misconfiguration dengan kondisi tambahan, weak rate limit, error leak yang membantu chaining, cookie flag yang berbahaya jika ada XSS.
- Low: hardening issue, missing header, informasi minor, hygiene issue.
Severity harus bisa dijelaskan dengan kalimat bisnis. Misalnya: "User biasa dapat membaca invoice milik tenant lain" jauh lebih jelas daripada "Broken Object Level Authorization ditemukan".
Baca evidence, bukan hanya judul finding
Finding yang bagus punya bukti.
Minimal evidence:
- endpoint;
- method;
- role/token yang dipakai;
- request;
- response;
- screenshot jika relevan;
- data atau object yang terdampak;
- timestamp;
- langkah reproduksi.
Jika finding tidak bisa direproduksi, tim engineering akan sulit memperbaiki. Jika evidence terlalu samar, minta klarifikasi sebelum membuat task fix.
Untuk finding API, evidence harus menunjukkan request dan response. Untuk finding UI, screenshot membantu, tapi request tetap lebih kuat.
Bedakan exploitability dan impact
Impact besar tidak selalu mudah dieksploitasi. Exploit mudah tidak selalu impact besar.
Contoh:
- Missing security header mungkin mudah dibuktikan, tapi impact-nya bisa rendah.
- Race condition pada withdraw mungkin sulit dieksploitasi, tapi impact-nya bisa critical.
- IDOR invoice bisa mudah dieksploitasi dan impact-nya tinggi.
- Debug stack trace bisa medium sendiri, tapi high jika mengungkap secret atau path sensitif.
Prioritas terbaik menggabungkan impact, exploitability, exposure, dan kemungkinan chaining.
Cari temuan yang bisa dirangkai
Serangan nyata jarang memakai satu bug saja.
Contoh chain:
- Source map public membuka nama endpoint admin.
- Endpoint admin punya broken function authorization.
- Response admin membocorkan token internal.
- Token dipakai untuk export data.
Jika dibaca satu per satu, beberapa temuan terlihat medium. Jika dirangkai, risikonya bisa critical.
Laporan pentest yang bagus biasanya menjelaskan chaining. Kalau tidak ada, tim internal tetap perlu meninjau apakah temuan saling menguatkan.
Prioritas fix yang sehat
Urutan perbaikan praktis:
- Stop celah yang bisa membuka data lintas user/tenant.
- Stop account takeover dan auth bypass.
- Stop payment bypass, wallet bug, subscription abuse, dan webhook palsu.
- Stop RCE, SSRF internal, secret leak, dan admin exposure.
- Fix endpoint mahal yang bisa diabuse.
- Bersihkan misconfiguration yang membantu chaining.
- Selesaikan hardening low-risk.
Jangan habiskan energi awal untuk cosmetic hardening jika API masih bisa membaca data tenant lain.
Buat task fix yang jelas
Jangan copy-paste finding menjadi task tanpa mengubahnya menjadi pekerjaan engineering.
Task fix yang baik punya:
- endpoint atau modul terdampak;
- behavior saat ini;
- behavior yang diharapkan;
- acceptance criteria;
- test case;
- owner;
- target date;
- retest plan.
Contoh acceptance criteria:
"Ketika user B memanggil GET /api/invoices/{invoiceId} milik user A, API harus mengembalikan 403 atau 404. Test harus mencakup read, update, download PDF, dan export."
Ini jauh lebih bisa dikerjakan daripada "Fix IDOR invoice".
SLA perbaikan
SLA tergantung konteks bisnis, tapi baseline yang masuk akal:
- Critical: mitigasi segera, idealnya 24-72 jam.
- High: 7-14 hari.
- Medium: 30 hari.
- Low: masuk backlog hardening, biasanya 60-90 hari.
Jika critical belum bisa difix cepat, lakukan mitigasi sementara: disable endpoint, batasi akses, revoke token, tutup public route, enforce MFA, allowlist IP, atau tambahkan rate limit.
Mitigasi sementara harus dicatat. Jangan biarkan workaround menjadi permanen tanpa owner.
Retest wajib
Fix belum selesai sampai retest lolos.
Retest harus memakai langkah reproduksi yang sama dengan laporan awal. Kalau finding awal memakai dua role dan dua tenant, retest juga harus memakai dua role dan dua tenant.
Hasil retest sebaiknya punya status:
- Fixed: celah tertutup.
- Partially fixed: sebagian tertutup, masih ada jalur lain.
- Not fixed: masih bisa dieksploitasi.
- Risk accepted: risiko diterima bisnis dengan alasan tertulis.
Risk accepted bukan cara menghapus masalah. Itu keputusan bisnis yang harus punya owner dan tanggal review ulang.
Jangan abaikan finding low
Finding low bukan berarti tidak penting. Artinya prioritasnya lebih rendah.
Missing header, verbose error, old dependency, source map public, atau minor disclosure bisa menjadi bahan chaining. Jika low finding jumlahnya banyak dan pola masalahnya sama, itu sinyal maturity engineering perlu diperbaiki.
Low finding yang muncul berulang juga bisa menunjukkan proses review belum punya guardrail.
Laporan harus punya executive summary
Owner bisnis tidak perlu membaca semua request/response dulu. Mereka perlu tahu:
- risiko terbesar;
- data apa yang terdampak;
- area aplikasi paling lemah;
- estimasi effort;
- prioritas 7 hari pertama;
- apakah perlu emergency mitigation;
- apakah retest diperlukan.
Executive summary yang bagus tidak menakut-nakuti. Ia menerjemahkan temuan teknis menjadi keputusan operasional.
Laporan teknis harus bisa dipakai engineer
Engineer butuh detail.
Setiap finding teknis sebaiknya berisi:
- deskripsi singkat;
- affected asset;
- affected role;
- precondition;
- steps to reproduce;
- evidence;
- impact;
- root cause jika bisa disimpulkan;
- rekomendasi fix;
- reference standard;
- retest instruction.
Reference bisa menyebut OWASP WSTG, OWASP ASVS, OWASP API Security Top 10, atau standar lain yang relevan. Tapi reference tidak boleh menggantikan penjelasan impact.
Pertanyaan yang perlu diajukan ke vendor pentest
Jika laporan terasa kurang jelas, tanya:
- Apakah temuan ini sudah divalidasi manual atau hanya hasil scanner?
- Role apa yang dipakai saat reproduksi?
- Data apa yang bisa diakses atau diubah?
- Apakah temuan ini bisa dieksploitasi tanpa akun?
- Apakah bug ini berdampak lintas tenant?
- Apakah ada chaining dengan temuan lain?
- Apa fix minimal yang paling cepat?
- Bagaimana cara retest?
Vendor yang baik akan menjawab dengan bukti, bukan hanya mengulang severity.
Setelah semua fixed
Setelah retest lolos, lakukan post-audit review.
Yang perlu dibahas:
- temuan mana yang akar masalahnya sama;
- kontrol apa yang harus masuk SDLC;
- test apa yang perlu ditambahkan;
- dependency atau config apa yang harus dimonitor;
- endpoint mana yang perlu owner;
- apakah permission matrix perlu dirapikan;
- apakah logging cukup untuk deteksi.
Tujuan akhirnya bukan "laporan bersih". Tujuannya mengurangi kemungkinan bug yang sama muncul lagi.
Kesimpulan
Laporan pentest harus dibaca sebagai bahan keputusan, bukan dokumen formalitas.
Mulai dari scope. Pahami evidence. Prioritaskan berdasarkan impact bisnis dan exploitability. Ubah finding menjadi task engineering yang jelas. Lakukan retest. Catat risiko yang diterima.
Kalau laporan hanya berhenti sebagai PDF di folder, audit itu belum memberi nilai. Nilainya muncul saat temuan ditutup, kontrol diperbaiki, dan proses development menjadi lebih tahan terhadap bug yang sama.
