SRC 挖洞:Certighost AD CS 域控制器伪造深度复盘,CVE-2026-54121 一个普通域用户怎么拿走整个企业域

作者 akihi(白帽攻防录讲师),某甲方网络安全工程师,合合 SRC 年度第一、腾讯 SRC 连续三年前十,单漏洞赏金 4w+,擅长 Web/App/PC 客户端漏洞挖掘。专注企业域安全、AD CS 证书滥用、Kerberos 认证攻击。本文基于公开 CVE 信息与技术原理深度复盘,供安全研究与防护参考。

一、漏洞时间线

2026 年 7 月,微软补丁星期二修复了一个 Active Directory Certificate Services(AD CS)的严重漏洞 CVE-2026-54121,代号 Certighost。这个漏洞让一个普通的域用户------不需要管理员权限------就能让企业 CA 颁发一张"域控制器身份"的证书。拿到这张证书,攻击者就能伪造域控制器身份,执行 DCSync 窃取整个域的所有密码哈希,包括域管和 krbtgt 账户------等于完全控制整个企业域。

时间 事件 影响版本
2026-07-14 微软 7 月补丁星期二修复 AD CS Enterprise CA
2026-07-24 安全社区公开技术分析 ------
2026-07-27 研究者发布公开 PoC ------
2026-08-04 Nextron 发布检测规则 ------
2026-09-28 安全社区汇总 AD CS 漏洞 ------

这个漏洞最可怕的地方在于:它是一个"信任边界失效"------CA 在颁发证书时,本来应该验证"你说你是 DC,那你真的是 DC 吗?"。但 Certighost 漏洞里,CA 会跟着证书请求里的 cdc 属性去连接攻击者指定的服务器,而不验证这个服务器是不是真的域控制器。结果就是:攻击者自己搭一个假服务器,骗 CA 说"我就是那个 DC",CA 就真的颁发了 DC 身份的证书。

二、攻击链全景

让我们先用一张流程图还原完整的攻击路径:

复制代码
攻击者在企业内网有一个普通域用户账号
        │
        ▼
第一步:准备伪造环境
        │  攻击者需要:
        │  - 一个普通域用户账号
        │  - 一台能控制的机器
        │  - 能搭伪造的 Netlogon/LDAP 服务
        │  - 知道目标 DC 的名字和 SID
        │
        │  关键配置:
        │  CA 开了 EDITF_ENABLECHASECLIENTDC
        │  这个标志位让 CA 跟随
        │  证书请求里的 cdc 属性
        ▼
第二步:提交恶意证书请求
        │  攻击者用普通域用户
        │  向 Enterprise CA 提交证书请求
        │
        │  证书请求里包含:
        │  - cdc 属性:指向攻击者的伪造服务器
        │  - rmd 属性:指向目标 DC 的机器对象
        │
        │  意思是:
        │  "CA 大人,你要验证我的身份
        │   就去问这个服务器(我的服务器)"
        ▼
第三步:CA chase 机制触发
        │  CA 收到请求后:
        │  因为配置了 chase 机制
        │  它会跟着 cdc 属性
        │  去连接攻击者指定的服务器
        │
        │  CA 在连接时:
        │  用 SMB/LDAP 协议
        │  向伪造服务器验证身份
        │
        │  但伪造服务器是攻击者控制的!
        │  它返回:
        │  - 目标 DC 的 objectSid
        │  - 目标 DC 的 dNSHostName
        │
        │  CA 信了!
        ▼
第四步:CA 颁发 DC 身份证书
        │  CA 认为验证通过了
        │  就颁发了一张证书
        │  证书里包含:
        │  - 目标 DC 的 SID
        │  - 目标 DC 的 DNS 名称
        │
        │  这张证书是 CA 签名的!
        │  在整个域里都受信任!
        ▼
第五步:PKINIT 获得 DC 身份 TGT
        │  攻击者用这张证书
        │  通过 PKINIT 协议
        │  向 KDC 申请 Kerberos TGT
        │
        │  KDC 看到证书是 CA 签的
        │  里面的身份是 DC
        │  就真的发了一个 DC 的 TGT!
        │
        │  攻击者现在
        │  就是域控制器了
        ▼
