
Pendahuluan
Criticalops adalah tantangan CTF kategori Web dengan tingkat kesulitan very easy dari Bug Bounty CTF Playground.
Berikut adalah deskripsi dari tantangan ini:
Criticalops is a web application designed to monitor several critical infrastructure of XYZ region. Users usualy use this website to report for unusual behavioral, or we also called it ticket. They’ve asked you to hunt for any potential security issues in their application and retrieve the flag stored in their site.
📝 Related Bug Bounty Reports
Bug Report #1 - JWT client-side
Analisa Awal
Dari deskripsi tantangan, diketahui bahwa fokus utama adalah kerentanan JWT yang di-generate di sisi klien.
Sebagai seorang penetration tester, saya memulai dengan melakukan pemeriksaan cepat untuk memahami gambaran umum dari aplikasi target.
1. Melihat Aplikasi

Aplikasi ini merupakan platform Critical Infrastructure Monitoring & Control dengan beberapa fitur utama seperti:
- Real-time Monitoring
- Incident Management
- Secure Controls
- System Analytics
- Login
- Register
2. Registrasi Akun
Karena tersedia fitur pendaftaran, saya langsung mendaftarkan akun dengan username nairpaa
, dan berhasil mendapatkan userId
:
7acc1990-0afa-4422-9981-b973fe2343fa

3. Login
Akun tersebut kemudian saya gunakan untuk login ke dalam aplikasi.

Respons login memuat id
, username
, dan role
dengan nilai user
.
Saat mengakses fitur dalam aplikasi, saya menemukan session JWT yang menggunakan algoritma HS256.


Namun ada yang janggal — JWT ini tidak pernah dikirim dari server, yang mengindikasikan bahwa token tersebut di-generate langsung di sisi klien menggunakan JavaScript.

Eksploitasi JWT
1. Analisis JavaScript
Karena token JWT tidak pernah dikirim oleh server, besar kemungkinan token ini di-generate langsung melalui JavaScript di sisi klien.
Saat menelusuri file JavaScript /_next/static/chunks/176-eb986a17f94086c9.js
, saya menemukan adanya secret key yang digunakan untuk menandatangani JWT dengan algoritma HS256:
SecretKey-CriticalOps-2025

HS256 merupakan algoritma symmetric signing, artinya jika kita mengetahui secret key, kita dapat:
- Memodifikasi data seperti
userId
,username
,role
,iat
, atauexp
- Membuat atau menandatangani ulang token agar valid saat diverifikasi oleh server
Baca lebih lanjut tentang JWT attacks di sini.
Saya memverifikasi secret key ini menggunakan jwt.io, dan hasilnya signature berhasil diverifikasi, yang artinya key tersebut valid.

2. Memodifikasi JWT
Karena akun saya hanya memiliki role user
, saya mencoba menggantinya menjadi admin
untuk mendapatkan akses ke data yang lebih sensitif.
Saya menggunakan Burp Suite dengan plugin JWT Editor untuk memodifikasi token.
Langkah pertama, saya menambahkan symmetric key ke dalam tab JWT Editor.

Selanjutnya, pada tab Repeater, saya mengubah nilai role menjadi admin
, lalu menandatangani ulang (sign) JWT menggunakan secret key yang ditemukan sebelumnya.

Setelah token dimodifikasi, saya menggunakannya untuk mengakses daftar tiket. Hasilnya, saya berhasil melihat data milik akun admin — dan di sana terdapat flag:
HTB{Wh0_Put_JWT_1n_Cl13nt_S1d3_lm4o}

Penutup
Itulah cara menyelesaikan tantangan Criticalops dari Bug Bounty CTF Playground.
Dari sini kita bisa belajar pentingnya menganalisis bagaimana session dibuat, serta bagaimana JWT yang menggunakan algoritma seperti HS256 dapat dimodifikasi ketika secret key-nya terekspos.
Semoga bermanfaat!