Photo by Cecep Rahmat on Unsplash
Introduction
Di tengah hiruk pikuk tren lari yang semakin masif, terutama di kalangan Gen Z, ada satu pertanyaan krusial yang sering terlupakan: apakah data pribadi kita aman?
Popularitas lari memang tak bisa dimungkiri. Selain murah dan mudah, lari menawarkan segudang manfaat kesehatan dan membentuk komunitas yang suportif. Ditambah lagi, kehadiran media sosial menjadikan lari sebagai tren yang “Instagram-able”. Berbagai event lari yang menarik pun menjamur, dari fun run sampai maraton internasional, semuanya kini bisa didaftarkan secara digital hanya dengan sentuhan jari. Cukup isi data diri, bayar, sudah dapat BIB (nomor peserta).
Kemudahan itu ternyata menyimpan bahaya tersembunyi. Pernahkah kamu berpikir, seaman apa sih situs web pendaftaran event lari yang kamu gunakan? Di negara kita, berita kebocoran data seolah jadi santapan harian, menimpa berbagai platform mulai dari e-commerce, logistik, perbankan, hingga instansi pemerintah. Data yang bocor ini sering kali berakhir di forum-forum hacker dan dijual bebas.
Sebagai pengguna, kita sering merasa pasrah. Tapi, tahukah kamu dampak dari kebocoran data itu? Dampak paling nyata adalah menjadi target penipuan. Para penipu kini lebih canggih karena mereka sudah punya informasi pribadi kita. Mungkin kamu pernah mengalami, atau setidaknya mendengar cerita, di mana ada penipu yang menelepon atau mengirim pesan dan tahu nama lengkapmu.
Bagi kita yang awam dengan dunia IT, situasi seperti ini bisa sangat meyakinkan. Kita akan mudah percaya bahwa panggilan atau pesan itu datang dari pihak yang kita kenal atau bahkan instansi resmi. Kita baru sadar ketika saldo di rekening tiba-tiba lenyap, uang ditransfer ke orang tak dikenal, atau menjadi korban pemerasan.
Selain platform yang sudah saya sebutkan di atas, data kamu juga bisa bocor melalui website pendaftaran event lari yang tidak aman. Lalu, kalau sudah begini, apa yang dapat diambil? pelajaran? hikmahnya?
Daripada bingung, artikel ini ditujukan untuk dua pihak: pemilik/pengembang situs web event lari dan para pelari itu sendiri.
Bagi pemilik dan pengembang, sudah saatnya meningkatkan kewaspadaan terhadap keamanan data pengguna. Melindungi data bukan hanya soal etika, tetapi juga dapat membangun reputasi dan kepercayaan. Di tengah kompetisi yang ketat, situs web yang aman akan lebih dipilih oleh calon peserta.
Sementara itu, bagi kalian para pelari, tetaplah berhati-hati. Jangan mudah percaya dengan tautan atau pesan yang mencurigakan, meskipun tampaknya berasal dari pihak yang sah. Selalu cek kembali keaslian situs web pendaftaran dan pastikan koneksinya aman.
Euforia lari memang menyehatkan, tapi jangan sampai kelalaian digital merugikan kita. Semoga artikel ini bisa menjadi pengingat bagi kita semua agar tetap aman dan waspada di dunia digital.
Study Case
Dalam studi kasus ini, saya akan membahas dua contoh website event lari (mari kita sebut redacted.tld) yang memiliki celah keamanan. Kerentanan ini berpotensi menyebabkan kebocoran data (nama, nik, kontak penggua), yang tidak hanya merugikan pengguna, tetapi juga dapat merusak reputasi pemilik website.
Lebih dari itu, dampak kerugiannya bisa meluas ke sisi finansial. Bayangkan jika seorang penyerang bisa memanipulasi harga pendaftaran (price tampering) sehingga dapat membayar dengan nominal yang jauh lebih rendah dari harga aslinya. Hal ini jelas merugikan penyelenggara secara langsung.
Pembahasan ini tidak hanya akan terbatas pada satu sudut pandang. Saya akan memperluasnya dengan menganalisis kerentanan ini dari berbagai sudut pandang (POV) yang berbeda, yaitu:
- POV Bug Hunter
Bagaimana seorang pemburu celah keamanan menemukan dan mengeksploitasi kerentanan ini. - POV Developer
Bagaimana pengembang bisa mencegah dan memperbaiki celah keamanan ini dari sisi teknis. - POV User
Bagaimana pengguna menjadi korban, kenapa harus lebih waspada dari ancaman yang ada.
Dengan melihat dari berbagai perspektif, kita bisa mendapatkan pemahaman yang lebih komprehensif tentang masalah ini.
POV Bug Hunter
Case 1 – Kebocoran data tanpa peretasan
Kasus pertama ini adalah yang paling parah data bocor tanpa perlu diretas. Artinya, seorang peretas tidak perlu repot-repot membobol server atau masuk ke database. Mereka hanya perlu mengakses API dari luar, layaknya pengguna biasa, dan data sensitif langsung terpapar.
Bayangkan, niatnya cuma ingin melihat daftar peserta lari, tapi yang didapat malah data pribadi mereka. Kacau, kan?
Temuan ini masuk dalam kategori A04: Insecure Design pada OWASP Top Ten, khususnya terkait CWE-213: Exposure of Sensitive Information Due to Incompatible Policies.
Apa maksudnya?
Developer mungkin memiliki kebijakan untuk menampilkan data peserta secara publik, seperti nama, nomor BIB, jenis kelamin, dan asal kota, di sebuah API dengan alamat
/event-peserta-terdaftar?param-blablabla. Tujuannya baik, yaitu untuk memudahkan pengguna lain melihat siapa saja yang sudah mendaftar.
Namun, implementasinya justru bertentangan dengan prinsip keamanan data. Meskipun yang ditampilkan di halaman web hanya data dasar, respons dari API itu sendiri malah memuat informasi sensitif dan lengkap, seperti nomor kontak, email, alamat lengkap, bahkan identitas diri (KTP). Data ini seharusnya tidak pernah diekspos secara publik.
Inilah yang membuat data bocor. Celah desain yang buruk ini membuat informasi sensitif terpapar, berpotensi disalahgunakan, dan merugikan semua pihak.

