FixVibe
Covered by FixVibehigh

JWT Sicurezza: rischi di token non garantiti e mancata convalida delle attestazioni

I token Web JSON (JWT) forniscono uno standard per il trasferimento delle attestazioni, ma la sicurezza si basa su una convalida rigorosa. La mancata verifica delle firme, dei tempi di scadenza o dei destinatari previsti consente agli aggressori di ignorare l'autenticazione o i token di riproduzione.

CWE-347CWE-287CWE-613

Impatto dell'attaccante

La convalida JWT non corretta consente agli aggressori di aggirare i meccanismi di autenticazione falsificando attestazioni o riutilizzando token scaduti [S1]. Se un server accetta token senza una firma valida, un utente malintenzionato può modificare il payload per aumentare i privilegi o impersonare qualsiasi utente [S1]. Inoltre, la mancata applicazione dell'attestazione di scadenza (exp) consente a un utente malintenzionato di utilizzare un token compromesso indefinitamente [S1].

Causa principale

Un token Web JSON (JWT) è una struttura basata su JSON utilizzata per rappresentare attestazioni firmate digitalmente o protette dall'integrità [S1]. I fallimenti della sicurezza derivano in genere da due principali lacune di implementazione:

  • Accettazione di JWT non protetti: se un servizio non applica rigorosamente la verifica della firma, può elaborare "JWT non protetti" in cui la firma è assente e l'algoritmo è impostato su "nessuno" [S1]. In questo scenario, il server considera attendibili le attestazioni nel payload senza verificarne l'integrità [S1].
  • Convalida richiesta mancante: la richiesta exp (ora di scadenza) identifica il tempo a partire dal quale JWT non deve essere accettato per l'elaborazione [S1]. L'attestazione aud (audience) identifica i destinatari previsti del token [S1]. Se questi non vengono selezionati, il server potrebbe accettare token scaduti o destinati a un'applicazione diversa [S1].

Correzioni concrete

  • Applica firme crittografiche: configura l'applicazione per rifiutare qualsiasi JWT che non utilizza un algoritmo di firma forte pre-approvato (come RS256).
  • Convalida scadenza: implementare un controllo obbligatorio per garantire che la data e l'ora correnti siano precedenti all'ora specificata nell'attestazione exp [S1].
  • Verifica pubblico: assicurati che l'attestazione aud contenga un valore che identifica il servizio locale; se il servizio non è identificato nell'attestazione aud, il token deve essere rifiutato [S1].
  • Previeni la riproduzione: utilizza l'attestazione jti (JWT ID) per assegnare un identificatore univoco a ciascun token, consentendo al server di tracciare e rifiutare i token riutilizzati [S1].

Strategia di rilevamento

Le vulnerabilità nella gestione di JWT possono essere identificate analizzando la struttura del token e il comportamento di risposta del server:

  • Ispezione intestazione: controllo dell'intestazione (algoritmo) alg per garantire che non sia impostato su "nessuno" e utilizzi gli standard crittografici previsti [S1].
  • Verifica attestazione: conferma della presenza e della validità delle attestazioni exp (scadenza) e aud (pubblico) all'interno del payload JSON [S1].
  • Test di convalida: testare se il server rifiuta correttamente i token scaduti in base all'attestazione exp o destinati a un pubblico diverso come definito dall'attestazione aud [S1].