Cryptology Academy · Lezione

Vulnerabilità di JWT: alg=none e confusione delle chiavi

Sfrutti e corregga gli errori di sicurezza più comuni nei JWT.

Lezione 3 di 413 passaggi

Vulnerabilità di JWT: alg=none e confusione delle chiavi è una lezione Cryptology Academy gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Cryptology Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Cryptology Academy include 4 lezioni in totale.

Superficie d'attacco dei JWT

I JWT sono firmati crittograficamente, ma molte librerie presentavano vulnerabilità gravi. Le più sfruttate sono l'attacco alg=none, l'attacco di confusione RS256→HS256 e il brute forcing di segreti deboli. Tutte derivano dal fidarsi di campi dell'header controllati dall'attaccante.

Attacco alg=none

La specifica JWT consente alg:"none" per i token non protetti. Le librerie difettose lo accettavano e saltavano completamente la verifica della firma. Un attaccante modifica il payload (ad es. "role":"admin"), imposta alg:"none", rimuove la firma e il server accetta il token.

Esempio di exploit alg=none

Originale: eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1c2VyIn0.SIG Attacco: eyJhbGciOiJub25lIn0.eyJzdWIiOiJhZG1pbiJ9. (firma vuota, punto finale). Un server vulnerabile verifica con successo e concede l'accesso da amministratore.

Correzione di alg=none

Non accettare mai alg:"none" in produzione. Inserire esplicitamente nella whitelist gli algoritmi consentiti: jwt.decode(token, key, algorithms=["HS256"]). La maggior parte delle librerie moderne (PyJWT 2+, jsonwebtoken 9+) rifiuta alg=none per impostazione predefinita.

Confusione delle chiavi RS256 → HS256

Se un server usa RS256 e un client modifica alg in HS256, il server potrebbe verificare usando la propria chiave pubblica RSA come segreto HMAC. Dato che la chiave pubblica è... pubblica, l'attaccante firma payload arbitrari con essa e il server li verifica.

Exploit della confusione delle chiavi

Passaggi: 1) Recuperare la chiave pubblica dall'endpoint JWKS. 2) Costruire un payload dannoso. 3) Firmare con HMAC-SHA256 usando i byte PEM grezzi della chiave pubblica come segreto HMAC. 4) Impostare alg:"HS256" nell'header. 5) Il percorso HS256 del server verifica con successo.

Correzione della confusione delle chiavi

Specificare sempre esplicitamente l'algoritmo previsto nella chiamata di verifica. Non ricavare mai l'algoritmo dall'header del token. Usare percorsi di codice separati per RS256 e HS256, che non possano essere scambiati dal chiamante.

Brute force di segreti deboli

HS256 con segreti deboli (meno di 256 bit di entropia) può essere violato con un attacco di forza bruta offline. Strumenti come hashcat supportano il cracking dei JWT: hashcat -a 0 -m 16500 token.txt wordlist.txt. Usare segreti crittograficamente casuali di almeno 32 byte.

Iniezione nell'header tramite kid

L'header kid (ID della chiave) seleziona quale chiave usare. Se il server usa kid come parametro di una query SQL o come percorso del filesystem senza sanificarlo: kid="../../dev/null" → HMAC con chiave vuota → token contraffatto accettato. Sanificare sempre kid.

Iniezione nell'header jwk

L'header jwk incorpora una chiave pubblica per la verifica. Un server vulnerabile potrebbe usare direttamente la chiave incorporata, consentendo all'attaccante di fornire la propria coppia di chiavi, firmare il token con la chiave privata e incorporare quella pubblica. Verificare solo rispetto a chiavi registrate.

Elusione del controllo di scadenza del token

Alcune implementazioni dimenticavano di controllare il claim exp oppure usavano l'ora del server in modo incoerente. Validare sempre esplicitamente exp, nbf e iat. Usare una libreria che li controlli per impostazione predefinita e non disabilitare mai la validazione dei claim in produzione.

Verifica rapida

Nell'attacco di confusione delle chiavi RS256→HS256, cosa usa l'attaccante come segreto HMAC?

Riepilogo

Le vulnerabilità JWT derivano dal fidarsi dell'header alg, dall'accettare alg=none e dall'usare segreti deboli. Correzione: vincolare gli algoritmi nel verificatore, usare segreti robusti e sanificare kid. Prossimo argomento: pratiche per un'implementazione sicura dei JWT.

Gratis per iniziare

Impara Cryptology Academy con un tutor IA — gratis

Scrivi ed esegui vero codice nel tuo browser, ricevi aiuto istantaneo da un tutor IA disponibile 24/7, e riprendi da dove hai lasciato sul web o nell'app.

Corsi
67
Lezioni
261

Domande Frequenti

La lezione «Vulnerabilità di JWT: alg=none e confusione delle chiavi» è gratuita?

Sì — il testo completo di «Vulnerabilità di JWT: alg=none e confusione delle chiavi» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Cryptology Academy, passa a CoddyKit PRO. Il corso Cryptology Academy include 4 lezioni in totale.

Cosa imparerò in «Vulnerabilità di JWT: alg=none e confusione delle chiavi»?

Sfrutti e corregga gli errori di sicurezza più comuni nei JWT. Eserciti Cryptology Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Cryptology Academy?

Non è richiesta alcuna esperienza precedente. Cryptology Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.

Quanto tempo richiede la lezione «Vulnerabilità di JWT: alg=none e confusione delle chiavi»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Cryptology Academy?

Sì. Ogni lezione Cryptology Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Anatomia di JWT: header, payload e firma
  2. HS256 e RS256: JWT simmetrici e asimmetrici
  3. Vulnerabilità di JWT: alg=none e confusione delle chiavi
  4. Best practice per un'implementazione sicura di JWT
← Torna a Cryptology Academy