Data yang bocor tidak hanya terbatas pada peserta lari. Ternyata, informasi event organizer pun ikut terekspos. Seperti yang terlihat, data tersebut mencakup kata sandi beruntung bentuk nya hash (bcrypt). Di situs pertama ini tidak saya lanjutkan untuk mencari celah lebih dalam.

Tapi apakah bcrypt bisa dicrack? Ya, Secara teori, Bcrypt dapat dibobol melalui serangan brute force, namun prosesnya membutuhkan waktu yang sangat lama.
Meskipun demikian, kecepatan pembobolan sangat bergantung pada kompleksitas kata sandi. Kata sandi yang hanya terdiri dari angka bisa dibobol dalam hitungan jam, sedangkan kata sandi dengan kombinasi karakter dan panjang lebih dari delapan akan membuat serangan brute force menjadi tidak mungkin. Hal ini menyoroti bahaya besar ketika pengguna membuat kata sandi yang umum dan lemah, seperti “password” atau “123456”, karena kata sandi tersebut tetap rentan meskipun dilindungi oleh Bcrypt.

Case 2 – Upaya Bypass
Dalam kasus kedua ini, kita akan melakukan pengujian black-box pada sebuah situs web (event lari). Pengujian ini berfokus pada empat celah utama: Stored XSS, Price Tampering, CSRF (tidak terlau dibahas), dan kerentanan pada fitur File Upload.
Namun, pembahasan kita akan lebih dalam. Kita tidak hanya mencari celah-celah itu, tetapi juga mengupas tuntas dampak lain yang bisa ditimbulkan. Misalnya, bagaimana mencari dampak lebih lanjut saat menemukan celah XSS tapi cookie terlindungi oleh HttpOnly, bagaimana cara bypass CORS Origin, dan bagaimana menemukan path dari file yang diunggah untuk eksploitasi lebih lanjut. *Pengujian ini juga telah mendapatkan izin dari pemilik website.
Semua ini bermula dari ajakan teman-teman untuk ikut event lari. Begitu diberikan tautan pendaftaran, insting saya sebagai bug hunter langsung muncul. “Aduh aman ga ya data saya cuma buat event lari”, selain itu saat melihat harga pendaftaran, pikiran saya langsung terlintas, “Gimana kalau bayarnya cuma rp 1000 ?” Lumayan, kan, uang sisanya bisa dipakai buat beli soto setelah lari, haha. Tentu saja, saya tahu harga itu penting untuk biaya operasional, produksi merchandise, dan konsumsi.
Benar saja, saya langsung mendaftar sambil mencoba menyisipkan payload XSS pada beberapa form. Setelah itu, saya mencegat permintaan pembayaran (intercept request) untuk mengubah harganya menjadi 1500. Tanpa disangka, ternyata permintaan itu lolos tanpa validasi lebih lanjut.
Yang lebih parah, coba perhatikan permintaan POST di bawah ini. Dengan tidak adanya validasi CSRF Token, saya dapat membuat sebuah eksploitasi. Artinya, saya bisa membuat teman-teman yang awam tentang bug hunting sekalipun dapat memanfaatkan celah ini. Mereka hanya perlu mengisi data diri, dan tanpa menyadarinya, mereka bisa mendaftar dengan harga yang sudah saya ubah, tanpa harus tahu apa itu price tampering.

