CPANSA-OIDC-Lite-2026-13089: OIDC-Lite vulnerability
| Publisher | giterlizzi | Document category | csaf_security_advisory |
|---|---|---|---|
| Initial release date | 2026-07-22T00:00:00 | Engine | CSAF Perl Toolkit 0.26 |
| Current release date | 2026-07-22T00:00:00 | Build Date | |
| Current version | 1 | Status | final |
| CVSS v3.1 Base Score | 7.5 | Severity | High |
| Original language | Language | en | |
| Also referred to | |||
Vulnerability Description
OIDC::Lite versions through 0.12.1 for Perl allow ID Token signature verification bypass via a token-controlled algorithm allowlist in verify.
When the caller does not pin an algorithm, OIDC::Lite::Model::IDToken::verify sets $self->alg($self->header->{alg}) from the token's own header and then calls decode_jwt(token, key, 1, [$self->alg]), handing JSON::WebToken an accepted-algorithm allowlist taken from the untrusted token. A token with alg=none yields ['none'], so decode_jwt returns the claims with no signature check, and a token with alg=HS256 is verified with the RP's RSA public key as the HMAC secret (RS to HS confusion).
The ID Token is the OpenID Connect authentication assertion delivered to the Relying Party. Any caller that verifies an ID Token through the unpinned load(token)->verify path, or load(token, key) with only the key pinned, accepts a forged token carrying attacker-chosen claims such as sub and is authenticated as any user. Passing an explicit algorithm so $self->alg is already set bypasses the header-derived allowlist and is not affected.
Note that the latest version uploaded to CPAN is 0.10. Later versions are available in the git repository.
Vulnerabilities
CVE-2026-13089
Vulnerability DescriptionOIDC::Lite versions through 0.12.1 for Perl allow ID Token signature verification bypass via a token-controlled algorithm allowlist in verify.
When the caller does not pin an algorithm, OIDC::Lite::Model::IDToken::verify sets $self->alg($self->header->{alg}) from the token's own header and then calls decode_jwt(token, key, 1, [$self->alg]), handing JSON::WebToken an accepted-algorithm allowlist taken from the untrusted token. A token with alg=none yields ['none'], so decode_jwt returns the claims with no signature check, and a token with alg=HS256 is verified with the RP's RSA public key as the HMAC secret (RS to HS confusion).
The ID Token is the OpenID Connect authentication assertion delivered to the Relying Party. Any caller that verifies an ID Token through the unpinned load(token)->verify path, or load(token, key) with only the key pinned, accepts a forged token carrying attacker-chosen claims such as sub and is authenticated as any user. Passing an explicit algorithm so $self->alg is already set bypasses the header-derived allowlist and is not affected.
Note that the latest version uploaded to CPAN is 0.10. Later versions are available in the git repository.
| Weakness | CWE-347 : Improper Verification of Cryptographic Signature |
|---|
Product status
Known affected
| Product | Score | ||||||||
|---|---|---|---|---|---|---|---|---|---|
| OIDC-Lite less than 0.10 |
|
Fixed
- OIDC-Lite greater than or equal 0.10
giterlizzi
Namespace: https://github.com/giterlizzi/
gdt@cpan.org
References
- CPANSA-OIDC-Lite-2026-13089 JSON self
https://raw.githubusercontent.com/giterlizzi/perl-CPANSA-CSAF/develop/csaf/white/2026/cpansa-oidc-lite-2026-13089.json - https://datatracker.ietf.org/doc/html/rfc8725#section-3.1 external
https://datatracker.ietf.org/doc/html/rfc8725#section-3.1 - https://github.com/ritou/p5-oidc-lite/pull/31 external
https://github.com/ritou/p5-oidc-lite/pull/31 - https://security.metacpan.org/patches/O/OIDC-Lite/0.10/CVE-2026-13089-r1.patch external
https://security.metacpan.org/patches/O/OIDC-Lite/0.10/CVE-2026-13089-r1.patch - http://www.openwall.com/lists/oss-security/2026/07/22/17 external
http://www.openwall.com/lists/oss-security/2026/07/22/17 - CVE-2026-13089 (NVD) external
https://nvd.nist.gov/vuln/detail/CVE-2026-13089
Revision history
| Version | Date of the revision | Summary of the revision |
|---|---|---|
| 1 | Wed Jul 22 00:00:00 2026 | First release |
Sharing rules
TLP:WHITE
For the TLP version see: https://www.first.org/tlp/