Microsoft Exchange任意用户伪造漏洞(CVE-2018-8581)分析
字数 1941 2025-08-18 11:37:50

Microsoft Exchange 任意用户伪造漏洞(CVE-2018-8581) 技术分析与复现指南

一、漏洞概述

漏洞编号: CVE-2018-8581
漏洞类型: 特权提升漏洞
影响范围: Exchange Server 2010/2013/2016
漏洞描述: 该漏洞允许任何经过身份验证的用户冒充 Exchange Server 上的其他任意用户,原因是 Exchange Server 在使用 NTLM 身份验证时存在特定缺陷,服务器产生的 NTLM 响应可以反射回攻击者服务器。

二、技术背景

2.1 关键概念

SID (Security Identifiers):

  • 微软从 Server2000 引入的安全标识符概念
  • 在工作组环境下,计算机、组、用户都有自己的 SID 号
  • 存储在用户计算机本地注册表中
  • 根据对象类型不同随机生成,具有特定命名规则

EWS (Exchange Web Services):

  • 微软实现的客户端和服务器间交换信息的协议
  • 提供电子邮件、会议安排、日程管理、任务管理等功能
  • 支持丰富的协作应用开发

NTLM 认证:

  • 一种不直接提供密码的间接认证方法
  • 认证流程分为四个阶段:
    1. 协商(Negotiate)
    2. 挑战(Challenge)
    3. 认证(Authenticate)
    4. 域控制器验证

三、漏洞原理分析

3.1 漏洞核心机制

漏洞利用了两个关键问题:

  1. SSRF漏洞:允许攻击者通过EWS发送推送订阅请求并指定任意URL
  2. NTLM身份验证缺陷:Exchange Server使用CredentialCache.DefaultCredentials进行连接,以NT AUTHORITY\SYSTEM权限运行

3.2 关键注册表项

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\DisableLoopbackCheck=1

  • 该设置允许NTLM响应被反射回攻击者服务器
  • 是漏洞能够成功利用的关键配置

四、漏洞复现步骤

4.1 环境准备

测试环境:

  • Windows 2008 R2
  • Exchange Server 2010 SP2

4.2 复现流程

  1. 获取目标用户SID

    • 通过反向委托方式获取
    • 构造SOAP请求将攻击者邮箱委托给目标邮箱
    • 服务器返回目标邮箱用户的SID
  2. 请求推送订阅

    • 构造EWS推送订阅请求
    • 指定攻击者控制的URL(SSRF漏洞点)
    • Exchange Server会向指定URL发送请求
  3. 构造攻击数据包

    • 使用获取的SID构造SOAP头部
    • 模拟目标用户身份
    • 构造委托请求包,将目标邮箱收件箱委托给攻击者
  4. NTLM认证攻击

    • 搭建Python HTTPServer作为代理服务器
    • 捕获Exchange Server的NTLM响应
    • 使用响应值请求EWS完成认证

4.3 详细攻击流程

  1. Exchange订阅功能向代理服务器发送POST请求
  2. 代理服务器返回401状态和WWW-Authenticate:NTLM头
  3. Exchange发送Negotiate协商消息
  4. 代理服务器用Negotiate消息和攻击包请求EWS
  5. EWS返回Challenge挑战消息
  6. 代理服务器将Challenge响应回Exchange
  7. Exchange加密后返回Authenticate认证消息
  8. 代理服务器使用Authenticate和攻击包请求EWS完成攻击

五、漏洞修复方案

5.1 手工修复

删除关键注册表项:

reg delete HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa /v DisableLoopbackCheck /f

注意:删除后无需重启系统或Exchange服务

5.2 官方补丁

  • Microsoft在2018年11月发布了缓解补丁
  • 后续Exchange累计更新中不再默认启用该注册表项

六、技术细节补充

6.1 反向委托获取SID

  • 通过添加委托操作触发服务器返回目标用户SID
  • 如果已存在委托关系(ErrorDelegateAlreadyExists),需先remove再add
  • SOAP请求中:
    • <t:EmailAddress>: 攻击者邮箱(委托方)
    • <t:PrimarySmtpAddress>: 受害者邮箱(被委托方)

6.2 EWS处理流程

  • 请求发送到/EWS/Exchange.asmx
  • Url参数被保存到PushSubscription的clientUrl
  • 最终通过HTTP协议与指定URL进行通信

