CVE-2026-115910

Python Social Auth: OpenID Connect nonce is not bound to the browser session, so a stolen authorization code logs the attacker in as the victim

Published Oct 26, 2026 CVSS 3.1 · 6.8 Medium EPSS < 1% KEV · Not listed
Description
Python Social Auth is a social authentication and registration mechanism. Prior to 6.2.0, OpenIdConnectAuth in social_core/backends/open_id_connect.py uses get_and_store_nonce to place the OpenID Connect nonce in a shared OpenIdConnectAssociation table, and get_nonce and validate_claims verify only that the nonce exists and has not expired rather than binding it to the browser session and OAuth state that initiated the login. An attacker who obtains a victim's unused authorization code can start a separate login to obtain valid state for the attacker's browser, submit the victim's code with that state, and pass nonce validation because the victim nonce is globally available. With DEFAULT_USE_PKCE disabled in the default OpenIdConnectAuth configuration, the attacker can be logged in as the victim. This issue is fixed in version 6.2.0.

Analysis

AI-generated

Technical impact

The vulnerability lies in the OpenIdConnectAuth backend of python‑social‑auth’s social‑core package prior to version 6.2.0. The OpenID Connect nonce is stored globally and examined only for existence and expiration, never for association with the browser session or OAuth state that initiated the login. An attacker who obtains a victim’s unused authorization code can start a separate login flow that generates a valid state for the attacker’s session, submit the victim’s code together with that state, and the nonce verification succeeds because the nonce is globally available. This allows the attacker to be logged in as the victim, resulting in unauthorized account access. The flaw reflects insecure implementation of authentication request validation (CWE‑303), improper verification of data authenticity (CWE‑345), and lack of session scope enforcement for OAuth (CWE‑384).

Affected Systems

Python‑social‑auth:social‑core, all versions preceding 6.2.0. Applications that have integrated this package for OpenID Connect authentication and have not upgraded to 6.2.0 or later are affected.

Risk and Exploitability

The CVSS score of 6.8 denotes medium severity. The EPSS score is below 1% and the vulnerability is not listed in CISA's KEV catalog, indicating no widespread exploitation reports. If an attacker can acquire an unused authorization code issued to a victim, they can replay that code in a separate session and satisfy nonce validation, resulting in successful impersonation. The likely attack vector is inferred as a credential replay attack using the stolen authorization code, though the CVE description does not specify the exact method for obtaining the code.

Remediation

No solution or workaround provided in the CVE record.

OpenCVE Recommended Actions

  • Upgrade python‑social‑auth to version 6.2.0 or later to bind the nonce to the session and OAuth state.
  • Enable DEFAULT_USE_PKCE in the OpenID Connect backend configuration to enforce PKCE and bind the authorization code to the browser session.
  • Review your OAuth configuration to ensure the state parameter and nonce are stored and validated in session‑specific storage rather than globally.

Generated by OpenCVE AI on October 27, 2026 at 14:29 UTC.

Tracking

Sign in to view the affected projects.

Advisories

Source ID Title
Github GHSA Github GHSA GHSA-h2r5-x5m7-3935 Python Social Auth: OpenID Connect nonce is not bound to the browser session, so a stolen authorization code logs the attacker in as the victim
History
Type Values Removed Values Added
Metrics ssvc

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

Type Values Removed Values Added
First Time appeared Python-social-auth
Python-social-auth social-core
Vendors & Products Python-social-auth
Python-social-auth social-core
Type Values Removed Values Added
Description Python Social Auth is a social authentication and registration mechanism. Prior to 6.2.0, OpenIdConnectAuth in social_core/backends/open_id_connect.py uses get_and_store_nonce to place the OpenID Connect nonce in a shared OpenIdConnectAssociation table, and get_nonce and validate_claims verify only that the nonce exists and has not expired rather than binding it to the browser session and OAuth state that initiated the login. An attacker who obtains a victim's unused authorization code can start a separate login to obtain valid state for the attacker's browser, submit the victim's code with that state, and pass nonce validation because the victim nonce is globally available. With DEFAULT_USE_PKCE disabled in the default OpenIdConnectAuth configuration, the attacker can be logged in as the victim. This issue is fixed in version 6.2.0.
Title Python Social Auth: OpenID Connect nonce is not bound to the browser session, so a stolen authorization code logs the attacker in as the victim
Weaknesses CWE-345
CWE-384
References
Metrics cvssV3_1

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

Weaknesses
  • CWE-303

    Incorrect Implementation of Authentication Algorithm

  • CWE-345

    Insufficient Verification of Data Authenticity

  • CWE-384

    Session Fixation

Sources

Status
PUBLISHED
Assigner
GitHub_M
Published
Updated
Oct 31, 2026, 1:34 AM
Reserved
Oct 23, 2026, 8:21 PM
Status
Awaiting Analysis
Published
Oct 26, 2026, 5:17 PM
Modified
Oct 31, 2026, 2:17 AM
Severity
Moderate
Public date
Oct 26, 2026, 4:44 PM