第六步:DCSync 窃取所有密码
        │  有了 DC 身份
        │  攻击者就有权限
        │  执行目录复制同步(DCSync)
        │
        │  能偷到:
        │  - 域管的密码哈希
        │  - 所有域用户的密码哈希
        │  - krbtgt 账户的密码哈希
        │
        │  有了 krbtgt
        │  就能伪造 Golden Ticket
        │  永久控制整个域
        ▼
攻击者完全控制整个企业域
        │
        ├─ 冒充任何用户身份
        ├─ 访问所有域内资源
        ├─ 创建后门管理员账户
        └─ 持久化控制整个森林

**关键结论:**这个漏洞的本质是"身份验证逻辑错误"------CA 的 chase 机制本来是为了解决"怎么验证请求者身份"的问题,但它信任了请求者自己指定的服务器,而不验证这个服务器是不是真的域控制器。就像你去办身份证,窗口说"你证明一下你是谁",你说"你去问那个人(你朋友)",然后你朋友说"他就是某某某",窗口就信了------这就是信任模型的问题。

三、AD CS 与证书认证原理

3.1 什么是 AD CS

Active Directory Certificate Services 是微软的公钥基础设施:

组件 功能
AD CS Active Directory 证书服务,企业 CA
Enterprise CA 企业级证书颁发机构
证书申请 用户/设备向 CA 申请证书
chase 机制 CA 验证请求者身份的回退机制
PKINIT 用证书进行 Kerberos 认证

3.2 什么是 chase 机制

chase 是 CA 验证身份的回退机制:

复制代码
// chase 机制是什么?

// 正常流程:
// - 用户申请证书
// - CA 验证用户身份
// - 颁发证书

// 但有些时候:
// - CA 没法直接确定请求者是谁
// - 比如机器账户申请证书
// - 或者是跨域的场景

// chase 机制:
// - 证书请求里可以带 cdc 属性
//   (要联系的 AD 服务器)
// - 还可以带 rmd 属性
//   (要解析的机器对象)
//
// CA 就会:
// 1. 连接 cdc 指定的服务器
// 2. 查询 rmd 指定的对象
// 3. 拿到对象的身份信息
// 4. 基于这个信息颁发证书

// 问题在哪里?
// - cdc 属性是请求者指定的!
// - CA 不验证这个服务器是不是真的 DC
// - 就直接连接了
// - 然后信任返回的信息
//
// 这就是 Certighost 的根因

3.3 什么是 PKINIT 和 DCSync

这两个是攻击链的关键环节:

复制代码
// PKINIT 是什么?

// Kerberos 认证 normally:
// - 用户输密码
// - KDC 验证密码哈希
// - 发 TGT

// PKINIT 是:
// - 用户用证书认证
// - KDC 验证证书签名
// - 如果证书是受信任的 CA 签的
// - 就发对应身份的 TGT
//
// 所以:
// - 有了 DC 身份的证书
// - PKINIT 就能拿到 DC 的 TGT

// DCSync 是什么?

// 正常情况下:
// - 域控制器之间
// - 会同步目录数据
// - 比如密码修改了
// - 要同步到其他 DC

// DCSync 攻击:
// - 如果你有 DC 的权限
// - 你就能发起目录复制
// - 从其他 DC 拉取所有用户的密码哈希
//
// 这就是为什么
// 有了 DC 身份
// 就能偷整个域的密码

四、漏洞深度分析

4.1 漏洞根因:cdc 属性未验证

根据安全研究者的分析,漏洞的根本原因是 CA 不验证 chase 目标:

复制代码
// 有缺陷的逻辑(伪代码)

// 证书申请处理流程:

// 1. 收到证书请求
// 2. 检查请求里有没有 cdc 属性
// 3. 如果有 cdc 属性:
//    - 连接 cdc 指定的服务器
//    - 查询 rmd 指定的对象
//    - 拿到对象的 SID 和 DNS 名
// 4. 颁发包含这个身份的证书

