CVE-2022-23270 — Windows Point-to-Point Tunneling Protocol Remote Code Execution Vulnerability
Executive Summary
None
Overview
CVSS Vector
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H/E:U/RL:O/RC:C
EPSS Score
Affected Products
| Product | KB Article | Severity | Impact | Restart Required |
|---|---|---|---|---|
| Windows 10 for 32-bit Systems | 5013963 (Security Update) |
Critical | Remote Code Execution | Yes |
| Windows 10 for x64-based Systems | 5013963 (Security Update) |
Critical | Remote Code Execution | Yes |
| Windows 10 Version 1607 for 32-bit Systems | 5013952 (Security Update) |
Critical | Remote Code Execution | Yes |
| Windows 10 Version 1607 for x64-based Systems | 5013952 (Security Update) |
Critical | Remote Code Execution | Yes |
| Windows 10 Version 1809 for 32-bit Systems | 5013941 (Security Update) |
Critical | Remote Code Execution | Yes |
| Windows 10 Version 1809 for ARM64-based Systems | 5013941 (Security Update) |
Critical | Remote Code Execution | Yes |
| Windows 10 Version 1809 for x64-based Systems | 5013941 (Security Update) |
Critical | Remote Code Execution | Yes |
| Windows 10 Version 1909 for 32-bit Systems | 5013945 (Security Update) |
Critical | Remote Code Execution | Yes |
| Windows 10 Version 1909 for ARM64-based Systems | 5013945 (Security Update) |
Critical | Remote Code Execution | Yes |
| Windows 10 Version 1909 for x64-based Systems | 5013945 (Security Update) |
Critical | Remote Code Execution | Yes |
| Windows 10 Version 20H2 for 32-bit Systems | 5013942 (Security Update) |
Critical | Remote Code Execution | Yes |
| Windows 10 Version 20H2 for ARM64-based Systems | 5013942 (Security Update) |
Critical | Remote Code Execution | Yes |
| Windows 10 Version 21H1 for 32-bit Systems | 5013942 (Security Update) |
Critical | Remote Code Execution | Yes |
| Windows 10 Version 21H1 for ARM64-based Systems | 5013942 (Security Update) |
Critical | Remote Code Execution | Yes |
| Windows 10 Version 21H1 for x64-based Systems | 5013942 (Security Update) |
Critical | Remote Code Execution | Yes |
| Windows 10 Version 21H2 for 32-bit Systems | 5013942 (Security Update) |
Critical | Remote Code Execution | Yes |
| Windows 10 Version 21H2 for ARM64-based Systems | 5013942 (Security Update) |
Critical | Remote Code Execution | Yes |
| Windows 10 Version 21H2 for x64-based Systems | 5013942 (Security Update) |
Critical | Remote Code Execution | Yes |
| Windows 11 version 21H2 for ARM64-based Systems | 5013943 (Security Update) |
Critical | Remote Code Execution | Yes |
| Windows 11 version 21H2 for x64-based Systems | 5013943 (Security Update) |
Critical | Remote Code Execution | Yes |
| Windows 7 for 32-bit Systems Service Pack 1 5014012 (Monthly Rollup) 5013999 (Security Only) Critical Remote Code Execution 5012626 Base: 8.1 Temporal: 7.1 Vector: CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H/E:U/RL:O/RC:C 6.1.7601.25954 Yes 5014012 5013999 Windows 7 for x64-based Systems Service Pack 1 5014012 (Monthly Rollup) 5013999 (Security Only) Critical Remote Code Execution 5012626 Base: 8.1 Temporal: 7.1 Vector: CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H/E:U/RL:O/RC:C 6.1.7601.25954 Yes 5014012 5013999 Windows 8.1 for 32-bit systems 5014011 (Monthly Rollup) 5014001 (Security Only) Critical Remote Code Execution 5012670 Base: 8.1 Temporal: 7.1 Vector: CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H/E:U/RL:O/RC:C 6.3.9600.20371 6.3.9600.20365 Yes 5014011 5014001 Windows 8.1 for x64-based systems 5014011 (Monthly Rollup) 5014001 (Security Only) Critical Remote Code Execution 5012670 Base: 8.1 Temporal: 7.1 Vector: CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H/E:U/RL:O/RC:C 6.3.9600.20371 6.3.9600.20365 Yes 5014011 5014001 Windows RT 8.1 | 5014025 (ServicingStackUpdate) |
Critical | Remote Code Execution | Yes |
| Windows Server 2008 for 32-bit Systems Service Pack 2 5014010 (Monthly Rollup) 5014006 (Security Only) Critical Remote Code Execution 5012658 Base: 8.1 Temporal: 7.1 Vector: CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H/E:U/RL:O/RC:C 6.0.6003.21481 Yes 5014010 5014006 Windows Server 2008 for 32-bit Systems Service Pack 2 (Server Core installation) 5014010 (Monthly Rollup) 5014006 (Security Only) Critical Remote Code Execution 5012658 Base: 8.1 Temporal: 7.1 Vector: CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H/E:U/RL:O/RC:C 6.0.6003.21481 Yes 5014010 5014006 Windows Server 2008 for x64-based Systems Service Pack 2 5014010 (Monthly Rollup) 5014006 (Security Only) Critical Remote Code Execution 5012658 Base: 8.1 Temporal: 7.1 Vector: CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H/E:U/RL:O/RC:C 6.0.6003.21481 Yes 5014010 5014006 Windows Server 2008 for x64-based Systems Service Pack 2 (Server Core installation) 5014010 (Monthly Rollup) 5014006 (Security Only) Critical Remote Code Execution 5012658 Base: 8.1 Temporal: 7.1 Vector: CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H/E:U/RL:O/RC:C 6.0.6003.21481 Yes 5014010 5014006 Windows Server 2008 R2 for x64-based Systems Service Pack 1 5014012 (Monthly Rollup) 5013999 (Security Only) Critical Remote Code Execution 5012626 Base: 8.1 Temporal: 7.1 Vector: CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H/E:U/RL:O/RC:C 6.1.7601.25954 Yes 5014012 5013999 Windows Server 2008 R2 for x64-based Systems Service Pack 1 (Server Core installation) 5014012 (Monthly Rollup) 5013999 (Security Only) Critical Remote Code Execution 5012626 Base: 8.1 Temporal: 7.1 Vector: CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H/E:U/RL:O/RC:C 6.1.7601.25954 Yes 5014012 5013999 Windows Server 2012 5014017 (Monthly Rollup) 5014018 (Security Only) Critical Remote Code Execution 5012650 Base: 8.1 Temporal: 7.1 Vector: CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H/E:U/RL:O/RC:C 6.2.9200.23714 Yes 5014017 5014018 Windows Server 2012 (Server Core installation) 5014017 (Monthly Rollup) 5014018 (Security Only) Critical Remote Code Execution 5012650 Base: 8.1 Temporal: 7.1 Vector: CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H/E:U/RL:O/RC:C 6.2.9200.23714 Yes 5014017 5014018 Windows Server 2012 R2 5014011 (Monthly Rollup) 5014001 (Security Only) Critical Remote Code Execution 5012670 Base: 8.1 Temporal: 7.1 Vector: CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H/E:U/RL:O/RC:C 6.3.9600.20371 6.3.9600.20365 Yes 5014011 5014001 Windows Server 2012 R2 (Server Core installation) 5014011 (Monthly Rollup) 5014001 (Security Only) Critical Remote Code Execution 5012670 Base: 8.1 Temporal: 7.1 Vector: CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H/E:U/RL:O/RC:C 6.3.9600.20371 6.3.9600.20365 Yes 5014011 5014001 Windows Server 2016 | 5013952 (Security Update) |
Critical | Remote Code Execution | Yes |
| Windows Server 2016 (Server Core installation) | 5013952 (Security Update) |
Critical | Remote Code Execution | Yes |
| Windows Server 2019 | 5013941 (Security Update) |
Critical | Remote Code Execution | Yes |
| Windows Server 2019 (Server Core installation) | 5013941 (Security Update) |
Critical | Remote Code Execution | Yes |
| Windows Server 2022 | 5013944 (Security Update) |
Critical | Remote Code Execution | Yes |
| Windows Server 2022 (Server Core installation) | 5013944 (Security Update) |
Critical | Remote Code Execution | Yes |
| Windows Server, version 20H2 (Server Core Installation) | 5013942 (Security Update) |
Critical | Remote Code Execution | Yes |
Patches
| Article | Type | Restart |
|---|---|---|
5013963 |
Security Update | Yes |
5013952 |
Security Update | Yes |
5013941 |
Security Update | Yes |
5013945 |
Security Update | Yes |
5013942 |
Security Update | Yes |
5013943 |
Security Update | Yes |
5014025 |
ServicingStackUpdate | Yes |
5013944 |
Security Update | Yes |
Patch Diff
Remote pre-auth kernel use-after-free -> double-free (CWE-416/CWE-362) in the Windows PPTP VPN driver raspptp.sys (TCP 1723 control connection, RRAS). PPTP Calls (each a CtlCall context) can be looked up two ways by Call ID: a global Call-ID-indexed array (CallGetCall, returns ANY call from ANY control connection) or the per-control-connection linked list (EnumListEntry/EnumComplete). Several control-connection handlers wrongly use CallGetCall - reaching other connections' calls - and PPTP handling runs concurrently, so two paths race the same CtlCall: (1) closing a control connection walks its call linked list and frees each call via CtlpCleanup; (2) an OutgoingCallReply with an error frees the call it relates to, looked up via CallGetCall. Consecutively these free the same CtlCall twice -> UAF/double-free in kernel pool. IN-HOUSE ghidriff of raspptp.sys 10.0.19041.1586 -> .1706 (May 10 2022) confirms the fix: the May build reworks call/control object lifetime with rundown protection (ExInitialize/Acquire/Release/WaitForRundownProtectionRelease/ExRundownCompleted) and new ReferenceRefCount/DereferenceRefCount across CallGetCall/CallReceiveDatagramCallback/CtlpCleanup/CtlpEngine so a call is freed only once no user remains. Not feature-gated (2022). Same overhaul fixes the sibling CVE-2022-21972. Credit: Yuki Chen, Lewis Lee, liubenjin (QI-ANXIN), Alex Nichols.
| Function | Address | Change | Note |
|---|---|---|---|
CallGetCall |
code change |
code (reference/rundown on call lookup) | Pre: returns the CtlCall for a Call ID from the global array with no lifetime guard, letting control-connection handlers reach and free other connections' calls. Post: reworked to take a reference / rundown protection so a looked-up call cannot be freed out from under a concurrent user. |
CtlpCleanup / CallReceiveDatagramCallback / CtlpEngine |
code change |
code (serialized free via refcount/rundown) | Call teardown and datagram/receive paths updated to release a call only after ExWaitForRundownProtectionRelease / DereferenceRefCount reports no user remains - eliminating the double-free between control-connection close and errored OutgoingCallReply. |
ReferenceRefCount / DereferenceRefCount + Ex*RundownProtection* |
new/added |
added (object-lifetime primitives) | New reference counting and rundown-protection barriers introduced in May 2022 across the PPTP call/control objects. |
Attack Path
Two threads free the same PPTP call context - one closing the connection, one via a global Call-ID lookup - double-freeing kernel pool
Derived from the patch delta: the checks added by the vendor identify which fields crossed a trust boundary unvalidated. Reachability and privilege are taken from the call chain in the RCA report.
Exploits & PoC
1 public PoCUnverified third-party code
Public proof-of-concept repositories aggregated from PoC-in-GitHub. They are not reviewed and may be incomplete, non-functional, or malicious — inspect the code before running anything.
| Repository | Stars | Published | Description |
|---|---|---|---|
| corelight/CVE-2022-23270-PPTP | 1 | 2022-05-10 | A Zeek package to detect CVE-2022-23270, a PPTP vulnerability in Windows. |
Detection Rules
Acknowledgments
Yuki Chen
Lewis Lee
liubenjin with Codesafe Team of Legendsec at QI-ANXIN Group
Alex Nichols