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-57178

CVE-2026-57178: Authentication Bypass via Missing Signature Verification in social-auth-core

Amit Schendel
Amit Schendel
Senior Security Researcher

Sep 24, 2026·7 min read·21 visits

Executive Summary (TL;DR)

Applications using the vk-app authentication backend in social-auth-core < 5.0.0 fail to verify signatures if the auth_key parameter is completely omitted, allowing full account bypass via spoofed VKontakte user IDs.

An authentication bypass vulnerability exists in the VKontakte App backend of social-auth-core prior to version 5.0.0. The vulnerability allows remote attackers to bypass cryptographic signature verification and gain unauthorized access to arbitrary accounts by omitting the signature parameter.

Vulnerability Overview

The Python Social Auth framework, distributed on PyPI as social-auth-core, is a widely adopted library designed to facilitate third-party authentication integrations across multiple web frameworks. Among its supported OAuth and platform-specific backends, the library provides a backend named VKAppOAuth2 (implemented in the module social_core.backends.vk). This specific backend is engineered to handle authentication for applications running within the VKontakte (VK) platform iframe and mini-app environment. The core vulnerability is an improper authentication mechanism, classified under CWE-287 and CWE-347, which permits total authentication bypass when integrating applications utilize this specific backend configuration.

The vulnerability specifically resides in how incoming callback parameters are processed and validated. To integrate with the VK application model, the backend accepts user identity credentials via a URL callback mechanism. In secure setups, these callbacks are signed by the VK platform using a shared client secret to guarantee integrity. However, the VKAppOAuth2 backend implementation failed to enforce the mandatory presence of the signature parameter. Consequently, an unauthenticated remote attacker can manipulate the authentication flow by completely omitting the cryptographic signature, leading directly to unauthorized access to arbitrary accounts.

Root Cause Analysis

To understand the root cause of this vulnerability, it is necessary to examine the VKontakte platform's authentication architecture. When a user interacts with a VK mini-app, the platform constructs an authentication payload containing variables such as viewer_id, access_token, and api_id. To allow the receiving application to verify the legitimacy of these values, the platform signs the request by generating an MD5 hash of a combined string containing the application ID, the user's viewer ID, and the application's client secret. This computed signature is passed to the application backend within the auth_key query parameter.

The flaw in the library's VKAppOAuth2 module is located in the conditional logic of the auth_complete method, which is responsible for validating this callback. Instead of executing signature verification on every incoming request, the code checks whether the auth_key parameter is present in the request data. If the client submits a request where the auth_key parameter is entirely omitted, the call to self.data.get("auth_key") returns None. The conditional check if auth_key: then evaluates to false, causing the execution flow to skip the validation block entirely and proceed directly to user session initialization.

Because the signature validation is entirely bypassed when no signature is provided, the backend implicitly trusts the client-provided viewer_id value. This logical failure breaks the fundamental security guarantees of cryptographic signing. Instead of failing closed in the absence of a security parameter, the backend fails open, allowing any unverified identity assertion to successfully authenticate.

Code Analysis

The vulnerable logic is clearly demonstrated in the source code of social_core/backends/vk.py prior to the release of version 5.0.0. The code snippet below illustrates how the conditional check was structured:

# Vulnerable Implementation in social_core/backends/vk.py
def auth_complete(self, *args, **kwargs):
    # Retrieve the signature parameter from client data
    auth_key = self.data.get("auth_key")
 
    # The validation is wrapped in a conditional check that relies on the key's presence
    key, secret = self.get_key_and_secret()
    if auth_key:
        # Signature is only checked if the client voluntarily provided one
        check_key = vk_sig(f"{key}_{self.data.get('viewer_id')}_{secret}")
        if check_key != auth_key:
            raise ValueError("VK.com authentication failed: invalid auth key")
 
    # If auth_key is None, the block above is skipped, and user_id is trusted blindly
    user_check = self.setting("USERMODE")
    user_id = self.data.get("viewer_id")

The remediation commit (1bfacdd0379e5eb46e169a99ab648b835e9bb6a2) resolves this flaw by restructuring the control flow to mandate the presence of the auth_key parameter. Below is the patched implementation:

# Patched Implementation in social_core/backends/vk.py
def auth_complete(self, *args, **kwargs):
    # Retrieve the signature parameter from client data
    auth_key = self.data.get("auth_key")
 
    # Explicitly enforce the presence of the signature
    key, secret = self.get_key_and_secret()
    if not auth_key:
        # The application fails closed immediately if the signature is missing
        raise AuthFailed(self, "Missing auth key")
        
    # Proceed to calculate the expected signature and validate
    check_key = vk_sig(f"{key}_{self.data.get('viewer_id')}_{secret}")
    if check_key != auth_key:
        # Standard AuthFailed exception is raised instead of ValueError
        raise AuthFailed(self, "Invalid auth key")
 
    user_check = self.setting("USERMODE")
    user_id = self.data.get("viewer_id")

