CVEReports
CVEReports

Automated vulnerability intelligence platform. Comprehensive reports for high-severity CVEs generated by AI.

Product

  • Home
  • Sitemap
  • RSS Feed

Company

  • About
  • Contact
  • Privacy Policy
  • Terms of Service

© 2026 CVEReports. All rights reserved.

Made with love by Amit Schendel & Alon Barad



CVE-2026-57179

CVE-2026-57179: Session Fixation and Login CSRF in social-auth-core Partial Pipeline

Alon Barad
Alon Barad
Software Engineer

Sep 24, 2026·7 min read·1 visit

Executive Summary (TL;DR)

Unauthenticated remote session fixation and login CSRF via unvalidated partial pipeline tokens in social-auth-core < 5.0.0 enables account takeover.

CVE-2026-57179 is a critical Session Fixation and Login Cross-Site Request Forgery (CSRF) vulnerability in python-social-auth's core library (social-auth-core) prior to version 5.0.0. The vulnerability allows remote attackers to force arbitrary state transitions and bind third-party social credentials to a victim's session, leading to complete account takeover.

Vulnerability Overview

CVE-2026-57179 is a security vulnerability in the social-auth-core package, a widely adopted authentication library for Python applications. The security flaw exists within the component responsible for processing partial pipelines. This component temporarily pauses authentication flows to complete out-of-band verification steps, such as email or SMS validation.

The attack surface is exposed via endpoints that handle pipeline resumption, specifically endpoints parsing the partial_token request parameter. The core function of this module is to reconstruct the user session from a serialized database state using the provided token. Any public-facing application that implements partial steps under vulnerable versions of the library contains this exposed interface.

This security issue is classified under CWE-384: Session Fixation. By exploiting this flaw, an unauthorized external entity can force a victim's browser session to adopt a pre-configured authentication state. The ultimate impact of this state injection is unauthorized account linking or login CSRF.

Root Cause Analysis

The python-social-auth ecosystem utilizes a sequential processing flow known as the pipeline to handle registration and authentication. When an authentication step requires out-of-band input, the pipeline invokes the @partial decorator to pause execution. The current execution state, including variables, arguments, and the specific index of the pipeline, is serialized and saved in the application database or session backend. A unique token, designated as partial_token, is generated as a key to reference this saved state.

The vulnerability arises because the library treats the partial_token as an implicit bearer credential. When resuming the pipeline, the framework retrieves this token from the incoming HTTP request parameters (GET or POST) or the active session. Crucially, the legacy code failed to perform any authorization or origin validation on the token. It did not verify whether the HTTP session presenting the token was the session that initiated the pipeline execution.

Consequently, the application trusted any request containing a valid partial_token to load and resume the stored pipeline state. The underlying architecture assumed that possession of the token was sufficient proof of authorization. This design choice created a logical flaw where the authentication state of one user could be injected directly into the active session of another user.

Code-Level Analysis and Patch Verification

In the vulnerable implementation of social_core/utils.py, the function partial_pipeline_data extracts the token directly from request parameters without validating the context of the session. The key parts of the vulnerable function logic are as follows:

# Vulnerable Implementation
def partial_pipeline_data(backend, user=None, partial_token=None, *args, **kwargs):
    request_data = backend.strategy.request_data()
    partial_argument_name = backend.setting("PARTIAL_PIPELINE_TOKEN_NAME", "partial_token")
    # The token is read directly from HTTP query arguments without session-binding validation
    partial_token = (
        partial_token
        or request_data.get(partial_argument_name)
        or backend.strategy.session_get(PARTIAL_TOKEN_SESSION_NAME, None)
    )
    if partial_token:
        partial = backend.strategy.partial_load(partial_token)
        # Matches are performed only on static metadata (like user ID), not the active session
        ...
        return partial

The fix introduces a stateful validation structure using PartialPipelineResult and PartialPipelineSelection. The patch ensures that a token is only considered valid if it matches the token registered inside the user's active browser session. The critical validation helper _select_partial_pipeline_token enforces this policy:

# Patched Implementation (0418782454ac7bbc6a9230ea21f7f5066fe89686)
def _select_partial_pipeline_token(request_token, session_token, pending_token, confirmation_requested):
    # Strict validation: Request token must match the session-registered token
    if request_token and request_token == session_token:
        return PartialPipelineSelection(token=request_token, owns_token=True)
    if confirmation_requested and pending_token:
        selected_token = request_token or pending_token
        pending_resume = selected_token == pending_token
        return PartialPipelineSelection(token=selected_token, owns_token=pending_resume, pending_resume=pending_resume)
    if request_token:
        # Token provided does not match session, return owns_token=False
        return PartialPipelineSelection(token=request_token, owns_token=False)
    return PartialPipelineSelection(token=session_token, owns_token=bool(session_token))

