ikan Pengantar
JSON Web Token (JWT) banyak digunakan untuk autentikasi dan otorisasi pada aplikasi web, API, serta layanan berbasis microservices. JWT memungkinkan server membawa informasi mengenai identitas dan hak akses pengguna dalam sebuah token yang dapat diverifikasi.
Namun, implementasi JWT yang tidak tepat dapat menimbulkan celah keamanan. Salah satunya adalah JWT None Algorithm Attack, yaitu kondisi ketika aplikasi menerima token dengan nilai algoritma none sehingga token tidak memiliki digital signature.
Standar JWT memang mendefinisikan Unsecured JWT dengan alg bernilai none. Namun, penggunaan tersebut memiliki konsekuensi penting karena token tidak mendapatkan perlindungan integritas melalui signature (dikutip dari: https://www.rfc-editor.org/info/rfc7519/).
Apa Itu JWT None Algorithm Attack?
JWT biasanya memiliki tiga bagian:
Header.Payload.Signature
Header menentukan algoritma yang digunakan untuk proses signing. Contohnya, aplikasi dapat menggunakan HS256 atau RS256.
Masalah muncul ketika server menerima JWT dengan:
Algoritma none berarti JWT tidak menggunakan digital signature atau MAC. RFC 7518 menjelaskan bahwa Unsecured JWS dengan alg: none tidak memberikan perlindungan integritas (dikutip dari: https://www.rfc-editor.org/rfc/rfc7518.html).
Jika aplikasi menerima token tersebut sebagai token yang valid, isi payload dapat dipercaya tanpa adanya mekanisme signature yang memverifikasi bahwa token benar-benar dibuat oleh pihak yang berwenang.
baca juga : VLAN Hopping: Mengenal Serangan Layer 2 yang Dapat Menembus Segmentasi Jaringan
Bagaimana Serangan Ini Terjadi?
Validasi JWT yang Tidak Ketat
Masalah biasanya muncul ketika aplikasi menentukan algoritma verifikasi berdasarkan informasi yang berasal dari JWT itu sendiri.
Alur yang berisiko dapat digambarkan sebagai:
JWT → Baca Header → Tentukan Algoritma → Verifikasi Token
Jika server menerima alg dari token tanpa membatasi algoritma yang diperbolehkan, attacker dapat mencoba memanfaatkan none.
Mengapa alg: none Berbahaya?
Tidak Ada Signature
Pada JWT normal, signature digunakan untuk memastikan token tidak diubah setelah dibuat.
Misalnya:
Header + Payload → Signature
Ketika menggunakan none, bagian signature tidak memberikan perlindungan kriptografis.
Akibatnya, apabila server menerima token tanpa melakukan validasi tambahan, perubahan pada claims dapat berpotensi diterima sebagai token yang sah.
Risiko Manipulasi Claims
JWT sering membawa informasi seperti:
subuntuk identitas pengguna.roleuntuk hak akses.issuntuk issuer.auduntuk audience.expuntuk waktu kedaluwarsa.
Jika token dapat dimodifikasi tanpa signature yang valid, claims yang digunakan untuk menentukan otorisasi dapat menjadi risiko serius.
Contohnya, aplikasi yang menggunakan claim role untuk menentukan hak akses dapat memberikan privilege yang tidak semestinya jika validasi token tidak dilakukan dengan benar.
Apa Dampaknya terhadap Aplikasi?
Account Takeover
Jika JWT digunakan sebagai bukti autentikasi dan server menerima token yang tidak memiliki signature, attacker berpotensi membuat token yang dianggap berasal dari pengguna tertentu.
Dampaknya dapat berupa pengambilalihan sesi atau akses ke akun.
Privilege Escalation
Jika aplikasi menggunakan JWT untuk menentukan role pengguna, manipulasi claims dapat menyebabkan peningkatan hak akses.
Misalnya:
User biasa → Token dimanipulasi → Role tidak semestinya → Akses resource sensitif
Unauthorized API Access
API yang mengandalkan JWT sebagai mekanisme autentikasi dapat menerima request yang seharusnya ditolak apabila validasi token tidak diterapkan dengan benar.
Cara Mencegah JWT None Algorithm Attack
Gunakan Allowlist Algoritma
Jangan menerima semua algoritma yang tersedia pada JWT.

Tentukan algoritma yang memang digunakan aplikasi, kemudian tolak token yang menggunakan algoritma di luar daftar tersebut.
Contohnya secara konsep:
Daftar tersebut harus disesuaikan dengan desain aplikasi dan library JWT yang digunakan.
Jangan Percayakan Algoritma pada Header JWT
Header JWT merupakan bagian dari input yang diterima aplikasi.
Karena itu, server tidak seharusnya memperlakukan nilai alg sebagai instruksi yang bebas menentukan bagaimana token harus diverifikasi.
OWASP secara khusus menyarankan agar algoritma validasi ditentukan oleh konfigurasi aplikasi dan bukan semata-mata berdasarkan header JWT (dikutip dari: https://cheatsheetseries.owasp.org/cheatsheets/REST_Security_Cheat_Sheet.html).
baca juga : XML External Entity (XXE) Injection: Mengenal Serangan pada Parser XML dan Cara Mencegahnya
Tolak alg: none
Untuk JWT yang digunakan sebagai mekanisme autentikasi atau otorisasi, none sebaiknya tidak diizinkan.
RFC 7518 menyatakan bahwa implementasi tidak boleh menerima Unsecured JWS secara default dan penerimaannya harus bersifat eksplisit untuk konteks tertentu (dikutip dari: https://www.rfc-editor.org/rfc/rfc7518.html).
Dengan demikian, aplikasi umum sebaiknya menolak token yang menggunakan algoritma tersebut.
Gunakan Library JWT yang Terpercaya
Jangan membuat mekanisme parsing dan verifikasi JWT sendiri jika tidak diperlukan.
Gunakan library yang telah banyak digunakan dan pastikan library tersebut selalu diperbarui.
Selain itu, periksa dokumentasi library untuk memastikan:
- Algoritma dapat dibatasi.
- Signature selalu diverifikasi.
noneditolak secara default.- Claims penting dapat divalidasi.
- Error validasi ditangani dengan benar.
Validasi JWT Tidak Hanya tentang Signature
Menolak none saja belum cukup.
Server juga perlu memvalidasi claims penting seperti:
iss
Memastikan token berasal dari issuer yang dipercaya.
aud
Ini memastikan token memang ditujukan untuk aplikasi atau service tersebut.
exp
token belum kedaluwarsa.
nbf
token belum digunakan sebelum waktu yang ditentukan.
sub
Memastikan identitas pengguna sesuai dengan kebutuhan aplikasi.
Dengan pendekatan tersebut, keamanan JWT tidak hanya bergantung pada satu pemeriksaan.
Checklist Keamanan JWT
Sebelum JWT digunakan dalam production, periksa beberapa hal berikut:
- Tolak algoritma
none. - Gunakan allowlist algoritma.
- Jangan mempercayai
algdari token secara langsung. - Verifikasi signature sebelum mempercayai payload.
- Validasi
issdanaud. - Validasi waktu
expdannbf. - Gunakan library JWT yang terpercaya.
- Perbarui dependency secara berkala.
- Gunakan HTTPS untuk komunikasi API.
- Jangan menyimpan data sensitif secara sembarangan di payload JWT.
baca juga : GraphQL Security: Mengenal Celah Serangan dan Cara Mengamankan API Modern
Kesimpulan
JSON Web Token (JWT) None Algorithm Attack memanfaatkan kesalahan implementasi ketika aplikasi menerima JWT dengan algoritma none tanpa memastikan adanya mekanisme integritas yang sesuai.
Walaupun none merupakan algoritma yang didefinisikan dalam standar JWT untuk Unsecured JWT, token tersebut tidak memiliki perlindungan signature. Karena itu, penggunaan none untuk autentikasi atau otorisasi aplikasi secara umum dapat menimbulkan risiko serius.
Cara utama untuk mencegah serangan ini adalah menggunakan allowlist algoritma, menolak none, memverifikasi signature, dan melakukan validasi claims seperti iss, aud, exp, serta nbf.
Pada akhirnya, keamanan JWT bukan hanya tentang bagaimana token dibuat, tetapi juga bagaimana token tersebut diverifikasi secara ketat di sisi server.








