FixVibe
Covered by FixVibehigh

Keamanan JWT: Risiko Token Tidak Aman dan Validasi Klaim Hilang

JSON Web Tokens (JWTs) memberikan standar untuk mentransfer klaim, namun keamanan bergantung pada validasi yang ketat. Kegagalan memverifikasi tanda tangan, waktu kedaluwarsa, atau audiens yang dituju memungkinkan penyerang melewati otentikasi atau memutar ulang token.

CWE-347CWE-287CWE-613

Dampak Penyerang

Validasi JWT yang tidak tepat memungkinkan penyerang melewati mekanisme otentikasi dengan memalsukan klaim atau menggunakan kembali token [S1] yang sudah kadaluwarsa. Jika server menerima token tanpa tanda tangan yang valid, penyerang dapat memodifikasi payload untuk meningkatkan hak istimewa atau menyamar sebagai pengguna [S1]. Selain itu, kegagalan untuk menegakkan klaim kedaluwarsa (exp) memungkinkan penyerang untuk menggunakan token yang disusupi tanpa batas waktu [S1].

Akar Penyebab

Token Web JSON (JWT) adalah struktur berbasis JSON yang digunakan untuk mewakili klaim yang ditandatangani secara digital atau dilindungi integritas [S1]. Kegagalan keamanan biasanya berasal dari dua kesenjangan implementasi utama:

  • Penerimaan JWT Tanpa Jaminan: Jika layanan tidak menerapkan verifikasi tanda tangan secara ketat, layanan tersebut mungkin memproses "JWT Tanpa Jaminan" jika tanda tangan tidak ada dan algoritme disetel ke "tidak ada" [S1]. Dalam skenario ini, server mempercayai klaim dalam payload tanpa memverifikasi integritasnya [S1].
  • Validasi Klaim Hilang: Klaim exp (waktu kedaluwarsa) mengidentifikasi waktu pada atau setelahnya JWT tidak boleh diterima untuk memproses [S1]. Klaim aud (audiens) mengidentifikasi penerima token [S1] yang dituju. Jika ini tidak dicentang, server mungkin menerima token yang sudah kadaluarsa atau dimaksudkan untuk aplikasi berbeda [S1].

Perbaikan Beton

  • Menerapkan Tanda Tangan Kriptografi: Konfigurasikan aplikasi untuk menolak JWT yang tidak menggunakan algoritme penandatanganan kuat dan telah disetujui sebelumnya (seperti RS256).
  • Validasi Kedaluwarsa: Menerapkan pemeriksaan wajib untuk memastikan tanggal dan waktu saat ini sebelum waktu yang ditentukan dalam klaim exp [S1].
  • Verifikasi Audiens: Pastikan klaim aud berisi nilai yang mengidentifikasi layanan lokal; jika layanan tidak teridentifikasi dalam klaim aud, token harus ditolak [S1].
  • Mencegah Pemutaran Ulang: Gunakan klaim jti (JWT ID) untuk menetapkan pengidentifikasi unik pada setiap token, sehingga server dapat melacak dan menolak token yang digunakan kembali [S1].

Strategi Deteksi

Kerentanan dalam penanganan JWT dapat diidentifikasi dengan menganalisis struktur token dan perilaku respons server:

  • Pemeriksaan Header: Memeriksa header alg (algoritma) untuk memastikan header tersebut tidak disetel ke "tidak ada" dan menggunakan standar kriptografi yang diharapkan [S1].
  • Verifikasi Klaim: Mengonfirmasi keberadaan dan validitas klaim exp (kedaluwarsa) dan aud (audiens) dalam payload JSON [S1].
  • Pengujian Validasi: Menguji apakah server dengan benar menolak token yang telah kedaluwarsa sesuai dengan klaim exp atau ditujukan untuk audiens yang berbeda sebagaimana ditentukan oleh klaim aud [S1].