Description
Lemonldap::NG::Portal versions from 2.23.0 before 2.23.4 for Perl allow a PKCE bypass for public Relying Parties in "PKCE or secret" mode because checkEndPointAuthenticationCredentials does not verify the client secret.

With oidcRPMetaDataOptionsRequirePKCE set to 2, the authorization endpoint issues a code even when the request carries no code_challenge, and token() admits the exchange as long as a challenge was stored or an authentication method was returned for the caller. checkEndPointAuthenticationCredentials() skips the secret comparison for a Relying Party marked public and still returns the method deduced from the request, so any Basic or form credential satisfies the secret branch. validatePKCEChallenge() then passes, because neither a challenge nor a verifier is present.

An attacker who intercepts an authorization code issued to a public Relying Party can exchange it for the user's access, ID and refresh tokens by replaying the client_id with an arbitrary secret, which is the attack PKCE prevents. Dynamic client registration creates every Relying Party in this mode.
Published: 2026-09-25
Score: 9.1 Critical
EPSS: < 1% Very Low
KEV: No
Impact: Token theft via PKCE bypass
Action: Immediate Patch
AI Analysis

Impact

The flaw resides in the checkEndPointAuthenticationCredentials routine, which skips verifying the client secret for public Relying Parties configured in "PKCE or secret" mode. An attacker who can obtain an authorization code issued to a public RP can replay that code with any client secret, causing the token endpoint to issue access, ID, and refresh tokens. This results in unauthorized access to the target user's resources and accounts. The weakness is a validation bypass that permits credential substitution, leading to token compromise.

Affected Systems

Lemonldap::NG::Portal in Perl, versions 2.23.0 through 2.23.3 inclusive. The issue affects any public Relying Party that has been created in "PKCE or secret" mode, including those added via dynamic client registration.

Risk and Exploitability

The vulnerability is exploitable remotely via a reachable authorization endpoint; it requires an attacker to intercept or otherwise obtain an authorization code for a public RP. Because the token endpoint accepts the exchange without validating the client secret when a code challenge is absent, the attack can succeed without needing privileged server access. The CVSS score is 9.1 and the EPSS score is less than 1%, indicating a high severity with a very low but non-zero exploitation probability; the issue is not listed in KEV. Nevertheless, the vulnerability permits full token theft and should be considered high risk.

Generated by OpenCVE AI on September 27, 2026 at 00:24 UTC.

Remediation

Vendor Solution

Upgrade to Lemonldap-NG-Portal 2.23.4 or later.


Vendor Workaround

For deployments that cannot upgrade to 2.23.4, set RequirePKCE to 1 on public Relying Parties so that a code challenge is always required. Relying Parties created through dynamic registration are always in "PKCE or secret" mode, so that endpoint has to be disabled as well.


OpenCVE Recommended Actions

  • Upgrade Lemonldap::NG-Portal to version 2.23.4 or later, which fixes the PKCE bypass by enforcing client secret verification.
  • If an upgrade is not immediately possible, modify the configuration to set RequirePKCE to 1 on all public Relying Parties so that a code challenge is mandatory, thereby preventing the bypass.
  • Disable or remove any public Relying Parties that were created through dynamic client registration in "PKCE or secret" mode, or reconfigure them to use strict secret-only authentication.

Generated by OpenCVE AI on September 27, 2026 at 00:24 UTC.

Tracking

Sign in to view the affected projects.

Advisories
Source ID Title
Debian DSA Debian DSA DSA-6520-1 lemonldap-ng security update
History

Mon, 28 Sep 2026 20:15:00 +0000

Type Values Removed Values Added
First Time appeared Lemonldap-ng
Lemonldap-ng portal
Vendors & Products Lemonldap-ng
Lemonldap-ng portal

Sat, 26 Sep 2026 23:30:00 +0000

Type Values Removed Values Added
Metrics cvssV3_1

{'score': 9.1, 'vector': 'CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N'}


Sat, 26 Sep 2026 18:30:00 +0000

Type Values Removed Values Added
Metrics ssvc

{'options': {'Automatable': 'yes', 'Exploitation': 'poc', 'Technical Impact': 'total'}, 'version': '2.0.3'}


Fri, 25 Sep 2026 03:30:00 +0000

Type Values Removed Values Added
References

Fri, 25 Sep 2026 01:00:00 +0000

Type Values Removed Values Added
Description Lemonldap::NG::Portal versions from 2.23.0 before 2.23.4 for Perl allow a PKCE bypass for public Relying Parties in "PKCE or secret" mode because checkEndPointAuthenticationCredentials does not verify the client secret. With oidcRPMetaDataOptionsRequirePKCE set to 2, the authorization endpoint issues a code even when the request carries no code_challenge, and token() admits the exchange as long as a challenge was stored or an authentication method was returned for the caller. checkEndPointAuthenticationCredentials() skips the secret comparison for a Relying Party marked public and still returns the method deduced from the request, so any Basic or form credential satisfies the secret branch. validatePKCEChallenge() then passes, because neither a challenge nor a verifier is present. An attacker who intercepts an authorization code issued to a public Relying Party can exchange it for the user's access, ID and refresh tokens by replaying the client_id with an arbitrary secret, which is the attack PKCE prevents. Dynamic client registration creates every Relying Party in this mode.
Title Lemonldap::NG::Portal versions from 2.23.0 before 2.23.4 for Perl allow a PKCE bypass for public Relying Parties in "PKCE or secret" mode because checkEndPointAuthenticationCredentials does not verify the client secret
Weaknesses CWE-1390
References

Subscriptions

Lemonldap-ng Portal
cve-icon MITRE

Status: PUBLISHED

Assigner: CPANSec

Published:

Updated: 2026-09-26T22:29:08.052Z

Reserved: 2026-09-15T23:43:48.309Z

Link: CVE-2026-92289

cve-icon Vulnrichment

Updated: 2026-09-25T02:10:01.838Z

cve-icon NVD

Status : Deferred

Published: 2026-09-25T01:16:48.943

Modified: 2026-09-26T23:16:38.897

Link: CVE-2026-92289

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-09-28T19:42:57Z

Weaknesses