Skip to main content

Plack::Middleware::OAuth EUVDEUVD-2026-41687

| CVE-2026-12740 HIGH
Cross-Site Request Forgery (CSRF) (CWE-352)
8.1
CVSS 3.1 · Vendor
Share

Severity by source

Vendor (CNA) PRIMARY
8.1 HIGH
AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:N
vuln.today AI
8.1 HIGH

Network reachable and low complexity with no attacker auth (PR:N), but the callback must be delivered to a victim (UI:R); resulting account link grants high confidentiality/integrity impact and no availability effect.

3.1 AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:N
4.0 AV:N/AC:L/AT:N/PR:N/UI:A/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N

Primary rating from Vendor (CNA).

CVSS VectorVendor

Attack Vector
Network
Attack Complexity
Low
Privileges Required
None
User Interaction
Required
Scope
Unchanged
Confidentiality
High
Integrity
High
Availability
None

Lifecycle Timeline

7
Analysis Updated
Jul 06, 2026 - 15:43 vuln.today
v3 (cvss_changed)
Source Code Evidence Fetched
Jul 06, 2026 - 15:43 vuln.today
Analysis Updated
Jul 06, 2026 - 15:43 vuln.today
v2 (cvss_changed)
Re-analysis Queued
Jul 06, 2026 - 15:37 vuln.today
cvss_changed
Severity Changed
Jul 06, 2026 - 15:37 NVD
CRITICAL HIGH
CVSS changed
Jul 06, 2026 - 15:37 NVD
8.1 (CRITICAL) 8.1 (HIGH)
Analysis Generated
Jul 04, 2026 - 18:16 vuln.today

Description PRE-NVD

Disclosed via oss-security. NVD scoring and full description are pending.

AnalysisAI

Login cross-site request forgery in Plack::Middleware::OAuth through 0.10 (Perl/PSGI OAuth login middleware) lets an unauthenticated remote attacker bind their own provider identity to a victim's session because the OAuth 2.0 flow omits the anti-CSRF state parameter and never verifies that a callback belongs to the session that initiated the flow. With victim interaction (clicking an attacker-supplied callback URL), the attacker's provider account and access token become associated with the victim's session, and where the app persists this as an account link the attacker retains ongoing access to the victim's account. There is no public exploit identified at time of analysis; EPSS is low (0.13%) and it is not in CISA KEV, but an upstream fix exists in PR #13.

Technical ContextAI

The affected component is Plack::Middleware::OAuth, a Perl PSGI middleware (distributed on CPAN by author c9s) that implements OAuth 1.0/2.0 login handling for Plack-based web applications. The root cause is CWE-352 (Cross-Site Request Forgery): in the OAuth 2.0 handlers, RequestTokenV2 constructs the provider authorization redirect without generating a state value, and AccessTokenV2 exchanges the returned authorization code and calls register_session to install the resulting token without checking that the callback corresponds to an authorization request the current session started. RFC 6749 §10.12 specifies the state parameter precisely to bind the authorization request to the user-agent's authenticated state and prevent this login-CSRF class; the upstream patch (PR #13) adds a CSPRNG-generated state (via Crypt::SysRandom random_bytes) stored in the Plack::Session keyed by provider in RequestTokenV2, and a strict equality check with removal on the callback in AccessTokenV2, also raising the Plack::Middleware::Session dependency to 0.35.

RemediationAI

Upstream fix available (PR/commit); a released patched version is not independently confirmed from the provided data, so apply the fix from GitHub PR #13 (https://github.com/c9s/Plack-Middleware-OAuth/pull/13) or the official patch at https://security.metacpan.org/patches/P/Plack-Middleware-OAuth/0.10/CVE-2026-12740-r1.patch, which adds CSPRNG-backed state generation/validation and requires Plack::Middleware::Session >= 0.35 plus Crypt::SysRandom; watch CPAN (https://metacpan.org/dist/Plack-Middleware-OAuth) for a tagged release above 0.10 and track RT ticket https://rt.cpan.org/Ticket/Display.html?id=179874 and the oss-security advisory https://seclists.org/oss-sec/2026/q3/27. If you cannot patch immediately, compensating controls include implementing the RFC 6749 §10.12 state check in a wrapping layer or reverse proxy that injects and verifies a per-session state parameter on the authorization and callback URLs (trade-off: custom code that must exactly match provider redirect handling), disabling OAuth 2.0 login and falling back to another authentication method (trade-off: loss of social login for users), and, for apps that auto-link identities, disabling automatic account linking so a callback cannot silently attach a provider identity to an existing session (trade-off: extra manual linking step for legitimate users).

Share

EUVD-2026-41687 vulnerability details – vuln.today

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy