Skenario 25 / 26PASS
JWT Algorithm Confusion - Authentication - alg none
Lingkungan lab — bukan sistem produksi
Tangkapan layar dan trafik mentah tidak diterjemahkan; teks di dalamnya mungkin menggunakan bahasa lain.
vuln-bank/Evidence/[PASS] JWT Algorithm Confusion - Authentication - alg none
01 — Catatan
Catatan pengujian
Kerentanan
[PASS] JWT Algorithm Confusion - Authentication - alg none
Deskripsi
Pengujian berupaya melewati verifikasi tanda tangan JWT dengan mengubah header algoritma menjadi none dan mengosongkan bagian tanda tangan, sebuah teknik klasik untuk memalsukan token. Kode sumber mencantumkan none pada daftar algoritma yang diterima, sehingga endpoint ini diuji secara khusus.
Dampak
Tidak ada dampak. Kontrol bertahan: token dengan alg none ditolak pada seluruh endpoint yang diuji, baik endpoint pengguna biasa maupun panel administrasi, dengan HTTP 401. Pustaka JWT yang digunakan menolak algoritma none ketika kunci verifikasi diberikan, sehingga niat kode yang permisif tidak dapat dieksploitasi lewat jalur ini.
Catatan: hal ini TIDAK berarti validasi token aman. Jalur pemalsuan lain berhasil dan dilaporkan terpisah pada temuan JWT Signature Not Verified, di mana token dengan tanda tangan salah tetap diterima.
CWE
CWE-347: Improper Verification of Cryptographic Signature
OWASP
A07:2021 - Identification and Authentication Failures
Skenario
Token sah didekode, header diubah menjadi alg none, klaim is_admin diubah menjadi true, lalu token dirangkai ulang tanpa tanda tangan. Token tersebut dikirim ke endpoint pengguna dan endpoint administrasi. Hasil: keduanya menolak dengan HTTP 401.
Endpoint
GET http://127.0.0.1:5001/dashboard
GET http://127.0.0.1:5001/sup3r_s3cr3t_admin
Fitur terdampak
Validasi JWT (algoritma none)
Rekomendasi perbaikan
- Pertahankan penolakan algoritma none, dan hapus none dari daftar algoritma yang dikonfigurasi agar niat kode selaras dengan perilaku pustaka.
- Kunci algoritma ke satu nilai yang diharapkan secara eksplisit.
Bukti konsep
1) (Screenshot 1) PROSES: token sah didekode, header diubah menjadi alg none dan klaim is_admin menjadi true, lalu dirangkai ulang tanpa tanda tangan.
2) (Screenshot 2) HASIL: token alg none dikirim ke /dashboard -> HTTP 401 Invalid token, kontrol bertahan.
3) (Screenshot 3) HASIL: token alg none dikirim ke /sup3r_s3cr3t_admin -> HTTP 401, kontrol bertahan.
Lihat catatan sumber (bahasa Indonesia)
Vulnerability:
[PASS] JWT Algorithm Confusion - Authentication - alg none
Description:
Pengujian berupaya melewati verifikasi tanda tangan JWT dengan mengubah header algoritma menjadi none dan mengosongkan bagian tanda tangan, sebuah teknik klasik untuk memalsukan token. Kode sumber mencantumkan none pada daftar algoritma yang diterima, sehingga endpoint ini diuji secara khusus.
Impact:
Tidak ada dampak. Kontrol bertahan: token dengan alg none ditolak pada seluruh endpoint yang diuji, baik endpoint pengguna biasa maupun panel administrasi, dengan HTTP 401. Pustaka JWT yang digunakan menolak algoritma none ketika kunci verifikasi diberikan, sehingga niat kode yang permisif tidak dapat dieksploitasi lewat jalur ini.
Catatan: hal ini TIDAK berarti validasi token aman. Jalur pemalsuan lain berhasil dan dilaporkan terpisah pada temuan JWT Signature Not Verified, di mana token dengan tanda tangan salah tetap diterima.
CWE:
CWE-347: Improper Verification of Cryptographic Signature
OWASP:
A07:2021 - Identification and Authentication Failures
Scenario:
Token sah didekode, header diubah menjadi alg none, klaim is_admin diubah menjadi true, lalu token dirangkai ulang tanpa tanda tangan. Token tersebut dikirim ke endpoint pengguna dan endpoint administrasi. Hasil: keduanya menolak dengan HTTP 401.
Endpoint:
GET http://127.0.0.1:5001/dashboard
GET http://127.0.0.1:5001/sup3r_s3cr3t_admin
Affected Feature:
Validasi JWT (algoritma none)
Remediation:
- Pertahankan penolakan algoritma none, dan hapus none dari daftar algoritma yang dikonfigurasi agar niat kode selaras dengan perilaku pustaka.
- Kunci algoritma ke satu nilai yang diharapkan secara eksplisit.
POC:
1) (Screenshot 1) PROSES: token sah didekode, header diubah menjadi alg none dan klaim is_admin menjadi true, lalu dirangkai ulang tanpa tanda tangan.
2) (Screenshot 2) HASIL: token alg none dikirim ke /dashboard -> HTTP 401 Invalid token, kontrol bertahan.
3) (Screenshot 3) HASIL: token alg none dikirim ke /sup3r_s3cr3t_admin -> HTTP 401, kontrol bertahan.
02 — Tangkapan layar
Tangkapan layar (2)
03 — Detail proses
Detail proses
Nilai kredensial disamarkan dalam tampilan HTML ini; keterangan tentang token lengkap merujuk pada rekaman sumber.
PROSES 01 / 1
Siapkan JWT alg:none
Token yang direkam
[REDACTED-LAB-JWT]Header yang diubah
{
"typ": "JWT",
"alg": "none"
}Payload yang diubah
{
"user_id": 1,
"username": "admin",
"is_admin": true,
"iat": 1790736461
}Token yang dienkode ulang (signature kosong)
[REDACTED-LAB-JWT]Nilai kredensial disamarkan dalam tampilan HTML ini; keterangan tentang token lengkap merujuk pada rekaman sumber.
04 — Request dan response
Rekaman HTTP
Sebagian nilai kredensial disamarkan pada tampilan HTML publik ini. Penyamaran ini tidak menjamin bahwa seluruh data sensitif atau berkas tertaut sudah disamarkan.
REKAMAN 01 / 2
GET /dashboard HTTP/1.1
User-Agent: python-requests/2.33.1
Accept-Encoding: gzip, deflate, br, zstd
Accept: */*
Connection: keep-alive
Authorization: Bearer [REDACTED-LAB-TOKEN]
HTTP/1.1 401 UNAUTHORIZED
Content-Type: application/json
Content-Length: 31
Access-Control-Allow-Origin: *
Server: Werkzeug/2.0.1 Python/3.9.25
Date: Wed, 30 Sep 2026 03:13:06 GMT
{
"error": "Invalid token"
}REKAMAN 02 / 3
GET /sup3r_s3cr3t_admin HTTP/1.1
User-Agent: python-requests/2.33.1
Accept-Encoding: gzip, deflate, br, zstd
Accept: */*
Connection: keep-alive
Authorization: Bearer [REDACTED-LAB-TOKEN]
HTTP/1.1 401 UNAUTHORIZED
Content-Type: application/json
Content-Length: 31
Access-Control-Allow-Origin: *
Server: Werkzeug/2.0.1 Python/3.9.25
Date: Wed, 30 Sep 2026 03:13:07 GMT
{
"error": "Invalid token"
}