CVE-2026-19349
Lemonldap::NG::Portal versions from 2.0.0 before 2.16.9, from 2.17.0 before 2.21.5, from 2.22.0 before 2.23.3 for Perl allow authentication bypass via an OAuth2 state parameter stored as an SSO session in the GitHub and LinkedIn backends
Lemonldap::NG::Portal versions from 2.0.0 before 2.16.9, from 2.17.0 before 2.21.5, from 2.22.0 before 2.23.3 for Perl allow authentication bypass via an OAuth2 state parameter stored as an SSO session in the GitHub and LinkedIn backends.
Before redirecting to the identity provider, extractFormInfo() creates the state session with the positional call getApacheSession( undef, 1, 0, 'GitHubState' ). getApacheSession() takes a session id followed by a named argument hash, so the trailing arguments become that hash, kind defaults to SSO, and the state is written to the global session storage as a regular SSO session. Its identifier is handed to the unauthenticated visitor as the state parameter of the redirection URL.
Any visitor who reaches the GitHub or LinkedIn endpoint can replay that identifier as a session cookie and obtain a valid SSO session without authenticating. The session holds neither _user nor authenticationLevel, which the shipped bootstrap configuration accepts because it grants virtual hosts a "default => accept" access rule; deployments whose rules test the user or require an authentication level are less exposed. Only configurations with the GitHub or LinkedIn authentication module enabled are affected.
Attack profile
How easy it is to exploit
- Attack vector
- Network
- Complexity
- Low
- Privileges needed
- None
- User interaction
- None
What an attacker can affect
- Confidentiality
- High
- Integrity
- High
- Availability
- High
Exploit likelihood
What each source reports
CVE List Score used
9.8
Lemonldap::NG::Portal versions from 2.0.0 before 2.16.9, from 2.17.0 before 2.21.5, from 2.22.0 before 2.23.3 for Perl allow authentication bypass via an OAuth2 state parameter stored as an SSO session in the GitHub and LinkedIn backends
Lemonldap::NG::Portal versions from 2.0.0 before 2.16.9, from 2.17.0 before 2.21.5, from 2.22.0 before 2.23.3 for Perl allow authentication bypass via an OAuth2 state parameter stored as an SSO session in the GitHub and LinkedIn backends.
Before redirecting to the identity provider, extractFormInfo() creates the state session with the positional call getApacheSession( undef, 1, 0, 'GitHubState' ). getApacheSession() takes a session id followed by a named argument hash, so the trailing arguments become that hash, kind defaults to SSO, and the state is written to the global session storage as a regular SSO session. Its identifier is handed to the unauthenticated visitor as the state parameter of the redirection URL.
Any visitor who reaches the GitHub or LinkedIn endpoint can replay that identifier as a session cookie and obtain a valid SSO session without authenticating. The session holds neither _user nor authenticationLevel, which the shipped bootstrap configuration accepts because it grants virtual hosts a "default => accept" access rule; deployments whose rules test the user or require an authentication level are less exposed. Only configurations with the GitHub or LinkedIn authentication module enabled are affected.
- Record
CVE-2026-19349- CVSS 3.1
- 9.8 Critical
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H - Weakness
- CWE-305, CWE-628
- Updated
- 2026-11-02
EUVDEUVD-2026-59963
9.8
Lemonldap::NG::Portal versions from 2.0.0 before 2.16.9, from 2.17.0 before 2.21.5, from 2.22.0 before 2.23.3 for Perl allow authentication bypass via an OAuth2 state parameter stored as an SSO session in the GitHub and LinkedIn backends.
Before redirecting to the identity provider, extractFormInfo() creates the state session with the positional call getApacheSession( undef, 1, 0, 'GitHubState' ). getApacheSession() takes a session id followed by a named argument hash, so the trailing arguments become that hash, kind defaults to SSO, and the state is written to the global session storage as a regular SSO session. Its identifier is handed to the unauthenticated visitor as the state parameter of the redirection URL.
Any visitor who reaches the GitHub or LinkedIn endpoint can replay that identifier as a session cookie and obtain a valid SSO session without authenticating. The session holds neither _user nor authenticationLevel, which the shipped bootstrap configuration accepts because it grants virtual hosts a "default => accept" access rule; deployments whose rules test the user or require an authentication level are less exposed. Only configurations with the GitHub or LinkedIn authentication module enabled are affected.
- Record
EUVD-2026-59963- CVSS 3.1
- 9.8 Critical
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H - Updated
- 2026-11-02
GitHub AdvisoriesGHSA-4vx7-c7qw-2vx4
9.8
Lemonldap::NG::Portal versions from 2.0.0 before 2.16.9, from 2.17.0 before 2.21.5, from 2.22.0...
Lemonldap::NG::Portal versions from 2.0.0 before 2.16.9, from 2.17.0 before 2.21.5, from 2.22.0 before 2.23.3 for Perl allow authentication bypass via an OAuth2 state parameter stored as an SSO session in the GitHub and LinkedIn backends.
Before redirecting to the identity provider, extractFormInfo() creates the state session with the positional call getApacheSession( undef, 1, 0, 'GitHubState' ). getApacheSession() takes a session id followed by a named argument hash, so the trailing arguments become that hash, kind defaults to SSO, and the state is written to the global session storage as a regular SSO session. Its identifier is handed to the unauthenticated visitor as the state parameter of the redirection URL.
Any visitor who reaches the GitHub or LinkedIn endpoint can replay that identifier as a session cookie and obtain a valid SSO session without authenticating. The session holds neither _user nor authenticationLevel, which the shipped bootstrap configuration accepts because it grants virtual hosts a "default => accept" access rule; deployments whose rules test the user or require an authentication level are less exposed. Only configurations with the GitHub or LinkedIn authentication module enabled are affected.
- Record
GHSA-4vx7-c7qw-2vx4- CVSS 3.1
- 9.8 Critical
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H - Weakness
- CWE-305
- Updated
- 2026-11-02
NVD
9.8
Lemonldap::NG::Portal versions from 2.0.0 before 2.16.9, from 2.17.0 before 2.21.5, from 2.22.0 before 2.23.3 for Perl allow authentication bypass via an OAuth2 state parameter stored as an SSO session in the GitHub and LinkedIn backends.
Before redirecting to the identity provider, extractFormInfo() creates the state session with the positional call getApacheSession( undef, 1, 0, 'GitHubState' ). getApacheSession() takes a session id followed by a named argument hash, so the trailing arguments become that hash, kind defaults to SSO, and the state is written to the global session storage as a regular SSO session. Its identifier is handed to the unauthenticated visitor as the state parameter of the redirection URL.
Any visitor who reaches the GitHub or LinkedIn endpoint can replay that identifier as a session cookie and obtain a valid SSO session without authenticating. The session holds neither _user nor authenticationLevel, which the shipped bootstrap configuration accepts because it grants virtual hosts a "default => accept" access rule; deployments whose rules test the user or require an authentication level are less exposed. Only configurations with the GitHub or LinkedIn authentication module enabled are affected.
- Record
CVE-2026-19349- CVSS 3.1
- 9.8 Critical
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H - Weakness
- CWE-305, CWE-628
- Updated
- 2026-11-02
OSV
9.8
Lemonldap::NG::Portal versions from 2.0.0 before 2.16.9, from 2.17.0 before 2.21.5, from 2.22.0 before 2.23.3 for Perl allow authentication bypass via an OAuth2 state parameter stored as an SSO session in the GitHub and LinkedIn backends
Lemonldap::NG::Portal versions from 2.0.0 before 2.16.9, from 2.17.0 before 2.21.5, from 2.22.0 before 2.23.3 for Perl allow authentication bypass via an OAuth2 state parameter stored as an SSO session in the GitHub and LinkedIn backends.
Before redirecting to the identity provider, extractFormInfo() creates the state session with the positional call getApacheSession( undef, 1, 0, 'GitHubState' ). getApacheSession() takes a session id followed by a named argument hash, so the trailing arguments become that hash, kind defaults to SSO, and the state is written to the global session storage as a regular SSO session. Its identifier is handed to the unauthenticated visitor as the state parameter of the redirection URL.
Any visitor who reaches the GitHub or LinkedIn endpoint can replay that identifier as a session cookie and obtain a valid SSO session without authenticating. The session holds neither _user nor authenticationLevel, which the shipped bootstrap configuration accepts because it grants virtual hosts a "default => accept" access rule; deployments whose rules test the user or require an authentication level are less exposed. Only configurations with the GitHub or LinkedIn authentication module enabled are affected.
- Record
CVE-2026-19349- CVSS 3.1
- 9.8 Critical
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H - Weakness
- CWE-305, CWE-628
- Updated
- 2026-11-02
OSVDEBIAN-CVE-2026-19349
9.8
Lemonldap::NG::Portal versions from 2.0.0 before 2.16.9, from 2.17.0 before 2.21.5, from 2.22.0 before 2.23.3 for Perl allow authentication bypass via an OAuth2 state parameter stored as an SSO session in the GitHub and LinkedIn backends. Before redirecting to the identity provider, extractFormInfo() creates the state session with the positional call getApacheSession( undef, 1, 0, 'GitHubState' ). getApacheSession() takes a session id followed by a named argument hash, so the trailing arguments become that hash, kind defaults to SSO, and the state is written to the global session storage as a regular SSO session. Its identifier is handed to the unauthenticated visitor as the state parameter of the redirection URL. Any visitor who reaches the GitHub or LinkedIn endpoint can replay that identifier as a session cookie and obtain a valid SSO session without authenticating. The session holds neither _user nor authenticationLevel, which the shipped bootstrap configuration accepts because it grants virtual hosts a "default => accept" access rule; deployments whose rules test the user or require an authentication level are less exposed. Only configurations with the GitHub or LinkedIn authentication module enabled are affected.
- Record
DEBIAN-CVE-2026-19349- CVSS 3.1
- 9.8 Critical
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H - Updated
- 2026-11-02
OSVUBUNTU-CVE-2026-19349
9.8
Lemonldap::NG::Portal versions from 2.0.0 before 2.16.9, from 2.17.0 before 2.21.5, from 2.22.0 before 2.23.3 for Perl allow authentication bypass via an OAuth2 state parameter stored as an SSO session in the GitHub and LinkedIn backends. Before redirecting to the identity provider, extractFormInfo() creates the state session with the positional call getApacheSession( undef, 1, 0, 'GitHubState' ). getApacheSession() takes a session id followed by a named argument hash, so the trailing arguments become that hash, kind defaults to SSO, and the state is written to the global session storage as a regular SSO session. Its identifier is handed to the unauthenticated visitor as the state parameter of the redirection URL. Any visitor who reaches the GitHub or LinkedIn endpoint can replay that identifier as a session cookie and obtain a valid SSO session without authenticating. The session holds neither _user nor authenticationLevel, which the shipped bootstrap configuration accepts because it grants virtual hosts a "default => accept" access rule; deployments whose rules test the user or require an authentication level are less exposed. Only configurations with the GitHub or LinkedIn authentication module enabled are affected.
- Record
UBUNTU-CVE-2026-19349- CVSS 3.1
- 9.8 Critical
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H - Updated
- 2026-11-02
Affected packages
| Package | Affected | Fixed |
|---|---|---|
lemonldap-ngDebian:12 |
before 2.16.1+ds-deb12u9, plus listed versions 2.16.1+ds-22.16.1+ds-deb12u12.16.1+ds-deb12u22.16.1+ds-deb12u32.16.1+ds-deb12u4 Show 4 moreShow less2.16.1+ds-deb12u52.16.1+ds-deb12u62.16.1+ds-deb12u72.16.1+ds-deb12u8 |
2.16.1+ds-deb12u9 |
lemonldap-ngDebian:13 |
before 2.21.2+ds-1+deb13u3, plus listed versions 2.21.2+ds-12.21.2+ds-1+deb13u12.21.2+ds-1+deb13u2 |
2.21.2+ds-1+deb13u3 |
lemonldap-ngDebian:14 |
before 2.23.3+ds-1, plus listed versions 2.21.2+ds-12.21.2+ds-22.21.3+ds-12.21.3+ds-1~bpo12+12.21.3+ds-1~bpo13+1 Show 18 moreShow less2.22.0+ds-12.22.0+ds-22.22.0+ds-2~bpo13+12.22.1+ds-12.22.1+ds-1~bpo13+12.22.2+ds-12.22.2+ds-1~bpo13+12.22.3+ds-12.22.3+ds-1~bpo13+12.23.0+ds-12.23.0+ds-22.23.0+ds-32.23.0+ds-3~bpo13+12.23.0+ds-42.23.1+ds-12.23.2+ds-12.23.2+ds-1~bpo13+12.23.2+ds-2 |
2.23.3+ds-1 |
lemonldap-ngUbuntu:16.04:LTS |
All versions, plus listed versions 1.3.3-11.4.6-11.4.6-21.4.6-3 |
None known |
lemonldap-ngUbuntu:18.04:LTS |
All versions, plus listed versions 1.9.10-11.9.13-21.9.14-11.9.15-11.9.16-2 |
None known |
lemonldap-ngUbuntu:20.04:LTS |
All versions, plus listed versions 2.0.5+ds-22.0.6+ds-22.0.7+ds-2 |
None known |
lemonldap-ngUbuntu:22.04:LTS |
All versions, plus listed versions 2.0.11+ds-42.0.13+ds-32.0.13+ds-3ubuntu1 |
None known |
lemonldap-ngUbuntu:24.04:LTS |
All versions, plus listed versions 2.16.2+ds-12.17.1+ds-12.17.2+ds-12.17.2+ds-22.18.1+ds-12.18.2+ds-1 |
None known |
lemonldap-ngUbuntu:26.10 |
All versions, plus listed versions 2.22.2+ds-12.22.3+ds-12.23.0+ds-32.23.0+ds-42.23.2+ds-12.23.2+ds-22.23.3+ds-1 |
None known |
lemonldap-ngUbuntu:26.04:LTS |
All versions, plus listed versions 2.21.0+ds-32.22.0+ds-22.22.1+ds-12.22.2+ds-1 |
None known |
History
| Recorded | Changed | Sources |
|---|---|---|
| first indexed | CVE List, EUVD, GitHub Advisories, NVD, OSV |
Dates are when Every CVE recorded each change. Upstream dates may differ.
In short
CVE-2026-19349 is a critical vulnerability (CVSS 9.8) in lemonldap-ng, published August 16, 2026. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.82%, the 57th percentile. Fixed in lemonldap-ng 2.16.1+ds-deb12u9.
References
gitlab.ow2.org/lemonldap-ng/lemonldap-ng/-/releases/v2.23.3
gitlab.ow2.org/lemonldap-ng/lemonldap-ng/-/releases/v2.21.5
gitlab.ow2.org/lemonldap-ng/lemonldap-ng/-/releases/v2.16.9
openwall.com/lists/oss-security/2026/08/16/2
nvd.nist.gov/vuln/detail/CVE-2026-19349
github.com/advisories/GHSA-4vx7-c7qw-2vx4
Show 9 moreShow less
cpan.org/modules
github.com/CVEProject/cvelistV5/tree/main/cves/2026/19xxx/CVE-2026-19349.json
gitlab.ow2.org/lemonldap-ng/lemonldap-ng
security-tracker.debian.org/tracker/CVE-2026-19349
ubuntu.com/security/CVE-2026-19349
cve.org/CVERecord?id=CVE-2026-19349
gitlab.ow2.org/lemonldap-ng/lemonldap-ng/-/commit/8c6015d6f0b4f1aa78bd54e159a74cd151e8e00d
gitlab.ow2.org/lemonldap-ng/lemonldap-ng/-/commit/eef2aa31ad26c685769c9602588bb85572da0c00
gitlab.ow2.org/lemonldap-ng/lemonldap-ng/-/commit/96fde2e1a45fd70b2d793210bd0ec931be7b0dec