
Offline-Scanner für CVE-2026-29000 (CVSS 10.0) in org.pac4j:pac4j-jwt. Untersucht Jars/Fat-Jars direkt, funktioniert also dort, wo mvn dependency:tree nicht funktioniert. Einzelnes Jar, keine Abhängigkeiten, Java 8+.
Offline-Prüfung auf CVE-2026-29000 (CVSS 10.0) – einschließlich der Pakete, die im offiziellen Advisory nicht aufgeführt sind.
English | 中文
Ein einzelnes JAR, ca. 24 KB, keine Laufzeitabhängigkeiten, ab Java 8 verfügbar, vollständig offline, es werden keinerlei Daten nach außen übertragen.
Der JwtAuthenticator von org.pac4j:pac4j-jwt erzwingt bei der Verarbeitung von verschlüsselten JWTs (JWE) keine Signaturprüfung.
Ein Angreifer muss lediglich den RSA-Public-Key des Servers kennen (der Public-Key ist ohnehin öffentlich),
kann dann ein JWE-verpacktes PlainJWT konstruieren, subject und Rolle auf beliebige Werte setzen
und sich als beliebiger Benutzer anmelden, einschließlich Administrator. Es sind keinerlei Zugangsdaten erforderlich.
| Punkt | Wert |
|---|---|
| CVE | CVE-2026-29000 |
| GitHub Advisory | GHSA-pm7g-w2cf-q238 |
| CVSS | 10.0 (Maximalwert) |
| Veröffentlichung | 2026-03-05 |
pac4j wird weit verbreitet integriert, u. a. in Spring Security, Apereo CAS, JEE, Vert.x, Play und Dropwizard.
v0.1.0 behauptete, „die offizielle Schwachstellendatenbank listet nur 1 Paket, tatsächlich sind es 5", und meldete
daher pac4j-oidc / javalin-pac4j / lagom-pac4j / ratpack-pac4j als gefährdet.
Das waren Fehlalarme. Das offizielle Advisory listet zu Recht nur pac4j-jwt.
Grundlage der Überprüfung (zwei unabhängige Belege, beide selbst reproduzierbar):
| Artefakt | Seine Abhängigkeit von pac4j-jwt | Wird sie an Nutzer weitergegeben |
|---|---|---|
pac4j-oidc | test-Scope (Version für Version geprüft: 3.0.0 / 4.0.0 / 4.5.0 / 5.0.0 / 5.7.0 / 6.0.0 / 6.3.0) | ❌ |
javalin-pac4j | test-Scope | ❌ |
lagom-pac4j-parent | provided-Scope | ❌ |
ratpack-pac4j:1.4.6 | Der gesamte Abhängigkeitsblock ist von einem XML-Kommentar umschlossen und existiert gar nicht | ❌ |
test- / provided-Abhängigkeiten nicht an nachgelagerte Projekte weitergegeben,
pac4j-jwt erscheint also nicht im Runtime-Classpath der Nutzer.pac4j-oidc-6.0.0.jar enthält insgesamt 78 Einträge, alle unter org/pac4j/oidc/,
keine einzige hereingeshadete pac4j-jwt-Klasse. Sie wird weder weitergereicht noch mitgeliefert.Wo der Fehler lag: v0.1.0 hat jede pom einzeln geparst, aber nur darauf geschaut, „wer die Koordinate pac4j-jwt nennt",
ohne den scope zu beachten – „in der pom steht es" wurde mit „der Nutzer bekommt es" gleichgesetzt.
Falls Sie wegen eines Berichts aus v0.1.0 pac4j aktualisiert haben, war dieses Update nicht erforderlich (das Update selbst ist harmlos). Handlungsbedarf besteht nur, wenn in Ihrer Anwendung tatsächlich eine betroffene Version von
pac4j-jwtvorhanden ist.
Um festzustellen, ob auf einer bestimmten Maschine tatsächlich ein betroffenes pac4j-jwt vorhanden ist, versagt mvn dependency:tree in zwei Fällen –
auf einer Produktionsmaschine liegt nur ein fertig gebautes Fat-JAR (ohne Quellcode und pom); oder es wurde in ein SDK hineingeshade
und taucht im Abhängigkeitsbaum gar nicht auf. Dieses Werkzeug durchsucht direkt das Artefakt selbst und ist nicht von der Build-Umgebung abhängig.
| Artefakt | Anzahl betroffener Versionen | Offizielles Advisory |
|---|---|---|
org.pac4j:pac4j-jwt | 114 | ✅ das einzige aufgeführte, und das ist korrekt |
java -jar pac4j-check.jar ./myapp.jar # scannt ein jar/war
java -jar pac4j-check.jar /opt/apps # scannt ein Verzeichnis (rekursiv)
java -jar pac4j-check.jar /opt/apps --json # JSON-Ausgabe, praktisch für Pipes
java -jar pac4j-check.jar ./app.jar --gbk # bei Zeichensatzproblemen in der Windows-Konsole
Exit-Codes: 0 = nicht betroffen gefunden · 1 = fraglich/nicht bestimmbar · 2 = betroffen gefunden. Direkt in CI einbindbar.
[CRITICAL] pac4j-jwt 5.4.3
位置 :demo-app.jar!/BOOT-INF/lib/pac4j-jwt-5.4.3.jar
版本来源:pom.properties(可靠)
部署形态:Spring Boot fat-JAR
结论 :命中 CVE-2026-29000 —— JWE 处理路径未强制校验签名,
拿到服务器 RSA 公钥即可伪造任意身份(含管理员)登录
处置 :升级 pac4j-jwt 至 5.7.9
v0.1.0 würde hier zusätzlich einen Eintrag
[CRITICAL] pac4j-oidcmelden – das war ein Fehlalarm, in v0.2.0 entfernt, Begründung siehe die Korrektur am Anfang.
mvn dependency:tree nicht findetDie Bewertung richtet sich ausschließlich nach dem offiziellen Advisory GHSA-pm7g-w2cf-q238:
pac4j-jwt < 4.5.9 -> 升 4.5.9
pac4j-jwt >= 5.0.0-RC1 且 < 5.7.9 -> 升 5.7.9
pac4j-jwt >= 6.0.4.1 且 < 6.3.3 -> 升 6.3.3
Selbstüberprüfung: Dieses Werkzeug führt die Bewertung für alle 147 Versionen von pac4j-jwt auf Maven Central durch,
die Trefferzahl beträgt 114 und stimmt exakt mit der Summe der Versionen aus den drei Bereichen des offiziellen Advisories überein (13+33+68).
Diese Zusicherung ist im Test (OfficialRangeCrossCheckTest) hinterlegt; bei Abweichung schlägt der Build fehl.
⚠️ Aber man muss sich klar machen, was damit verifiziert wird: Verifiziert wird, dass der Versionsbereichs-Algorithmus korrekt ist, nicht verifizierbar ist, „welche Artefakte in die Bewertungstabelle gehören" – genau Letzteres war die Ursache des Fehlalarms in v0.1.0, und damals war diese Selbstüberprüfung grün. Der Umfang, in dem die Prüfung besteht, ist nicht der Umfang, in dem die Schlussfolgerung gilt.
Es wird nur die eine groupId org.pac4j abgedeckt.
Eine Drittstudie nennt insgesamt 19 betroffene Artefakte mit 1.020 Versionen, veröffentlicht aber keine vollständige Liste.
Dieses Werkzeug rekonstruiert unabhängig den Teil im Bereich von org.pac4j und erhebt keinen Anspruch auf vollständige Abdeckung.
Andere groupIds (z. B. org.apereo.cas von Apereo CAS) sind nicht enthalten.
pac4j-jwt 6.0.0 bis 6.0.4 wird als „fraglich" und nicht als „betroffen" gekennzeichnet.
Offiziell gilt 6.x ab 6.0.4.1 als betroffen; eine Drittstudie behauptet, die Schwachstelle sei bereits in 1.9.2 eingeführt worden –
falls das zutrifft, müssten auch diese 5 Versionen dazugezählt werden. Wir haben die Schlussfolgerung der Drittstudie nicht unabhängig verifiziert,
daher werden sie separat gekennzeichnet und ein konservatives Upgrade empfohlen, statt sie direkt als gefährdet einzustufen.
Warum so konservativ: Eine falsche Bewertungsregel ist kein „Fehlalarm", sondern führt dazu, dass Nutzer das Falsche tun. Lieber als fraglich kennzeichnen, als einen nicht verifizierten Bereich als feste Schlussfolgerung festzuschreiben.
mvn package # 产物:target/pac4j-check.jar
mvn test # 31 个测试
Wenn Sie Bewertungsfehler, übersehene Fälle oder Fehlalarme finden, erstellen Sie bitte ein Issue. Wenn Sie reproduzierbare Artefakt-Koordinaten (groupId:artifactId:version) angeben können, geht die Behebung deutlich schneller.
Apache License 2.0
Offline scanner for CVE-2026-29000 (CVSS 10.0) — including the packages the official advisory does not list.