What is Microsoft Win32k?
Win32k.sys is the kernel-mode component of the Windows graphics and windowing subsystem. It processes GDI (Graphics Device Interface) operations — drawing shapes, text, and paths — on behalf of user-mode applications. Because win32k operates in ring 0 (kernel mode), vulnerabilities in it allow local users to escalate privileges from user mode to kernel mode (ring 0), bypassing all user-mode security boundaries. Win32k has been a persistent source of Windows privilege escalation vulnerabilities over many years.
Overview
CVE-2013-3660 is a privilege escalation vulnerability in win32k.sys's EPATHOBJ::pprFlattenRec function. When win32k processes complex graphics paths, it iterates a linked list of path records. A flaw in the linked list traversal leaves a "next" pointer uninitialized at the end of the list, which under specific conditions allows a local user to exploit the resulting pointer to write attacker-controlled values into arbitrary kernel memory. This enables any local user or process to execute code at ring-0 (kernel) privilege and gain SYSTEM access.
Tavis Ormandy publicly disclosed this vulnerability with proof-of-concept code in May 2013. Microsoft patched it in MS13-054 in August 2013 — approximately 87 days after public disclosure.
Affected Versions
| Operating System | Affected |
|---|---|
| Windows XP SP3 (32-bit) | Yes |
| Windows XP SP2 (64-bit) | Yes |
| Windows Vista SP2 | Yes |
| Windows 7 SP1 | Yes |
| Windows Server 2003 SP2 | Yes |
| Windows Server 2008 SP2 / R2 SP1 | Yes |
| Windows 8 / RT | Yes |
| Windows Server 2012 | Yes |
Technical Details
The Windows GDI path flattening routines in win32k.sys process complex Bezier curve paths by converting them into a series of line segments. This flattening operation uses EPATHOBJ objects arranged in a singly-linked list. The EPATHOBJ::pprFlattenRec function iterates through this list to flatten each record in turn.
The vulnerability: when pprFlattenRec processes the last record in the list, it fails to properly initialize the pprNext pointer for the newly-created flattened record — the pointer is left uninitialized (containing stale data from the stack or heap). Under a carefully constructed path with many records, the function eventually traverses back to the uninitialized pointer, treating it as a valid pointer to a kernel object.
Exploitation: By controlling the stale pointer value (through heap manipulation or predictable stack values), an attacker can cause the kernel to treat attacker-controlled data as an EPATHOBJ object. The result is an arbitrary kernel write primitive — the attacker can modify any kernel address they choose. A standard next step is overwriting a security token or the SYSTEM process's credential structure to acquire SYSTEM privileges.
Public disclosure: Tavis Ormandy (Google Project Zero/Security Team) publicly released a proof-of-concept exploit in May 2013. The 87-day gap between public disclosure and Microsoft's patch meant the vulnerability was exploitable by any attacker with access to the PoC for nearly three months.
Discovery
Discovered by Tavis Ormandy and publicly disclosed on May 22, 2013 along with a working proof-of-concept. The disclosure before patch availability made this a de facto public 0-day for its unpatched window.
Exploitation Context
CISA confirmed exploitation in the wild. A public working proof-of-concept accelerated uptake among attackers. Win32k privilege escalation vulnerabilities like CVE-2013-3660 serve as sandbox escape components — attackers who achieve code execution inside a sandboxed process (e.g., via a browser or PDF reader vulnerability) use the LPE to escape the sandbox and gain full system access.
Remediation
- Apply MS13-054 (August 2013 Patch Tuesday) — patches win32k.sys
- Ensure Windows Update is fully current; win32k vulnerabilities are frequently part of chained attacks
- Apply OS-level mitigations: EMET (on older Windows) or Windows Defender Exploit Guard — these add stack protection and ROP mitigations that raise the cost of exploit chain development
- Enforce least-privilege: users running as standard users (not local admin) cannot leverage an LPE to gain domain or enterprise-wide access without further exploitation steps
- Segment workstations to limit blast radius from compromise
Key Details
| Property | Value |
|---|---|
| CVE ID | CVE-2013-3660 |
| Vendor / Product | Microsoft — Win32k |
| NVD Published | 2013-05-24 |
| NVD Last Modified | 2025-10-22 |
| CVSS 3.1 Score | 7.8 |
| CVSS 3.1 Vector | CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H |
| Severity | HIGH |
| CWE | CWE-119 find similar ↗ |
| CISA KEV Added | 2022-03-28 |
| CISA KEV Deadline | 2022-04-18 |
| Known Ransomware Use | No |
CVSS 3.1 Breakdown
Required Action
Timeline
| Date | Event |
|---|---|
| 2013-05-22 | Tavis Ormandy publicly discloses CVE-2013-3660 with proof-of-concept before vendor patch |
| 2013-05-24 | CVE-2013-3660 published |
| 2013-08-13 | Microsoft releases MS13-054 (August 2013 Patch Tuesday) patching CVE-2013-3660 |
| 2022-03-28 | Added to CISA Known Exploited Vulnerabilities catalog |
| 2022-04-18 | CISA BOD 22-01 remediation deadline |
References
| Resource | Type |
|---|---|
| NVD — CVE-2013-3660 | Vulnerability Database |
| CISA KEV Catalog Entry | US Government |
| Microsoft Security Bulletin MS13-054 | Vendor Advisory |