JWT authentication bypass via jku header injection
Link: https://portswigger.net/web-security/jwt/lab-jwt-authentication-bypass-via-jku-header-injection
Description:
This lab uses a JWT-based mechanism for handling sessions. The server supports the jku
parameter in the JWT header. However, it fails to check whether the provided URL belongs to a trusted domain before fetching the key.
To solve the lab, forge a JWT that gives you access to the admin panel at /admin
, then delete the user carlos
.
You can log in to your own account using the following credentials: wiener:peter
Preparation:
Install JWT Editor extension on Burp Suite
Install Cookie Editor extension on Browser
Proof of concept:
Lakukan analisa pada web target dengan menggunakan akun testing
Seperti informasi yang didapati pada deskripsi lab, terdapat informasi bahwa goals dari lab ini adalah dapat mengakses
/admin
. Namun ketika diakses menggunakan akun testing, tidak dapat mengakses halaman tersebutDari hasil analisa, pada header request setelah melakukan login terdapat session dengan bentuk JWT
Buka extension
JWT Editor
yang sebelumnya telah diinstal. Lalu lakukan pembuatanRSA Key baru
Lalu
Copy Public key as JWK
. Jika sudah, buka exploit server lalu tambahkan JSON seperti dibawah ini.{ "keys":[ ] }
Jika sudah, tambahkan
Public key as JWK
yang sebelumnya telah di copy ke dalam JSON key tersebut, jika sudah lakukan store pada exploit server tersebutSelanjutnya, kirim request yang sebelumnya telah dilakukan untuk mengakses halaman
/admin
keburp suite repeater
. Lalu buka tab JSON Web TokenSelanjutnya, pada header terdapat parameter
kid
. Ubah nilai pada parameterkid
tersebut menjadi nilai parameterkid
yang sebelumnya didapati saat melakukanCopy Public Key as JWK
atau dapat mendapatkan nilaikid
tersebut pada exploit server. Jika sudah, pada header tambahkan parameterjku
dengan nilai yaituURL exploit server
. dan yang terakhir pada payload terdapat parametersub
yang sebelumnya bernilaiwiener
ubah menjadiadministrator
Jika sudah, lakukan
sign
denganHeader Options
Don’t modify header
dan kirim request ulang pada repeater maka yang sebelumnya tidak memiliki otorisasi untuk mengakses halaman/admin
menjadi dapat mengakses halaman tersebut dengan ditandai response code HTTP200 OK
Lalu untuk menyelesaikan lab ini diharuskan untuk melakukan penghapusan user
carlos
. Copy session JWT yang telah terbaru (yang administrator) paste pada extension Cookie Editor untuk menggantikan session yang sebelumnyaMaka UI halaman admin sudah dapat diakses
Lakukan penghapusan user
carlos
untuk menyelesaikan tangtangan lab ini
Thanks, Stay Ethical & Happy Hacking! 🍻
Last updated