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:

  1. Lakukan analisa pada web target dengan menggunakan akun testing

  2. 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 tersebut

  3. Dari hasil analisa, pada header request setelah melakukan login terdapat session dengan bentuk JWT

  4. Buka extension JWT Editor yang sebelumnya telah diinstal. Lalu lakukan pembuatan RSA Key baru

  5. Lalu Copy Public key as JWK. Jika sudah, buka exploit server lalu tambahkan JSON seperti dibawah ini. { "keys":[ ] }

  6. Jika sudah, tambahkan Public key as JWK yang sebelumnya telah di copy ke dalam JSON key tersebut, jika sudah lakukan store pada exploit server tersebut

  7. Selanjutnya, kirim request yang sebelumnya telah dilakukan untuk mengakses halaman /admin ke burp suite repeater. Lalu buka tab JSON Web Token

  8. Selanjutnya, pada header terdapat parameter kid. Ubah nilai pada parameter kid tersebut menjadi nilai parameter kid yang sebelumnya didapati saat melakukan Copy Public Key as JWK atau dapat mendapatkan nilai kid tersebut pada exploit server. Jika sudah, pada header tambahkan parameter jku dengan nilai yaitu URL exploit server. dan yang terakhir pada payload terdapat parameter sub yang sebelumnya bernilai wiener ubah menjadi administrator

  9. Jika sudah, lakukan sign dengan Header 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 HTTP 200 OK

  10. 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 sebelumnya

  11. Maka UI halaman admin sudah dapat diakses

  12. Lakukan penghapusan user carlos untuk menyelesaikan tangtangan lab ini

Thanks, Stay Ethical & Happy Hacking! 🍻

Last updated