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'attestazioneaud(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
audcontenga un valore che identifica il servizio locale; se il servizio non è identificato nell'attestazioneaud, 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)
algper 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) eaud(pubblico) all'interno del payload JSON [S1]. - Test di convalida: testare se il server rifiuta correttamente i token scaduti in base all'attestazione
expo destinati a un pubblico diverso come definito dall'attestazioneaud[S1].
