
Libreria di laboratorio proof-of-concept che dimostra la CVE-2026-29000 in pac4j-jwt, confrontando versioni vulnerabili e corrette con Docker per mostrare l'accettazione e il rifiuto di JWT contraffatti.
Questo repository contiene un PoC a livello di libreria per CVE-2026-29000 in pac4j-jwt.
Confronta il comportamento vulnerabile e quello corretto con due casi:
| Versione | Baseline | Attacco | Risultato |
|---|
6.0.3 | ✅ | ✅ | Vulnerabile |
6.0.4.1 | ✅ | ✅ | Vulnerabile |
6.3.3 | ✅ | ❌ | Corretta |
Questo PoC dimostra la creazione di un profilo autenticato con subject e ruoli controllati dall'attaccante nelle versioni vulnerabili, mentre la versione corretta rifiuta il token contraffatto.
Questa non è una demo di applicazione web.
È un piccolo programma Java che chiama direttamente JwtAuthenticator e confronta più versioni di pac4j-jwt all'interno di Docker.
L'obiettivo è dimostrare tre cose:
Le versioni testate sono state scelte deliberatamente:
Questo fornisce al laboratorio tre punti di riferimento utili:
.
├── docker-compose.yml
├── Dockerfile
├── pom.xml
└── src/main/java/lab/Repro.java
docker-compose.yml
Definisce la matrice di test per ciascuna versione.
Dockerfile
Compila ed esegue il PoC all'interno di un container.
pom.xml
Definisce le dipendenze e compila un fat JAR eseguibile.
src/main/java/lab/Repro.java
L'harness vero e proprio del PoC.
Il file docker-compose.yml definisce tre servizi:
v603 = test di pac4j-jwt 6.0.3v6041 = test di pac4j-jwt 6.0.4.1patched = test di pac4j-jwt 6.3.3Quindi questi comandi significano "esegui il PoC una volta contro quella specifica versione":
docker compose run --rm v603
docker compose run --rm v6041
docker compose run --rm patched
--rm significa che il container temporaneo viene rimosso al termine dell'esecuzione.
docker compose build --no-cache
docker compose run --rm v603
docker compose run --rm v6041
docker compose run --rm patched
Per ciascuna versione, il programma esegue due casi.
Genera un token legittimo e lo valida tramite JwtAuthenticator.
Risultato atteso:
Genera un token contraffatto con claim controllate dall'attaccante e lo valida tramite JwtAuthenticator.
Risultato atteso:
Dovresti vedere qualcosa del genere:
[case] baseline
result: ACCEPTED
observed_subject: alice
observed_roles: [ROLE_USER]
[case] attack
result: ACCEPTED
observed_subject: admin#override
observed_roles: [ROLE_SUPERUSER, ROLE_ADMIN]
[summary]
conclusion: VULNERABLE: forged token accepted
Significato:
Dovresti vedere qualcosa del genere:
[case] baseline
result: ACCEPTED
observed_subject: alice
observed_roles: [ROLE_USER]
[case] attack
result: REJECTED
reason: CredentialsException: A non-signed JWT cannot be accepted as signature configurations have been defined
[summary]
conclusion: PATCHED: forged token rejected
Significato:
Questa CVE interessa un percorso di autenticazione a livello di libreria, non una singola applicazione con un modello di ruoli universale.
La parte riutilizzabile è la forma dell'attacco:
JwtAuthenticatorCiò che non è universale nelle applicazioni reali:
Per questo motivo, questo repository si concentra sul dimostrare che la libreria accetta claim contraffatte controllate dall'attaccante nelle versioni vulnerabili, piuttosto che fingere che esista un token universale che funzionerebbe automaticamente contro applicazioni arbitrarie.
docker compose run --rm v603docker compose run --rm v6041docker compose run --rm patched


Questo progetto dimostra tre fatti fondamentali:
6.0.3 e 6.0.4.16.3.3Questa è la prova centrale vulnerabile-versus-corretta per questa CVE in questo repository.
Nelle versioni vulnerabili, il token contraffatto non viene semplicemente analizzato — produce un profilo autenticato con subject e ruoli controllati dall'attaccante.