Skip to content

Body Error yang Mengulang Input Anda

Adityo Guni Waluyo

Pesan kesalahan API yang memantulkan nilai input pengirim adalah kanal rekonesans murah. Pola perbaikan: kode spesifik, detail statis.

Ringkasan

Jadi API admin KotaPortal ternyata mantulin input user di pesan error, jadi deh jalan tol buat nyoba injeksi. Fixnya gampang: kode error dibikin statis kayak FORBIDDEN, interpolasi inputnya dibuang semua. Terus tiap endpoint dikasih tes regresi pake nilai probe, kalau masih muncul di body respons berarti belum beres.

Proses tinjauan keamanan rutin pada antarmuka pemrograman aplikasi admin KotaPortal menghasilkan temuan yang tidak terduga. Sebuah permintaan tulis yang berada di luar cakapan akses ditolak dengan kode status `FORBIDDEN`. Namun, di dalam badan respons, pesan kesalahan tersebut memuat nilai persis dari kolom bidang yang diketik oleh pengirim permintaan. Skrip pengujian otomatis yang mengirimkan nilai probe khusus menerima kembali nilai tersebut, dikutip secara verbatim di dalam detail kesalahan.

Temuan Investigasi

Investigasi lebih lanjut mengungkapkan bahwa lima titik berbeda di dua layanan terpisah dan tiga rantai `mapError` ternyata memantulkan data permintaan secara langsung. Mekanisme ini sering kali muncul ketika pengembang mencoba memberikan pesan kesalahan yang informatif untuk memudahkan proses debug. Namun, pesan validasi seperti "bidang tidak valid: " atau pesan larangan seperti "data ini milik bidang " secara eksplisit menginterpolasi input pengguna ke dalam respons server.

Teks kesalahan yang memantulkan input merupakan bentuk rekonsiliasi gratis bagi penyerang. Menurut OWASP Error Handling Cheat Sheet, masalah pada tingkat penanganan kesalahan dapat mengungkapkan informasi tentang target dan membantu mengidentifikasi titik injeksi [3]. Nilai yang dikutip kembali mengonfirmasi tiga hal penting bagi penyerang. Pertama, kolom tersebut mencapai tahap validasi di sisi server. Kedua, kosakata internal sistem, termasuk nilai bidang mana saja yang valid. Ketiga, apakah karakter khusus bertahan hingga ke respons. Kondisi ini menciptakan saluran uji injeksi yang murah dan efektif.

Pola Perbaikan dan Batasan

Pola perbaikan yang terbukti efektif dan diterapkan secara konsisten adalah menjaga kode kesalahan tetap spesifik, sementara detail manusianya dibuat statis. Pesan "bidang tidak valid" disampaikan tanpa menyertakan nilai input apa pun. Demikian pula, pesan "data ini milik bidang lain" tidak menyebutkan nama bidang tersebut secara eksplisit.

Kode yang dapat dibaca mesin seperti FORBIDDEN, INVALID_INPUT, atau CONFLICT tetap dipertahankan untuk kebutuhan logika klien, namun kalimat yang diinterpolasi dihapus sepenuhnya dari respons. Batasan praktis dari pendekatan ini perlu dipahami. Validasi tingkat kolom pada sisi klien tetap memberi tahu pengguna bahwa nilai mereka salah sebelum pengiriman data terjadi. API tidak pernah mengulanginya kembali karena API melayani berbagai klien yang belum tentu berupa formulir jinak di frontend internal sistem.

Verifikasi Melalui Pengujian Regresi

Setiap titik akhir yang diperbaiki mendapatkan pengujian regresi yang menegaskan bahwa badan respons tidak mengandung jejak muatan probe. Artefak yang dapat diperiksa secara mandiri adalah sebagai berikut: kirim nilai probe yang unik dan tidak biasa, harapkan kode kesalahan yang sesuai, lalu lakukan pencarian teks pada badan respons untuk nilai probe tersebut.

Hasil pencarian harus menunjukkan nol temuan. Jika satu pun karakter dari nilai probe muncul, pengujian dianggap gagal dan perbaikan harus ditinjau ulang. Penerapan prinsip body error tanpa pantulan input memastikan bahwa sistem tidak secara tidak sengaja memberikan peta jalan kepada pihak yang tidak berwenang.

Penerapan konvensi tingkat kode yang menyatakan bahwa detail kesalahan harus berupa string statis atau berbasis tabel, bukan string format di atas data permintaan, jauh lebih murah dibandingkan meninjau setiap pesan secara manual di setiap rilis. Peringatan dari lembar conteks OWASP menjadi alasan fundamental mengapa konvensi ini harus ditegakkan secara ketat.

Sumber

Artikel terkait