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.
Known Exploits
Acknowledgments
Yuki Chen
Lewis Lee
liubenjin with Codesafe Team of Legendsec at QI-ANXIN Group
Alex Nichols