Saya pun diarahkan ke halaman pembayaran Xendit. Setelah saya bayar, status kepesertaan saya langsung berubah menjadi Verified. Sampai di sini, jelas sudah, kita berhasil menemukan celah Price Tampering. Celah ini, jika dibiarkan tanpa perbaikan, bisa sangat merugikan penyelenggara secara finansial.

Selain itu, saya juga memeriksa XSS Hunter dan menemukan bahwa situs ini rentan terhadap Stored XSS. Celah ini sangat berbahaya karena kode berbahaya yang disisipkan bisa tersimpan di server dan dieksekusi setiap kali halaman yang terinfeksi diakses oleh pengguna lain, termasuk admin.
Berikut halaman yang terdampak:
- (Unauth) Terdapat di halaman yang menampilkan daftar peserta. Artinya, setiap pengunjung yang melihat daftar tersebut bisa menjadi korban.
- (Authenticated) Celah ini juga ditemukan di beberapa menu admin seperti “Kelola Peserta”, “Rekap Event”, dll. Hal ini sangat krusial karena bisa memberikan penyerang akses ke akun admin dan kendali penuh atas sistem (tergantung situasi).

Tunggu dulu, screenshot dasbor admin yang saya tunjukkan di atas bukan berarti saya sudah berhasil masuk ke akun admin. Halaman itu adalah hasil kloning (cloning) dari XSS Hunter, yang kemudian saya akses secara lokal. Saya belum mendapatkan akses penuh ke halaman admin karena cookie-nya terlindungi oleh HttpOnly. Meskipun begitu, saya memiliki beberapa skenario lain untuk mengeksploitasi celah ini lebih jauh.

Skenario pertama yang saya coba adalah membuat custom JavaScript pada payload XSS Hunter. Tujuannya, memunculkan overlay pop-up halaman login palsu dan mengirimkan hasilnya ke Beeceptor sebagai POST action. Saya berharap admin mengira sesi mereka telah berakhir dan terpancing untuk mengisi ulang kredensial.