The patch introduces complete validation coverage by separating the presence check from the verification check. By raising an AuthFailed exception immediately if auth_key is not found, the library guarantees that no request can reach the session creation phase without passing signature verification. Additionally, the transition from raising a generic ValueError to a framework-specific AuthFailed exception ensures proper error handling within the Python Social Auth middleware stack.

Exploitation Methodology

Exploiting this vulnerability does not require complex cryptographic attacks or memory manipulation. Because the flaw is a logical bypass, an attacker only needs network access to the application's public callback endpoint and knowledge of the target user's identifier. The primary requirement for exploitation is that the target web application must have the VKAppOAuth2 backend enabled within its authentication configuration settings.

To perform an account takeover, the attacker begins by identifying the numerical VKontakte identifier (viewer_id) of the target victim. Because VK user IDs are public or easily obtainable through standard platform interaction, this identifier represents a low barrier to acquisition. The attacker then constructs a crafted HTTP GET or POST request targeting the callback URI, typically located at /complete/vk-app/. The payload is designed to simulate a successful callback from the VK interface but intentionally omits the auth_key parameter.

The request query string is populated with the targeted viewer_id along with dummy parameters for access_token and api_id to satisfy basic input requirements. When the application processes this request, the backend detects the absence of the auth_key parameter, skips verification, and establishes an authenticated session under the target's identity. The attacker is subsequently redirected into the application, fully authenticated as the target victim.

Impact Assessment & Severity Evaluation

The security impact of this vulnerability is severe, leading to full account takeover and unauthorized data access. Because authentication is bypassed entirely, an attacker can log in as any user whose VKontakte identifier is known. This allows unauthorized access to private personal data, application configurations, administrative interfaces, and any downstream services connected to the compromised user session.

The Common Vulnerability Scoring System (CVSS) v3.1 base score is established at 7.4, reflecting a high-severity rating. The vector is defined as CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N. The attack complexity is rated as high because the vulnerability is contingent on the specific application configuration utilizing the VKAppOAuth2 backend, which is less common than the standard VKOAuth2 backend. There is no availability impact associated with this flaw, as exploitation does not cause denial-of-service conditions or system instability.

While no public weaponized exploits are currently observed in the wild, the simplicity of the attack path makes it highly trivial to operationalize once a vulnerable target is identified. This raises the overall risk level for organizations running outdated deployments of Python Social Auth.

Remediation & Hardening Guidance

The primary mitigation path for this vulnerability is upgrading the social-auth-core package to version 5.0.0 or later. This release enforces signature verification on all requests handled by the VKAppOAuth2 backend. System administrators and developers should verify the installed package version using their dependency management tools and execute the upgrade sequence.

For deployments where an immediate package upgrade is not feasible, a highly effective workaround is to disable the vulnerable backend. Applications should inspect their configuration settings (such as SOCIAL_AUTH_AUTHENTICATION_BACKENDS in Django settings) and remove the social_core.backends.vk.VKAppOAuth2 entry. The standard VKontakte OAuth backend (social_core.backends.vk.VKOAuth2) relies on an entirely different callback validation sequence that requires server-to-server token exchange and is not affected by this logic flaw.

In addition to configuring the backend securely, developers should review custom callback implementations for similar patterns of conditional validation. A secure validation routine must always validate input presence prior to processing, failing closed by default if any expected cryptographic parameter is missing from the incoming data stream.

Fix Analysis (1)

Technical Appendix

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

Affected Systems

Python Social Auth libraries running social-auth-core < 5.0.0Django applications using social-auth-app-django with VKAppOAuth2 backend enabledFlask and Webpy integrations configured to use VKAppOAuth2

Affected Versions Detail

Product
Affected Versions
Fixed Version
social-auth-core
python-social-auth
< 5.0.05.0.0
AttributeDetail
CWE IDCWE-287 / CWE-347
Attack VectorNetwork
CVSS Severity7.4 (High)
ImpactUnauthenticated Account Takeover
Exploit StatusPoC / Conceptual
KEV StatusNot listed

MITRE ATT&CK Mapping

T1078Valid Accounts
Defense Evasion
T1190Exploit Public-Facing Application
Initial Access
CWE-287
Improper Authentication

The application performs authentication without verifying the presence of critical parameters or validation signatures.

References & Sources

  • [1]CVE Official Record
  • [2]NVD Page
  • [3]GitHub Security Advisory GHSA-3c93-f73f-qc9h
  • [4]Remediation Pull Request
  • [5]Vulnerability Fix Commit
  • [6]Version 5.0.0 Release Notes

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

•2 days 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