// 问题在哪里?
//
// 步骤 3 应该验证:
// - cdc 指定的服务器
//   是不是真的域控制器?
//
// 但实际代码:
// - 直接连接了
// - 不验证服务器身份
// - 信任返回的所有信息
//
// 修复方式:
// 微软加了
// CRequestInstance::_ValidateChaseTargetIsDC
// 这个函数
// 专门验证 chase 目标是不是真的 DC

4.2 触发条件:EDITF_ENABLECHASECLIENTDC

不是所有 CA 都受影响,需要特定配置:

复制代码
// 漏洞触发条件

// 这个漏洞需要:
// - CA 配置了
//   EDITF_ENABLECHASECLIENTDC 标志位
// - 这个标志在 EditFlags 里
// - 是 bit 0x00100000
//
// 这个标志是干什么的?
// - 启用"客户端指定 DC"的 chase
// - 也就是:
//   证书请求里可以带 cdc 属性
//   CA 就去连接那个服务器
//
// 为什么很多企业开了?
// - 因为这是可选配置
// - 有些企业为了跨域场景
// - 或者为了兼容性
// - 就开了
//
// 但开了就有风险
// - 普通域用户就能利用

4.3 完整攻击链

从普通域用户到完全控制域:

复制代码
// 完整攻击步骤

// 前置条件:
// - 攻击者有普通域用户账号
// - 企业用了 AD CS Enterprise CA
// - CA 开了 EDITF_ENABLECHASECLIENTDC

// 第一步:环境探测
// - 攻击者用普通账号登录
// - 枚举域内的 CA
// - 检查 CA 配置
// - 确认有这个标志位

// 第二步:搭伪造服务器
// - 攻击者在自己的机器上
// - 搭伪造的 Netlogon/LDAP 服务
// - 准备好返回目标 DC 的信息

// 第三步:提交证书请求
// - 用 Certify 之类的工具
// - 提交带 cdc/rmd 属性的请求
// - cdc 指向自己的伪造服务器

// 第四步:拿到 DC 证书
// - CA 跟着 cdc 来连接
// - 伪造服务器返回真实 DC 的身份
// - CA 就颁发了证书

// 第五步:PKINIT 认证
// - 用 Rubeus 之类的工具
// - 通过 PKINIT 拿到 DC 的 TGT

// 第六步:DCSync
// - 用 mimikatz/impacket
// - 执行 DCSync
// - 偷所有密码哈希
// - 包括 krbtgt

// 第七步:持久化
// - 用 krbtgt 哈希
// - 伪造 Golden Ticket
// - 永久控制整个域

4.4 影响范围

项目 详情
CVE 编号 CVE-2026-54121
漏洞类型 权限提升 / 认证绕过
影响产品 Windows AD CS Enterprise CA
影响配置 开启 EDITF_ENABLECHASECLIENTDC 的 CA
发现者 H0j3n 和 Aniq Fakhrul
利用条件 普通域用户账号
用户交互 不需要
CVSS 评分 8.8(高)
公开 PoC 有公开可用的 PoC
影响 域控制器冒充,完全控制域

五、修复方案分析

微软在 2026 年 7 月补丁星期二中修复了这个问题:

修复项 修复方式
chase 目标验证 增加 _ValidateChaseTargetIsDC 验证
身份信任边界 不再信任请求者指定的服务器
证书颁发控制 严格验证证书请求者身份

5.1 AD CS 安全设计原则

复制代码
// AD CS 安全原则

// 1. 最小权限
//    不要给普通用户太多证书模板权限
//    按需授予

// 2. 严格验证
//    颁发证书前
//    一定要验证请求者身份
//    不能信任请求者自己说的

// 3. 配置审计
//    定期审计 CA 配置
//    检查有没有危险的标志位

// 4. 及时更新
//    AD CS 漏洞影响极大
//    要及时打补丁

// 5. 监控异常
//    监控异常的证书请求
//    监控 PKINIT 认证异常

5.2 域安全最佳实践

复制代码
// 域安全检查清单

// 1. 及时打补丁
//    微软每月补丁星期二
//    一定要及时更新

// 2. 审计 AD CS 配置
//    用 Certify/Certipy 之类的工具
//    检查 CA 配置有没有问题

// 3. 最小权限原则
//    普通用户不要给太多权限
//    域管账号要严格管控

