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

CVE-2026-50528: Security Feature Bypass via State Desynchronization in .NET SslStream

Amit Schendel
Amit Schendel
Senior Security Researcher

Jul 20, 2026·6 min read·154 visits

Executive Summary (TL;DR)

A critical state desynchronization vulnerability in .NET's SslStream allows remote attackers to bypass mutual TLS (mTLS) policies. An attacker authenticates with a valid client certificate, requests renegotiation with an invalid or empty certificate, and relies on the server failing to clear its cached validation credentials to transmit unauthorized payloads over the unauthenticated connection.

A security feature bypass vulnerability exists in the .NET runtime's SslStream component. The flaw is caused by a state synchronization mismatch during Transport Layer Security (TLS) renegotiation or Post-Handshake Authentication (PHA). When renegotiation with a client fails due to an invalid or missing client certificate, the managed SslStream wrapper fails to invalidate its previously cached authentication properties. Consequently, downstream application logic continues to authorize requests under the context of the original valid identity, leading to incorrect authorization and authentication bypass.

Vulnerability Overview

CVE-2026-50528 describes a security feature bypass vulnerability located within the .NET runtime's implementation of SslStream (System.Net.Security namespace). This component serves as the core managed abstraction layer for establishing secure, transport-layer encrypted channels. The vulnerability manifests during dynamic transport state changes, specifically TLS renegotiation and Post-Handshake Authentication (PHA) routines, exposing systems utilizing mutual TLS (mTLS) to authentication bypass risks.

The vulnerability is classified under CWE-863 (Incorrect Authorization). In mutual TLS configurations, the server application queries the SslStream object to verify client certificates before granting access to protected endpoints. Because the underlying managed state machine fails to cleanly separate individual authentication epochs across renegotiations, the application exposes a critical security boundary bypass where transport state transitions fail to propagate down to authorization filters.

Root Cause Analysis

The root cause of CVE-2026-50528 lies in a synchronization lag between native platform security APIs and the managed .NET wrapper layers. The .NET SslStream relies on a Platform Abstraction Layer (PAL) to interface with native libraries: Schannel on Windows platforms, and OpenSSL on Linux and macOS environments. When a connection is initialized, the native layer negotiates the cryptographic parameters, and the managed SslState object caches variables such as RemoteCertificate and IsMutuallyAuthenticated.

Under normal circumstances, these variables are evaluated once. However, under TLS 1.2 renegotiation or TLS 1.3 Post-Handshake Authentication, a peer is allowed to update its credentials dynamically mid-session. When a renegotiation is triggered, the native library performs a secondary handshake. If the client fails to complete this handshake with a valid certificate, the native library flags the transport session as unauthenticated or failed.

Despite the failure at the native protocol level, the managed SslState machine fails to invalidate its internal cache. The RemoteCertificate property remains populated with the certificate provided during the initial handshake, and IsMutuallyAuthenticated remains set to true. The system fails open (CWE-636) because downstream application code evaluates the stale, cached metadata instead of querying the current, invalidated native state.

Code Analysis

The bug resides in how SslState.cs handles transitions when the cryptographic context is renegotiated. Prior to the patch, the CompleteHandshake method inside the internal SslState class presumed that any reached state block represented a successful handshake transition, overwriting values only when new ones were successfully negotiated, rather than explicitly clearing out stale states on handshake failure.

// Vulnerable Code Path
internal void CompleteHandshake()
{
    // Missing validation of state transition during renegotiation
    _localCertificate = _context.LocalCertificate;
    // Stale remote certificate and auth statuses are kept
    _remoteCertificate = _context.RemoteCertificate;
    _isMutuallyAuthenticated = _context.IsMutuallyAuthenticated;
}

The official fix, introduced across commits 9db47f0b4f02e0804f4b16958f1c70068b95e7c3 and 013aa09028a670051e21cb7bd6d96cb1d761ac5d, resolves the issue by tracking the validation state explicitly. If the handshake context indicates an unresolved or failed state, the validation fields are explicitly cleared, and an exception is raised before the application can read incoming payloads.