6.3 NTLM消息结构

所有NTLM消息(Negotiate/Challenge/Authenticate)都有相似结构:
NTLMSSPXXXXXXXXXX (经过Base64编码)

七、参考资源

  1. ZDI漏洞分析
  2. GitHub POC
  3. NTLM协议详解
  4. SID介绍
Microsoft Exchange 任意用户伪造漏洞(CVE-2018-8581) 技术分析与复现指南 一、漏洞概述 漏洞编号 : CVE-2018-8581 漏洞类型 : 特权提升漏洞 影响范围 : Exchange Server 2010/2013/2016 漏洞描述 : 该漏洞允许任何经过身份验证的用户冒充 Exchange Server 上的其他任意用户,原因是 Exchange Server 在使用 NTLM 身份验证时存在特定缺陷,服务器产生的 NTLM 响应可以反射回攻击者服务器。 二、技术背景 2.1 关键概念 SID (Security Identifiers) : 微软从 Server2000 引入的安全标识符概念 在工作组环境下,计算机、组、用户都有自己的 SID 号 存储在用户计算机本地注册表中 根据对象类型不同随机生成,具有特定命名规则 EWS (Exchange Web Services) : 微软实现的客户端和服务器间交换信息的协议 提供电子邮件、会议安排、日程管理、任务管理等功能 支持丰富的协作应用开发 NTLM 认证 : 一种不直接提供密码的间接认证方法 认证流程分为四个阶段: 协商(Negotiate) 挑战(Challenge) 认证(Authenticate) 域控制器验证 三、漏洞原理分析 3.1 漏洞核心机制 漏洞利用了两个关键问题: SSRF漏洞 :允许攻击者通过EWS发送推送订阅请求并指定任意URL NTLM身份验证缺陷 :Exchange Server使用CredentialCache.DefaultCredentials进行连接,以NT AUTHORITY\SYSTEM权限运行 3.2 关键注册表项 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\DisableLoopbackCheck=1 该设置允许NTLM响应被反射回攻击者服务器 是漏洞能够成功利用的关键配置 四、漏洞复现步骤 4.1 环境准备 测试环境 : Windows 2008 R2 Exchange Server 2010 SP2 4.2 复现流程 获取目标用户SID 通过反向委托方式获取 构造SOAP请求将攻击者邮箱委托给目标邮箱 服务器返回目标邮箱用户的SID 请求推送订阅 构造EWS推送订阅请求 指定攻击者控制的URL(SSRF漏洞点) Exchange Server会向指定URL发送请求 构造攻击数据包 使用获取的SID构造SOAP头部 模拟目标用户身份 构造委托请求包,将目标邮箱收件箱委托给攻击者 NTLM认证攻击 搭建Python HTTPServer作为代理服务器 捕获Exchange Server的NTLM响应 使用响应值请求EWS完成认证 4.3 详细攻击流程 Exchange订阅功能向代理服务器发送POST请求 代理服务器返回401状态和WWW-Authenticate:NTLM头 Exchange发送Negotiate协商消息 代理服务器用Negotiate消息和攻击包请求EWS EWS返回Challenge挑战消息 代理服务器将Challenge响应回Exchange Exchange加密后返回Authenticate认证消息 代理服务器使用Authenticate和攻击包请求EWS完成攻击 五、漏洞修复方案 5.1 手工修复 删除关键注册表项: 注意 :删除后无需重启系统或Exchange服务 5.2 官方补丁 Microsoft在2018年11月发布了缓解补丁 后续Exchange累计更新中不再默认启用该注册表项 六、技术细节补充 6.1 反向委托获取SID 通过添加委托操作触发服务器返回目标用户SID 如果已存在委托关系(ErrorDelegateAlreadyExists),需先remove再add SOAP请求中: <t:EmailAddress> : 攻击者邮箱(委托方) <t:PrimarySmtpAddress> : 受害者邮箱(被委托方) 6.2 EWS处理流程 请求发送到 /EWS/Exchange.asmx Url参数被保存到PushSubscription的clientUrl 最终通过HTTP协议与指定URL进行通信 6.3 NTLM消息结构 所有NTLM消息(Negotiate/Challenge/Authenticate)都有相似结构: NTLMSSPXXXXXXXXXX (经过Base64编码) 七、参考资源 ZDI漏洞分析 GitHub POC NTLM协议详解 SID介绍