// 4. 监控异常行为
//    监控 DCSync 行为
//    监控异常的 Kerberos 认证
//    监控异常的证书请求

// 5. 分段防御
//    域管账号不要在普通机器登录
//    用 PAM 堡垒机管理

// 6. 定期渗透测试
//    定期测试域安全
//    发现并修复配置问题

六、SRC 审计启示录

6.1 域安全审计清单

在 SRC 挖洞过程中,针对企业域的审计清单:

# 检查项 检测方法
1 AD CS 配置是否安全 用 Certify 枚举 CA 和模板
2 有没有危险的证书模板 检查 EKURG、ENROLLEE_SUPPLIES_SUBJECT
3 CA 有没有危险标志位 检查 EDITF_ENABLECHASECLIENTDC 等
4 有没有过度权限 检查普通用户的权限
5 监控有没有异常 检查安全日志有没有告警

6.2 常见 AD CS 漏洞类型

复制代码
// 常见的 AD CS 漏洞

// 1. 证书模板滥用
//    证书模板配置不安全
//    普通用户能申请高权限证书

// 2. ESC1-ESC8 系列
//    各种证书模板错误配置
//    导致的权限提升

// 3. CA 配置错误
//    比如 Certighost 这种
//    CA 本身的配置问题

// 4. 证书认证绕过
//    用证书冒充其他用户
//    不需要密码

// 5. PKINIT 相关
//    证书认证流程的问题

6.3 暴露面分级

暴露级别 情况 风险
严重 普通用户能冒充 DC 整个域被攻破
高 普通用户能申请管理员证书 域管权限被偷
中 特定用户能申请高权限证书 有限提权
低 信息泄露 辅助攻击

七、防护建议

  1. 及时打补丁:安装 2026 年 7 月或之后的 Windows 更新
  2. 审计 CA 配置:检查 EDITF_ENABLECHASECLIENTDC 标志位是否必要
  3. 最小权限:普通用户不要给太多证书申请权限
  4. 监控异常证书请求:监控异常的证书申请行为
  5. 定期渗透测试:用 Certify/Certipy 测试 AD CS 配置
  6. 分段防御:域管账号严格管控,用 PAM 堡垒机

八、总结

Certighost(CVE-2026-54121)是 AD CS 安全的一个经典案例:企业公钥基础设施本来是用来增强安全性的,但配置错误反而成了攻击入口。在企业域安全领域,AD CS 是最高价值的攻击面之一------一个配置错误的 CA,能让普通域用户直接变成域管。理解证书信任模型、PKINIT 认证、DCSync 攻击,是做企业域安全的基本功。在 SRC 挖洞实践中,企业内网的 AD CS 审计是赏金最高的方向之一------一个能拿域管的漏洞,对企业来说价值极高。


相关推荐
青春不朽5121 小时前
requests 超时、重试、SSL 报错?9 个高频问题与一整张排错对照表
网络·网络协议·ssl
酣大智1 小时前
H3C MSR3600(Comware V7)接口限速完整操作步骤
网络·mqc
chenlance2 小时前
PADS灌铜、覆铜过程和技巧小汇总
linux·服务器·网络
曾晓森2 小时前
OpenAI 兼容 API 接入山猫云:先核对分组和价格,再发最小请求
网络·python
张彦峰ZYF2 小时前
从智能体到生产系统:企业 Agent 规模化的治理、记忆、知识与安全
人工智能·安全·架构·operatingsystem·agent platform·agentcontrol·agent mesh
传奇开心果编程2 小时前
【Compose Multiplatform 跨端开发学与练】第5课 网络与数据层
android·网络·学习·ui·ios·kotlin·composer
时速GEO系统2 小时前
深圳科飞时速推出桌面级AI应用软件 -初元AI 24天内迭代三个版本,面向零基础用户提供建站与业务软件生成能力
网络·人工智能
xianghongtao01163 小时前
麦肯锡2026技术趋势06_网络安全与可信系统_研究解读
人工智能·安全·web安全
IT研究室4 小时前
最新大数据毕业设计选题推荐-基于大数据的网络安全入侵流量特征分析与可视化-大数据-Spark-Hadoop-Bigdata
大数据·web安全·课程设计