CVE-2026-29000

10.0 CRITICAL

📋 TL;DR

This critical authentication bypass vulnerability in pac4j-jwt allows attackers with the server's RSA public key to forge JWT authentication tokens and authenticate as any user, including administrators. It affects all systems using vulnerable versions of pac4j-jwt for JWT-based authentication.

💻 Affected Systems

Products:
  • pac4j-jwt
Versions: Versions prior to 4.5.9, 5.7.9, and 6.3.3
Operating Systems: All
Default Config Vulnerable: ⚠️ Yes
Notes: Affects systems using JwtAuthenticator with encrypted JWTs. The vulnerability specifically impacts processing of JWE-wrapped PlainJWT tokens.

⚠️ Manual Verification Required

This CVE does not have specific version information in our database, so automatic vulnerability detection cannot determine if your system is affected.

Why? The CVE database entry doesn't specify which versions are vulnerable (no version ranges provided by the vendor/NVD).

🔒 Custom verification scripts are available for registered users. Sign up free to download automated test scripts.

Recommended Actions:
  1. Review the CVE details at NVD
  2. Check vendor security advisories for your specific version
  3. Test if the vulnerability is exploitable in your environment
  4. Consider updating to the latest version as a precaution

⚠️ Risk & Real-World Impact

🔴

Worst Case

Complete system compromise where attackers gain administrative access, potentially leading to data theft, privilege escalation, and full control over affected applications.

🟠

Likely Case

Unauthorized access to sensitive data and functionality, account takeover, and privilege escalation within applications using pac4j-jwt authentication.

🟢

If Mitigated

Limited impact if proper network segmentation, monitoring, and additional authentication layers are in place, though authentication bypass remains possible.

🌐 Internet-Facing: HIGH
🏢 Internal Only: HIGH

🎯 Exploit Status

Public PoC: ⚠️ Yes
Weaponized: LIKELY
Unauthenticated Exploit: ✅ No
Complexity: LOW

Attackers need the server's RSA public key, which is often publicly accessible in JWT authentication setups. The exploit technique is documented in security advisories.

🛠️ Fix & Mitigation

✅ Official Fix

Patch Version: 4.5.9, 5.7.9, or 6.3.3 depending on major version

Vendor Advisory: https://www.pac4j.org/blog/security-advisory-pac4j-jwt-jwtauthenticator.html

Restart Required: Yes

Instructions:

1. Identify your pac4j-jwt major version (4.x, 5.x, or 6.x). 2. Update to the corresponding patched version: 4.5.9 for 4.x, 5.7.9 for 5.x, or 6.3.3 for 6.x. 3. Restart your application. 4. Test authentication functionality.

🔧 Temporary Workarounds

Disable JWE-wrapped PlainJWT support

all

Configure JwtAuthenticator to reject JWE-wrapped PlainJWT tokens entirely

Configure JwtAuthenticator to only accept signed JWTs and reject JWE-wrapped PlainJWT

🧯 If You Can't Patch

  • Implement additional authentication layer (MFA, IP whitelisting)
  • Monitor authentication logs for suspicious JWT patterns and implement rate limiting

🔍 How to Verify

Check if Vulnerable:

Check your pac4j-jwt version in dependency files (pom.xml, build.gradle) or runtime. If version is below 4.5.9, 5.7.9, or 6.3.3 depending on major version, you are vulnerable.

Check Version:

Check project dependency files or use: mvn dependency:tree | grep pac4j-jwt (for Maven) or gradle dependencies | grep pac4j-jwt (for Gradle)

Verify Fix Applied:

Verify the updated version in your dependency files and test that JWE-wrapped PlainJWT tokens with arbitrary claims are properly rejected.

📡 Detection & Monitoring

Log Indicators:

  • Authentication attempts with JWE-wrapped PlainJWT tokens
  • Successful authentication with unexpected user roles or subjects
  • Multiple authentication attempts with varying JWT claims

Network Indicators:

  • Unusual JWT token patterns in authentication requests
  • Requests containing JWE-wrapped PlainJWT with modified claims

SIEM Query:

source="authentication_logs" AND (message="JWE-wrapped PlainJWT" OR message="unexpected JWT claim" OR message="authentication bypass")

🔗 References

📤 Share & Export