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

CVE-2026-87697: Untrusted Deserialization in .NET PresentationCore Clipboard Handling

Alon Barad
Alon Barad
Software Engineer

Oct 14, 2026·5 min read·4 visits

Executive Summary (TL;DR)

Implicit type auto-conversion in WPF PresentationCore clipboard routines allowed untrusted data streams to be automatically deserialized, enabling arbitrary code execution upon accessing clipboard data.

A remote code execution vulnerability exists in Microsoft .NET due to untrusted data deserialization within the PresentationCore component. The flaw stems from implicit auto-conversion flags during clipboard data retrieval operations.

Vulnerability Overview

A remote code execution vulnerability designated as CVE-2026-87697 affects Microsoft .NET runtimes and Windows Presentation Foundation (WPF) applications. The vulnerability carries a CVSS v3.1 base score of 8.8 (CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H) and is categorized under CWE-502 (Deserialization of Untrusted Data).

The impacted subsystem resides within System.Windows.Clipboard in the PresentationCore library. When a WPF application reads data from the system clipboard or processes typed data objects, implicit auto-conversion mechanisms force the framework to parse and coerce data formats. If an external or malicious process places a specially crafted serialized object stream onto the system clipboard, querying the clipboard triggers automatic deserialization within the target process context.

Because the deserialization occurs without explicit type checks or restrictions on format coercions, attackers capable of placing payloads onto the system clipboard or invoking automated data handling can achieve remote code execution in the context of the user running the application.

Root Cause Analysis

The root cause of CVE-2026-87697 lies in the default handling of the autoConvert parameter within data retrieval helper routines in PresentationCore/System/Windows/clipboard.cs. Specifically, the methods GetTypedDataIfAvailable and TryGetData explicitly invoked type retrieval methods using autoConvert: true when querying underlying ITypedDataObject or IDataObject implementations.

When autoConvert is set to true, the framework attempts to dynamically convert raw clipboard object streams into target application types. During this process, the .NET object deserialization pipeline processes raw binary streams or formatted object structures present on the system clipboard. Because deserialization occurs prior to type validation, standard object formatting channels invoke object constructor sequences and property setters on untrusted types.

Additionally, secondary root causes involve Windows Presentation Foundation (WPF) XPS document controls, where synthetic hyperlinks exposed through UI Automation (UIA) provider interfaces allowed automated tools or programmatic UI consumers to trigger navigation without applying strict origin or format sanitization checks.

Code Analysis

The fix was applied in the dotnet/wpf repository under commit 0987b406ba6087cbe14fdff1c9b67dd0c83f9076. Analysis of the patch reveals that developers modified GetTypedDataIfAvailable to evaluate whether the requested format safely allows auto-conversion before passing the flag to the data object interface. Furthermore, TryGetData<T> was updated to explicitly pass autoConvert: false.

// File: src/Microsoft.DotNet.Wpf/src/PresentationCore/System/Windows/clipboard.cs
@@ -83,14 +83,16 @@ public static bool ContainsText(TextDataFormat format) => !DataFormats.IsValidTe
     private static T? GetTypedDataIfAvailable<[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)] T>(string format)
     {
         IDataObject? data = GetDataObject();
+        // Check if format permits auto-conversion explicitly
+        bool autoConvert = IsDataFormatAutoConvert(format);
 
         if (data is ITypedDataObject typed)
         {
-            return typed.TryGetData(format, autoConvert: true, out T? value) ? value : default;
+            return typed.TryGetData(format, autoConvert, out T? value) ? value : default;
         }
 
         if (data is IDataObject dataObject)
         {
-            return dataObject.GetData(format, autoConvert: true) is T value ? value : default;
+            return dataObject.GetData(format, autoConvert) is T value ? value : default;
         }
 
         return default;
@@ -485,7 +487,7 @@ public static bool TryGetData<T>(
             return false;
         }
 
-        // Enforce autoConvert: false for direct typed data extraction
-        return dataObject.TryGetData(format, autoConvert: false, out data);
     }

The implementation flow transitions from unverified data object expansion to strict conversion boundary enforcement:

Unit tests added alongside the patch confirm that retrieving data in convertible formats without explicit format matching returns null rather than executing payload coercion routines.

Exploitation Methodology

Exploitation requires user interaction or automated clipboard polling within a vulnerable WPF host application. An attacker constructs a payload containing gadget chains compatible with standard .NET binary or object deserializers and writes this object to the system clipboard buffer.

When a user performs a paste action, or when the application programmatically calls Clipboard.GetText(), Clipboard.GetData(), or Clipboard.TryGetData(), PresentationCore reads the data object. Under the unpatched framework, the autoConvert: true flag instructs ITypedDataObject.TryGetData to deserialize the stream into the expected target type.

During deserialization, standard gadget chain mechanisms invoke arbitrary commands or arbitrary memory manipulation steps under the executing context of the logged-in user. Prerequisites include local or network delivery of payload data into the shared system clipboard or interaction with a WPF interface consuming clipboard contents.

Impact Assessment