The implementation of _select_partial_pipeline_token prevents silent session fixation. If the presenting session does not own the token, the backend blocks automatic resumption. If the pipeline step explicitly allows external resumption (e.g., clicking a validation link received via email), the framework redirects the browser to a confirmation interface rather than silently executing the state transition. This ensures that cross-session token usage requires explicit, visible user interaction.

Exploitation Methodology

Exploitation requires specific conditions. First, the target application must incorporate at least one partial pipeline step in its authentication flow, such as mail_validation. Second, the attacker must have network access to the target application to initiate an authentication flow and intercept or capture the resulting partial_token. Finally, the attacker must construct and deliver a malicious URL to a victim who possesses an active session or is capable of authenticating with the target application.

The attacker begins by initiating a login or registration process with a third-party identity provider (e.g., GitHub or Google) on the target application. The attacker proceeds until the application pauses the flow at a partial pipeline step, generating a unique partial_token. The attacker extracts this token from the generated URL or transaction logs without completing the verification step. The attacker then constructs a malicious redirection URL containing the parameter ?partial_token=ATTACKER_TOKEN_VALUE and delivers it to the victim.

When the victim accesses the crafted link, the victim's browser sends the request to the application's completion endpoint. The application loads the attacker's saved pipeline context and binds the attacker's third-party identity to the victim's local application account. Once the binding is established, the attacker can log into the victim's account at any time by executing a normal authentication flow using their own third-party credentials.

Impact Assessment and Risk Rating

The primary consequence of this vulnerability is complete account takeover via session donation or login CSRF. By silently linking an external credential owned by the attacker to the internal account of the victim, the attacker bypasses standard authentication controls. This binding persists even if the victim changes their local password, as the third-party OAuth/OIDC association remains authorized within the application's user database.

The official CVSS v3.1 score is evaluated at 4.2 (Medium), under the vector string CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:L/I:L/A:N. The score reflects the requirement for user interaction and the high complexity involved in orchestrating the state synchronization across multiple independent sessions. However, the operational impact in environments with custom registration steps is high, as it directly undermines identity federation integrity.

There is currently no active exploitation of this vulnerability reported in the wild. The exploit maturity is categorized as proof-of-concept. The CVE is not listed in the Cybersecurity and Infrastructure Security Agency (CISA) Known Exploited Vulnerabilities catalog.

Remediation and Defense-in-Depth

The primary and most effective remediation is upgrading the social-auth-core package to version 5.0.0 or higher. This version deprecates the insecure @partial decorator and replaces it with @partial_step(save_to_session=True, allow_external_resume=False). Upgrading enforces token ownership checks out of the box and prevents unvalidated cross-session state resumes.

If an immediate package upgrade is unfeasible, developers should remove vulnerable partial steps, such as mail_validation, from the application's authentication pipeline config. Alternatively, applications can manually validate state continuity by implementing custom middleware. This middleware should intercept pipeline completion routes and ensure that incoming request state matches token attributes stored strictly within the current session's encrypted cookies.

For applications that rely on external resume flows (e.g., verifying a user via a confirmation email), developers must configure those steps with allow_external_resume=True. Additionally, they must implement custom confirmation templates. These templates must require the user to explicitly click a confirmation button on the page, generating an anti-CSRF token payload, before resuming the authentication pipeline. This ensures that even if an attacker attempts to inject a token, the action cannot be automated without the user's explicit consent.

Technical Appendix

CVSS Score
4.2/ 10
CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:L/I:L/A:N

Affected Systems

python-social-auth ecosystemsocial-auth-core < 5.0.0social-app-django installations utilizing partial pipelines
AttributeDetail
CWE IDCWE-384
Attack VectorNetwork
Attack ComplexityHigh
Privileges RequiredNone
User InteractionRequired
Exploit Statuspoc
CISA KEV StatusNot Listed
CWE-384
Session Fixation

The web application accepts a session identifier from a user without validating it, or fails to regenerate the session identifier after a state transition.

Vulnerability Timeline

Official fix committed to social-core repository.
2026-06-23
Security Advisory GHSA-vqg6-3fw6-j9jg published.
2026-09-24
CVE-2026-57179 officially assigned and published.
2026-09-24