Namun, saya lupa. Payload XSS yang saya tanam juga terdampak pada halaman pendaftaran yang menampilkan daftar peserta. Akibatnya, banyak kredensial milik para peserta yang masuk. Mereka mengira harus login ke akun mereka. Ada yang mengirim username, bahkan ada juga yang mengirim kredensial Gmail lengkap.

Saya pun memodifikasi payload tersebut agar pop-up hanya muncul di halaman admin (dengan kondisi jika URL mengandung kata kunci ‘kelola’). Setelah menunggu beberapa jam, admin masih belum terpancing, meskipun laporan dari XSS Hunter menunjukkan bahwa mereka telah mengakses halaman yang rentan.
Saya mulai bertanya-tanya, apakah overlay yang saya buat tidak berhasil? Apakah terjadi tabrakan dengan elemen HTML asli, atau jangan-jangan admin langsung menutup halaman begitu melihat form login yang mencurigakan?
Tanpa berpikir panjang, saya beralih ke skenario lain. Saya mulai membaca kode dari hasil kloningan halaman admin dan menemukan beberapa baris kode yang menarik, seperti img src yang menampilkan bukti pembayaran, endpoint upload, dan endpoint menu pengguna. Kode-kode ini berpotensi untuk dieksploitasi lebih lanjut.

Dari kode di atas, kita tahu bahwa ketika admin mengklik detail salah satu peserta, ada endpoint yang di-fetch melalui AJAX. URL dari endpoint ini diambil dari data-url dan responsnya menampilkan beberapa data penting, seperti id_registrasi, nama_peserta, email, tgl_bayar, dan yang paling menarik, reg_file (bukti pembayaran).
Ada juga blok kode yang berfungsi untuk mengunggah gambar. Respons dari endpoint ini adalah URL file yang berhasil diunggah. ini akan kita coba juga nanti.
Saya memutuskan untuk menggunakan metode fetch get-data-registrasi terlebih dahulu. Tujuannya adalah untuk mendapatkan nama file dari bukti transfer yang diunggah secara blind. Saya bisa mengunggah file, tetapi tidak tahu di mana file itu tersimpan.

Saya pun mencoba mengunggah sebuah file bukti payment, lalu menunggu admin mengakses halaman yang rentan tersebut. Saya menanti respons dari listener Beeceptor, tapi sepertinya saya kurang beruntung. Fungsi unggah file ini tampaknya tidak terpakai atau tidak dikelola. Mungkin karena mereka sudah menggunakan sistem payment gateway yang secara otomatis memverifikasi peserta, jadi fitur unggah manual tidak lagi digunakan. Namun sejauh ini data yang dibocorkan dari endpoint tersebut cukup krusial.

Kembali ke blok kode kelola/upload_image yang saya temukan di halaman admin, saya mencoba membuat file HTML sendiri untuk mengunggah berkas. Saya mencoba mengirim data POST langsung ke endpoint kelola/upload_image.
Namun, percobaan saya gagal karena terkena eror CORS Origin. Ini terjadi karena kebijakan keamanan browser membatasi permintaan dari origin yang berbeda. Dengan kata lain, browser mencegah skrip yang saya buat di luar domain situs untuk mengirim data ke endpoint tersebut.

Dari kondisi tersebut, muncul ide untuk menyuntikkan form upload file langsung ke situs web melalui celah XSS tersebut. Upaya ini berhasil mengunggah berkas, sekaligus melewati batasan CORS karena formulir tersebut seolah-olah berasal dari domain yang sah. Agar payload berfungsi, penyerang menambahkan parameter khusus ?kelola pada URL, yang sebelumnya telah disesuaikan agar hanya dapat dipicu di halaman admin. Dengan cara ini, meskipun berada di halaman depan (daftar peserta), penyerang dapat mentriger payload xss tersebut untuk menampilkan form upload.
Meski yakin bahwa form upload telah aman dari berkas berbahaya dengan memblokir ekstensi seperti PHP, PHTML, DLL , saya menemukan celah serius. Endpoint kelola/upload_image yang seharusnya hanya dapat diakses oleh administrator, ternyata dapat diakses secara tidak terautentikasi (unauthenticated access).
Inilah yang menjadi celah Broken Access Control (BAC). Meskipun saya harus melewati pembatasan CORS Origin, fakta bahwa endpoint kritis ini dapat dijangkau tanpa otentikasi menjadikannya kerentanan yang serius (attacker dapat melakukan spamming file upload).

