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·24 visits

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

•1 day ago•CVE-2026-16454
4.3

CVE-2026-16454: Object-Level Authorization Bypass in Eclipse hawkBit Direct Device Integration Controller

CVE-2026-16454 is an object-level authorization bypass vulnerability (CWE-284, CWE-862) in Eclipse hawkBit versions 1.0.3 and prior. The flaw exists within the Direct Device Integration (DDI) REST controller (hawkbit-ddi-resource), where endpoints responsible for enumerating software module metadata and serving firmware binaries fail to verify whether the requested software module is assigned to the authenticated device. Consequently, any device with valid credentials (such as a TargetToken or GatewayToken) can enumerate software module identifiers and download arbitrary firmware artifacts across the entire tenant namespace.

Amit Schendel
Amit Schendel
10 views•9 min read
•2 days ago•CVE-2026-62284
8.6

CVE-2026-62284: Remote Code Execution and SSRF via Unsanitized Kubeconfig in OSAC Operator

CVE-2026-62284 (GHSA-5w5g-j6hw-6p8f) is a code injection and server-side request forgery vulnerability in the console-proxy component of the OSAC Operator. The RemoteConfigResolver parses Kubernetes Secrets containing kubeconfig files via clientcmd.RESTConfigFromKubeConfig without sanitizing execution-related fields. An attacker with RBAC permissions to create or modify labeled Secrets in monitored namespaces can supply a malicious exec credential plugin, resulting in arbitrary command execution within the console-proxy pod.

Amit Schendel
Amit Schendel
8 views•8 min read
•2 days ago•CVE-2026-62361
5.5

CVE-2026-62361: Authenticated SQL Injection and Table Access Control Bypass in Listmonk Subscriber Export

CVE-2026-62361 (GHSA-xgjr-7j9q-2h4r) is an authenticated SQL injection and authorization bypass vulnerability in listmonk, an open-source, self-hosted newsletter and mailing list manager written in Go. In versions prior to 6.2.0, the subscriber export endpoint (GET /api/subscribers/export) directly interpolates user-supplied SQL filter expressions into a PostgreSQL query without invoking the table allowlist validation function (validateQueryTables). Consequently, authenticated users possessing the subscribers:sql_query and subscribers:get_all permissions can bypass relational access controls, execute arbitrary subqueries against restricted tables such as users and settings, and modify database state via writable Common Table Expressions (CTEs).

Alon Barad
Alon Barad
9 views•11 min read
•2 days ago•CVE-2026-28385
5.0

CVE-2026-28385: Server-Side Request Forgery in Canonical LXD Image Import

CVE-2026-28385 (GHSA-3gq2-x4qg-p4g6) is a Server-Side Request Forgery (SSRF) vulnerability in Canonical LXD versions 4.12 through 6.9. An authenticated user possessing the can_create_images entitlement can force the LXD daemon to execute arbitrary outbound HTTP and HTTPS requests via the /1.0/images API endpoint. Due to the absence of egress destination validation, an attacker can probe host loopback services, RFC 1918 private network segments, and cloud Instance Metadata Services (IMDS) from the network position of the privileged LXD daemon.

Amit Schendel
Amit Schendel
10 views•9 min read
•2 days ago•GHSA-9J25-MM2H-2F76
9.9

CVE-2026-48750: Arbitrary File Write on Host via exec-output Symlink in Canonical LXD and Incus

Canonical LXD and LXC Incus contain an arbitrary file write vulnerability (CWE-73 / CWE-59) in the `/1.0/instances/<name>/exec` REST API endpoint. When an instance is unpacked from an image archive, top-level symbolic links are extracted directly onto the host filesystem within the instance storage directory. If a crafted image includes a symbolic link named `exec-output` pointing to an arbitrary host path, invoking the execution endpoint with `record-output: true` causes the privileged host daemon to follow the symlink and write command output files directly to the target host directory. An authenticated attacker with permissions to import images and execute commands can exploit this flaw to write controlled content to sensitive host directories such as `/etc/cron.d`, resulting in arbitrary code execution on the host as `root`.

Alon Barad
Alon Barad
8 views•12 min read
•2 days ago•GHSA-VGHH-5RFX-XHQ8
9.9

CVE-2026-48749: Arbitrary Host File Read and Write via Malicious Image Symlink in Canonical LXD and Incus

CVE-2026-48749 (tracked as GHSA-vghh-5rfx-xhq8 for LXD and GHSA-2q3f-q5pq-g8wv for Incus) is a critical container escape vulnerability in the Canonical LXD and Linux Containers Incus system container managers. By importing a specially crafted container image archive containing duplicate tar member headers, an authenticated attacker can replace the instance rootfs directory with a symbolic link pointing to the underlying host root filesystem. When performing file operations on a stopped container, the privileged forkfile helper binary resolves the symbolic link without confinement and chroots directly into the host filesystem, granting arbitrary root-level file read and write access.

Amit Schendel
Amit Schendel
8 views•9 min read