References & Sources

  • [1]https://nvd.nist.gov/vuln/detail/CVE-2026-57179
  • [2]https://www.cve.org/CVERecord?id=CVE-2026-57179
  • [3]https://github.com/python-social-auth/social-core/security/advisories/GHSA-vqg6-3fw6-j9jg
  • [4]https://github.com/python-social-auth/social-core
  • [5]https://github.com/python-social-auth/social-core/commit/0418782454ac7bbc6a9230ea21f7f5066fe89686
  • [6]https://github.com/python-social-auth/social-core/pull/1816
  • [7]https://github.com/python-social-auth/social-app-django/pull/1009
  • [8]https://github.com/python-social-auth/social-docs/pull/444
  • [9]https://github.com/python-social-auth/social-core/releases/tag/5.0.0

Attack Flow Diagram

Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.

More Reports

•about 2 hours ago•CVE-2026-57232
3.1

CVE-2026-57232: Server-Side Request Forgery in Contao CMS Feed Reader Module

A Server-Side Request Forgery (SSRF) vulnerability exists in the Contao Open Source Content Management System (CMS) within the Feed Reader front-end module. When processing RSS feed configurations, the module initiates outbound HTTP connections using a default HTTP client that lacks loopback and private network controls. Authenticated backend users with permissions to configure frontend modules can exploit this flaw to coerce the server into sending requests to internal endpoints, loopback addresses, and cloud instance metadata services.

Amit Schendel
Amit Schendel
6 views•7 min read
•about 3 hours ago•CVE-2026-63498
8.7

CVE-2026-63498: Stored Cross-Site Scripting via Inline XML Rendering in Snipe-IT API

CVE-2026-63498 is a high-severity Stored Cross-Site Scripting (XSS) vulnerability in Snipe-IT prior to version 8.7.0. The flaw resides in the REST API's file retrieval endpoint, which allows files to be rendered inline without sanitizing or restricting malicious content types like XML and XSLT stylesheets, leading to browser-side script execution in the context of the application's origin.

Amit Schendel
Amit Schendel
4 views•6 min read
•about 4 hours ago•CVE-2026-19730
4.2

CVE-2026-19730: Podman Quadlet Install Non-Truncating Write Retains Removed Host-Access/Security Directives

CVE-2026-19730 is a local security vulnerability in the Podman container engine's Quadlet systemd generator. When updating existing configurations using 'podman quadlet install --replace' on filesystems that do not support reflink operations (such as standard ext4), the file is opened without the O_TRUNC flag. If the new configuration file is shorter than the pre-existing file, the trailing lines of the old file remain intact and are successfully parsed by systemd, leading to a failure to remove security-critical parameters like AddCapability, User, or host storage mounts.

Alon Barad
Alon Barad
5 views•7 min read
•about 5 hours ago•CVE-2026-63493
8.6

CVE-2026-63493: Multi-Factor Authentication Bypass via Stateless API Token Flow in Snipe-IT

Snipe-IT prior to version 8.7.0 is vulnerable to an authentication bypass (CVE-2026-63493 / GHSA-hxcx-9h4f-42xx) within its Laravel Passport API integration. When multi-factor authentication (MFA/2FA) is enabled, an attacker possessing a victim's password can bypass MFA controls completely. This occurs because the Laravel middleware that enforces MFA was registered only in the stateful 'web' middleware group, leaving the stateless 'api' middleware group unguarded. Consequently, an attacker can use a valid password to initiate a session, bypass the MFA prompt on the web UI by communicating directly with the API, and generate a long-lived Personal Access Token (PAT) to perform unauthorized operations.

Alon Barad
Alon Barad
5 views•6 min read
•about 21 hours ago•CVE-2026-57576
6.5

CVE-2026-57576: Application-Level Denial of Service via Uncontrolled Resource Consumption in Plone

CVE-2026-57576 is an application-level Denial of Service (DoS) vulnerability in Plone. It resides in the `plone.app.dexterity` and `plone.app.contenttypes` packages, allowing authenticated users with content creation permissions to submit excessively long metadata attributes. Because these fields are stored without length limits and subsequently processed by indexing and rendering engines, they trigger complete server resource exhaustion and thread starvation.

Alon Barad
Alon Barad
8 views•9 min read
•about 22 hours ago•GHSA-8PCW-H6W9-H46G
6.5

GHSA-8PCW-H6W9-H46G: Denial of Service via Uncontrolled Resource Consumption in plone.app.contenttypes

An uncontrolled resource consumption vulnerability in plone.app.contenttypes allows authenticated users to trigger application-level denial of service via oversized filename metadata in file uploads.

Amit Schendel
Amit Schendel
7 views•6 min read