POV Developer
Setelah menganalisis bagaimana situs saya dieksploitasi, saya menyadari pentingnya fokus pada keamanan pengguna dan sistem secara keseluruhan. Dari studi kasus ini, ada beberapa poin krusial yang harus segera saya perbaiki.
1. Keamanan Data di API Saya harus membatasi data yang dikirim dalam setiap respons API. Mengembalikan semua data, meskipun tidak digunakan di tampilan publik, adalah praktik yang berbahaya. Ke depannya, saya akan memastikan respons hanya berisi data yang benar-benar dibutuhkan.
2. Perbaikan Berbagai Kerentanan Kasus ini menunjukkan perlunya perbaikan menyeluruh pada berbagai sisi:
- Stored XSS, Untuk mencegah serangan ini, saya akan menerapkan sanitasi input dan output secara ketat. Menambahkan Web Application Firewall (WAF) juga bisa menjadi lapisan pertahanan tambahan untuk memblokir payload berbahaya. Atau terapkan CSP (Content Security Policy).
- Access Control, Saya perlu memperkuat kontrol akses agar endpoint administratif tidak bisa diakses dari luar. Endpoint sensitif harus dilindungi dengan otentikasi yang kuat.
- Parameter Tampering, Validasi harga harus dilakukan di sisi server untuk mencegah manipulasi. Daripada mengambil harga langsung dari endpoint, saya akan memanggil data harga dari backend dan menggunakannya untuk membuat pembayaran.
- CSRF, Saya harus memperketat mekanisme Cross-Site Request Forgery (CSRF) untuk melindungi permintaan penting dari penyerang.
Dengan menerapkan langkah-langkah ini, saya berharap dapat membangun sistem yang jauh lebih aman dan tidak merugikan user.
POV User
Pesan untuk Para Pengembang Website
Sebagai pengguna, kekhawatiran Anda sangat wajar. Data yang kami berikan, mulai dari nama, tanggal lahir, hingga informasi pembayaran, adalah aset pribadi yang sangat berharga. Harapan kami sebagai orang awam sangat sederhana: berikanlah kami ruang yang aman.
Kami tidak mengerti seluk-beluk keamanan siber, XSS, atau data breach. Yang kami tahu, kami mempercayakan data kami kepada Anda. Mengingat ribuan orang mendaftar untuk satu event, dan ada begitu banyak event lainnya, potensi kebocoran data bisa sangat masif. Tentu tidak ada yang ingin menghadapi tuntutan hukum dari ribuan orang karena data mereka tidak dilindungi dengan baik.
Oleh karena itu, kami berharap para pengembang dan pemilik website dapat lebih sadar dan peduli terhadap keamanan siber. Kepercayaan kami adalah modal terbesar Anda, dan melindunginya adalah tanggung jawab mutlak.
Conclusion
Studi kasus ini, yang bermula dari rasa penasaran, akhirnya menjadi sebuah artikel untuk meningkatkan kesadaran akan pentingnya keamanan siber. Tujuan utamanya bukan semata-mata mencari bug, melainkan untuk menyajikan skenario praktis yang bisa menjadi pembelajaran berharga bagi berbagai pihak:
- Bagi Bug Hunter
Studi ini menunjukkan berbagai skenario perangkaian serangan (attack chaining) yang dapat dilakukan dari satu celah XSS. Mulai dari melewati batasan CORS, hit critical function, menemukan path unggahan berkas, hingga melakukan serangan phishing, kerentanan XSS dapat dieksploitasi untuk tujuan yang lebih luas. Selain itu, kasus ini juga menyoroti bagaimana celah keamanan bisa ditemukan dalam sistem pembayaran (price tampering). - Bagi Pengembang (Developer)
Kasus ini menjadi pengingat kritis bahwa celah keamanan sekecil apa pun, seperti validasi data yang kurang ketat (XSS) atau kontrol akses yang lemah (BAC), dapat menjadi pintu masuk bagi eksploitasi yang lebih serius. - Bagi Penyelenggara Event dan Pengguna
Studi ini menyoroti risiko besar yang dihadapi oleh platform pendaftaran, terutama saat data sensitif ribuan peserta dikumpulkan. Penting bagi penyelenggara untuk memastikan keamanan data, dan bagi pengguna untuk lebih sadar akan risiko yang ada.
Berdasarkan studi kasus ini, diharapkan kesadaran akan keamanan siber dapat meningkat. Tulisan ini dapat mendorong diskusi, membuka wawasan, dan memicu tindakan nyata untuk menciptakan ekosistem digital yang lebih aman bagi semua pihak.
Reference :
- Tegalsec.org (2025, Agustus 13). Multi-Stage Social Engineering Attack pada Korban Penipuan. https://blog.tegalsec.org/multi-stage-social-engineering-attack-pada-korban-penipuan/
Tempo.co. (2024, Juli 10). Popularitas olahraga lari di Indonesia meningkat berdasarkan data Garmin. Tempo.
https://www.tempo.co/data/data/popularitas-olahraga-lari-di-indonesia-meningkat-berdasarkan-data-garmin-991192Tias.co.id. (2025, Mei 4). Fenomena FOMO lari: Ketika lari menjadi tren sosial. Tias.
https://tias.co.id/fenomena-fomo-lari:-ketika-lari-menjadi-tren-sosialAbay, S. (2024, Maret 10). Weaponised XSS Payload (Write Up). Abay.sh.
https://abay.sh/weaponised-xss-payload/Infosec Writeups. (2925, Juni 24). The dark side of Swagger UI: How XSS and HTML injection can compromise APIs. Medium.
https://infosecwriteups.com/the-dark-side-of-swagger-ui-how-xss-and-html-injection-can-compromise-apis-1b670972a443OWASP Foundation. OWASP Top Ten. OWASP.
https://owasp.org/Top10/PortSwigger. Cross-site scripting. PortSwigger Web Security Academy.
https://portswigger.net/web-security/cross-site-scriptingTempo.co. (2025, Juli 30). Polemik data pribadi: 5 kasus kebocoran data di Indonesia selama 2023–2024. Tempo.
https://www.tempo.co/digital/polemik-data-pribadi-5-kasus-kebocoran-data-di-indonesia-selama-2023-2024-2052924Merdeka siber (Instagram). (2025, Agustus). 81,47 Juta data pelanggan JNE diduga bocor, isi data ungkap lokasi rumah hingga foto pengiriman! [Video]. Instagram.
https://www.instagram.com/reel/DNXmG2hzRPH/SpecOps Software. (2023). How tough is bcrypt to crack? And can it keep passwords safe? SpecOps Blog.
https://specopssoft.com/blog/hashing-algorithm-cracking-bcrypt-passwords/Aditama, A., & Kusuma, R. (2021). Analysis performance BCRYPT algorithm to improve password security from brute force. Journal of Physics: Conference Series, 1811(1), 012129. IOP Publishing.
https://iopscience.iop.org/article/10.1088/1742-6596/1811/1/012129Intigriti. (2024). Hunting the 6 most common price manipulation vulnerabilities in e-commerce websites. Intigriti Blog.
https://www.intigriti.com/blog/news/top-6-price-manipulation-vulnerabilities-ecommerceYouTube. (2025). Harga di hack jadi gratis, harus gimana? [Video]. YouTube.
https://www.youtube.com/watch?v=ouNi5Sflcio






