
Prova di concetto che dimostra la confusione dell'algoritmo JWT nella libreria fast-jwt. Include server vulnerabile, script per il forging di token e fix di verifica per l'educazione sulla sicurezza.
Questo repository dimostra la confusione degli algoritmi JWT in fast-jwt quando la verifica del token non blocca gli algoritmi consentiti.
Dalla radice del progetto, esegui:
npm install
L'app si aspetta questi file:
keys/private.pemkeys/public.pemEsegui uno dei seguenti set di comandi.
PowerShell (Windows):
New-Item -ItemType Directory -Path keys -Force | Out-Null
openssl genrsa -out keys/private.pem 2048
openssl rsa -in keys/private.pem -RSAPublicKey_out -out keys/public.pem
Linux/macOS/Git Bash:
mkdir -p keys
openssl genrsa -out keys/private.pem 2048
openssl rsa -in keys/private.pem -RSAPublicKey_out -out keys/public.pem
node server.js
Output previsto:
Server running at http://localhost:3000
curl http://localhost:3000/generateToken
node sign.js
Copia il token stampato.
node checkAdmin.js <JWT_TOKEN>
Se l'attacco ha successo, la risposta contiene Welcome Admin!.
In server.js, il verificatore non limita gli algoritmi:
const verifySync = createVerifier({
key: publicKey,
});
Senza una lista bianca di algoritmi, il server potrebbe accettare un token HS256 malevolo firmato usando la chiave pubblica come segreto HMAC.
Nelle demo CVE del gruppo, l'oggetto vulnerabile è la libreria (non può essere eseguita autonomamente). Pertanto, è necessaria un'applicazione simulata per replicare il modo in cui un sistema reale chiama l'API di quella libreria. In questo repo, il file server.js è il livello applicativo simulato.
Codice di supporto del flusso PoC:
In sintesi, il gruppo non ha riscritto le funzioni della libreria. Il gruppo ha semplicemente utilizzato le API originali della libreria vulnerabile (createSigner, createVerifier) all'interno di un'applicazione simulata per riprodurre il contesto di sfruttamento.
Limitare la verifica a RS256:
const verifySync = createVerifier({
key: publicKey,
algorithms: ["RS256"],
});
Questo progetto è solo per l'apprendimento della sicurezza in un ambiente di laboratorio controllato.