// Patched Code Path
internal void CompleteHandshake()
{
    if (!_context.IsValidHandshakeState)
    {
        // Explicitly clear cached properties to prevent identity inheritance
        _remoteCertificate = null;
        _isMutuallyAuthenticated = false;
        throw new AuthenticationException("Handshake state is invalid.");
    }
    _localCertificate = _context.LocalCertificate;
    _remoteCertificate = _context.RemoteCertificate;
    _isMutuallyAuthenticated = _context.IsMutuallyAuthenticated;
}

Additionally, the patch enforces the re-evaluation of custom RemoteCertificateValidationCallback results on session resumption, ensuring that validation logic is not bypassed when resuming previously established security sessions.

Exploitation & Attack Methodology

To execute this attack, a remote adversary must target an application utilizing .NET's SslStream configured with mutual authentication (mTLS) where the ClientCertificateRequired option is active. The attack operates entirely over the network and does not require pre-existing system privileges.

First, the attacker establishes a valid connection using a legitimate client certificate. This allows the connection to pass initial filters, prompting the .NET application to load and cache the authenticated identity context. Second, the attacker issues a TLS renegotiation message (e.g., via a ClientHello or HelloRequest frame) on the existing connection.

During renegotiation, the attacker purposely provides a spoofed, invalid, or empty certificate. While the native socket records a validation failure, the managed .NET layer continues to keep the connection socket open. Finally, the attacker sends the malicious endpoint payload. When the target server application inspects SslStream.RemoteCertificate to authorize the incoming payload, the stale, valid certificate from the initial handshake is returned, allowing the request to proceed.

Impact Assessment

The impact of CVE-2026-50528 is rated high, with a CVSS v3.1 base score of 8.2. The primary consequence is incorrect authorization, which leads directly to an authentication bypass. Because the vulnerability allows an unauthenticated attacker to assume the security context of a previously validated identity, it can lead to complete compromise of API endpoints, gRPC services, and microservice frameworks running on affected .NET runtimes.

The CVSS vector is breakdown as follows: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:H/A:N. The integrity impact is high because unauthorized actions can be executed within the security context of a valid user. Confidentiality impact is low, allowing partial read access. There is no direct availability impact, as the exploit does not trigger system crashes or resource exhaustion.

Remediation & Detection Guidance

The primary remediation for this vulnerability is upgrading the .NET runtime to patched versions. Microsoft has released security updates addressing the bug across all maintained release channels. Operators must update runtime environments to .NET 8.0.29, .NET 9.0.18, or .NET 10.0.6 as appropriate.

For systems where runtime patches cannot be deployed immediately, administrators should implement defensive configuration changes. The most effective workaround is disabling client-initiated renegotiation at the protocol level. For example, enforcing TLS 1.3 exclusively mitigates legacy TLS 1.2 renegotiation attack paths, as TLS 1.3 replaces renegotiation with a distinct Post-Handshake Authentication mechanism that is managed more securely.

// Secure configuration mitigating renegotiation vectors
var sslOptions = new SslServerAuthenticationOptions
{
    EnabledSslProtocols = SslProtocols.Tls13,
    ClientCertificateRequired = true,
    RemoteCertificateValidationCallback = (sender, certificate, chain, sslPolicyErrors) => 
    {
        // Implement custom validation logic
        return sslPolicyErrors == SslPolicyErrors.None;
    }
};

Security operation centers can detect potential exploit attempts by monitoring network traffic for anomalous TLS handshake patterns. High rates of client-initiated renegotiation messages over a single TCP connection should be flagged as potential indicators of compromise.

Official Patches

MicrosoftMicrosoft MSRC Security Update Guide Advisory for CVE-2026-50528

Fix Analysis (2)

Technical Appendix

CVSS Score
8.2/ 10
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:H/A:N
EPSS Probability
0.44%
Top 65% most exploited

Affected Systems

.NET 8.0.NET 9.0.NET 10.0Visual Studio 2022

Affected Versions Detail