Successful exploitation leads to full Unauthenticated Remote Code Execution (RCE) in the context of the user running the affected WPF application. If the application operates with administrative privileges, the attacker gains full system control, enabling persistence, data exfiltration, and lateral movement.

Confidentiality, Integrity, and Availability impacts are all rated High (CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H). The vulnerability affects enterprise applications built on WPF running on Microsoft .NET 8.0, 9.0, 10.0, 11.0, and developer workstation instances hosted within Visual Studio 2022 and 2026.

No active public exploitation chains or CISA KEV entries are currently logged for this vulnerability, classifying its current exploit status as unproven (E:U).

Remediation & Patch Completeness

To remediate CVE-2026-87697, software developers and system administrators must upgrade their .NET runtimes and SDKs to patched release versions. Microsoft has made updates available across all supported release channels.

In custom WPF application implementations that interact with IDataObject or ITypedDataObject directly, developers must review call sites and ensure autoConvert: false is explicitly specified when accepting object payloads from untrusted sources or clipboard handlers.

The patch effectively disables unintended object deserialization during generic type retrieval operations, providing complete remediation for the identified clipboard coercion vectors without breaking valid single-type extraction workflows.

Official Patches

Microsoft MSRCMicrosoft Security Response Center Vulnerability Advisory for CVE-2026-87697

Fix Analysis (2)

Technical Appendix

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

Affected Systems

Microsoft .NET 8.0Microsoft .NET 9.0Microsoft .NET 10.0Microsoft .NET 11.0Microsoft Visual Studio 2022 (v17.14)Microsoft Visual Studio 2026 (v18.10)

Affected Versions Detail

Product
Affected Versions
Fixed Version
.NET 8.0
Microsoft
>= 8.0.0, < 8.0.328.0.32
.NET 9.0
Microsoft
>= 9.0.0, < 9.0.219.0.21
.NET 10.0
Microsoft
>= 10.0.0, < 10.0.1310.0.13
.NET 11.0
Microsoft
>= 11.0.0, < 11.0.0-rc.211.0.0-rc.2
Visual Studio 2022
Microsoft
>= 17.14.0, < 17.14.4217.14.42
Visual Studio 2026
Microsoft
>= 18.10.0, < 18.10.418.10.4
AttributeDetail
CWE IDCWE-502
Attack VectorNetwork (AV:N)
Attack ComplexityLow (AC:L)
Privileges RequiredNone (PR:N)
User InteractionRequired (UI:R)
CVSS v3.1 Score8.8 (HIGH)
Exploit StatusNone / Unproven
CISA KEV StatusNot Listed

MITRE ATT&CK Mapping

T1059Command and Scripting Interpreter
Execution
T1190Exploit Public-Facing Application
Initial Access
CWE-502
Deserialization of Untrusted Data

The application deserializes untrusted data without sufficiently verifying that the resulting data will be valid.

Vulnerability Timeline

CVE Published and Official Vendor Advisory Released by Microsoft
2026-10-13

References & Sources

  • [1]Microsoft Vulnerability Advisory
  • [2]CVE Record
  • [3]dotnet/wpf Fix Commit

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-70007
8.8

CVE-2026-70007: Out-of-Bounds Write Vulnerability in .NET Framework and WPF Subsystem

An out-of-bounds write vulnerability in Microsoft .NET Framework, .NET runtime, and Visual Studio allows unauthenticated remote attackers to execute arbitrary code via crafted pixel-shader bytecode or auto-converted clipboard payloads.

Amit Schendel
Amit Schendel
5 views•6 min read
•about 3 hours ago•CVE-2026-70186
7.5

CVE-2026-70186: ASP.NET Core Denial of Service Vulnerability via Framework Deadlock

ASP.NET Core contains a thread deadlock vulnerability (CWE-833) that allows an unauthenticated remote attacker to cause a denial of service over the network by exhausting server thread pool resources.

Amit Schendel
Amit Schendel
6 views•5 min read
•about 4 hours ago•CVE-2026-70035
8.8

CVE-2026-70035: Insecure Deserialization Remote Code Execution in Microsoft .NET Framework and .NET Runtime

CVE-2026-70035 is a high-severity Remote Code Execution (RCE) vulnerability in Microsoft .NET Framework, .NET runtime, and Visual Studio caused by improper handling during the deserialization of untrusted data (CWE-502). An unauthenticated attacker can execute arbitrary code within the context of the affected process by delivering a crafted serialized payload.

Amit Schendel
Amit Schendel
9 views•6 min read
•about 5 hours ago•CVE-2026-70183
7.5

CVE-2026-70183: Elevation of Privilege in ASP.NET Core and Visual Studio via Concurrent Race Condition

An elevation of privilege vulnerability exists in ASP.NET Core and Microsoft Visual Studio due to improper synchronization during concurrent thread execution. Authenticated remote attackers with low privileges can exploit a timing window to manipulate shared resources and assume higher-level execution contexts.

Alon Barad
Alon Barad
7 views•5 min read
•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
15 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
10 views•5 min read