
Bibliotheksebene Proof-of-Concept-Labor zur Demonstration von CVE-2026-29000 in pac4j-jwt, das verwundbare und gepatchte Versionen mit Docker vergleicht, um die Akzeptanz und Ablehnung gefälschter JWTs zu zeigen.
Dieses Repository enthält einen Bibliotheks-Level-PoC für CVE-2026-29000 in pac4j-jwt.
Es vergleicht verwundbares und gepatchtes Verhalten anhand von zwei Fällen:
| Version | Baseline | Angriff | Ergebnis |
|---|
6.0.3 | ✅ | ✅ | Verwundbar |
6.0.4.1 | ✅ | ✅ | Verwundbar |
6.3.3 | ✅ | ❌ | Gepatcht |
Dieser PoC demonstriert die Erstellung authentifizierter Profile mit angreiferkontrolliertem Subject und Rollen auf verwundbaren Versionen, während die gepatchte Version das gefälschte Token ablehnt.
Dies ist keine Webanwendungs-Demo.
Es ist ein kleines Java-Programm, das JwtAuthenticator direkt aufruft und mehrere Versionen von pac4j-jwt innerhalb von Docker vergleicht.
Das Ziel ist es, drei Dinge zu beweisen:
Die getesteten Versionen wurden bewusst gewählt:
Dies gibt dem Labor drei nützliche Referenzpunkte:
.
├── docker-compose.yml
├── Dockerfile
├── pom.xml
└── src/main/java/lab/Repro.java
docker-compose.yml
Definiert die Testmatrix für jede Version.
Dockerfile
Baut und führt den PoC innerhalb eines Containers aus.
pom.xml
Definiert Abhängigkeiten und baut ein ausführbares Fat-JAR.
src/main/java/lab/Repro.java
Das eigentliche PoC-Harness.
Die Datei docker-compose.yml definiert drei Dienste:
v603 = testet pac4j-jwt 6.0.3v6041 = testet pac4j-jwt 6.0.4.1patched = testet pac4j-jwt 6.3.3Diese Befehle bedeuten also „führe den PoC einmal gegen diese spezifische Version aus“:
docker compose run --rm v603
docker compose run --rm v6041
docker compose run --rm patched
--rm bedeutet, dass der temporäre Container nach Abschluss des Laufs entfernt wird.
docker compose build --no-cache
docker compose run --rm v603
docker compose run --rm v6041
docker compose run --rm patched
Für jede Version führt das Programm zwei Fälle aus.
Es generiert ein legitimes Token und validiert es über JwtAuthenticator.
Erwartetes Ergebnis:
Es generiert ein gefälschtes Token mit angreiferkontrollierten Claims und validiert es über JwtAuthenticator.
Erwartetes Ergebnis:
Sie sollten etwas wie Folgendes sehen:
[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
Bedeutung:
Sie sollten etwas wie Folgendes sehen:
[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
Bedeutung:
Diese CVE betrifft einen Bibliotheks-Level-Authentifizierungspfad, nicht eine einzelne Anwendung mit einem universellen Rollenmodell.
Der wiederverwendbare Teil ist die Angriffsform:
JwtAuthenticator übergebenWas nicht universell über reale Anwendungen hinweg ist:
Aus diesem Grund konzentriert sich dieses Repository darauf zu beweisen, dass die Bibliothek gefälschte, angreiferkontrollierte Claims auf verwundbaren Versionen akzeptiert, anstatt so zu tun, als gäbe es ein universelles Token, das automatisch gegen beliebige Anwendungen funktionieren würde.
docker compose run --rm v603docker compose run --rm v6041docker compose run --rm patched


Dieses Projekt demonstriert drei Kernfakten:
6.0.3 und 6.0.4.1 akzeptiert6.3.3 abgelehntDies ist der Kernbeweis für verwundbar-gegenüber-gepatcht für diese CVE in diesem Repository.
Auf verwundbaren Versionen wird das gefälschte Token nicht nur geparst — es erzeugt ein authentifiziertes Profil mit angreiferkontrolliertem Subject und Rollen.