Product
Affected Versions
Fixed Version
.NET 8.0
Microsoft
8.0.0 to < 8.0.298.0.29
.NET 9.0
Microsoft
9.0.0 to < 9.0.189.0.18
.NET 10.0
Microsoft
10.0.0 to < 10.0.610.0.6
Visual Studio 2022 version 17.12
Microsoft
17.12.0 to < 17.12.2217.12.22
Visual Studio 2022 version 17.14
Microsoft
17.14.0 to < 17.14.3617.14.36
AttributeDetail
CWE IDCWE-863 (Primary), CWE-302, CWE-636
Attack VectorNetwork
CVSS v3.1 Score8.2
EPSS Score0.00436
EPSS Percentile35.41%
ImpactSecurity Feature Bypass
Exploit Statusnone
KEV StatusNot Listed

MITRE ATT&CK Mapping

T1068Exploitation for Privilege Escalation
Privilege Escalation
CWE-863
Incorrect Authorization

The software performs authorization checks but fails to correctly restrict actions, allowing a peer that fails authentication to inherit the authorized context of a different state.

Vulnerability Timeline

Official Advisory and CVE Published
2026-07-14
NVD Publication Date
2026-07-14
Database Synchronization and Research Baseline
2026-07-20

References & Sources

  • [1]Microsoft Security Response Center (MSRC) Advisory
  • [2]CVE.org Record
  • [3]NVD Entry
  • [4]Wiz Vulnerability Analysis
  • [5]Shodan CVEDB Entry
  • [6]GitHub Commit 9db47f0b
  • [7]GitHub Commit 013aa090

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

•3 days ago•CVE-2026-107844
5.3

CVE-2026-107844: Path Traversal Vulnerability in Contao ImagesController

A path traversal vulnerability (CWE-22) in Contao CMS allows unauthenticated remote attackers to bypass directory boundary restrictions in ImagesController and access files within the project directory.

Amit Schendel
Amit Schendel
12 views•5 min read
•3 days ago•CVE-2026-107848
3.5

CVE-2026-107848: Cross-Site Request Forgery (CSRF) in Contao Backend Actions via GET Requests

Contao Open Source CMS versions 4.0.0 through 5.3.49 and 5.4.0-RC1 through 5.7.11 contain a Cross-Site Request Forgery (CSRF) vulnerability in backend parameter handling. The `RequestTokenListener` component validates anti-CSRF tokens solely for HTTP POST requests, while GET-based declarative guards run only when an `act` parameter is present in the query string. Consequently, custom backend actions dispatched via alternative parameters such as `key=` can execute without CSRF token verification when triggered by an authenticated user.

Amit Schendel
Amit Schendel
9 views•5 min read
•3 days ago•CVE-2026-107843
5.3

CVE-2026-107843: Unthrottled Activation Email Resend and Account Enumeration in Contao CMS

Contao CMS versions 4.1.0 through 5.3.49 and 5.4.0-RC1 through 5.7.11 fail to validate form submission tokens and enforce rate limiting when processing activation email resend requests via HTTP POST, enabling resource exhaustion and account state enumeration.

Amit Schendel
Amit Schendel
9 views•4 min read
•3 days ago•CVE-2026-107842
5.3

CVE-2026-107842: Information Disclosure via Stale Indexing in Contao Search Module

An information disclosure vulnerability in Contao CMS allows unauthenticated site visitors to view protected page titles, URLs, and text excerpts through search queries when protected page indexing is disabled after previously being enabled.

Amit Schendel
Amit Schendel
10 views•4 min read
•3 days ago•GHSA-G38J-7V97-X298
6.5

GHSA-G38J-7V97-X298: Missing Authorization Check in Vikunja CalDAV Task Relation Creation

In Vikunja prior to version 2.6.0, relation creation via the CalDAV endpoint fails to invoke the TaskRelation.CanCreate authorization check. This missing access control allows an authenticated user to establish unauthorized relationships and perform write operations against any task, provided its unique identifier (UID) is known.

Alon Barad
Alon Barad
12 views•5 min read
•3 days ago•GHSA-3HC7-R24J-RPWC
6.8

GHSA-3hc7-r24j-rpwc: Cross-Project Task Disclosure via Subtask Expansion in Vikunja

A cross-project information disclosure vulnerability in Vikunja allows authenticated users with read access to one project to view private task details from unauthorized projects via subtask expansion parameters.

Alon Barad
Alon Barad
9 views•5 min read