CVE-2026-56155:AD FS 分布式密钥管理器容器 ACL 强化

应用对象
Windows Server 2012 ESU Windows Server 2012 R2 ESU Windows Server 2016 Windows Server 2019 Windows Server 2022 Windows Server 2025

原始发布日期: 2026 年 7 月 14 日
KB ID: 5121391

本文内容

摘要

分布式密钥管理器 (DKM) 容器上的 访问控制 列表 (ACL) 随着 2026 年 7 月 14 日的 Windows 安全更新进入了第一个强化阶段,该更新引入了自动检测不安全的 ACL 和选择加入的修正机制。

从 2026 年 10 月 13 日 Windows 安全更新开始,默认情况下,AD FS 会自动修正不安全的 DKM 容器 ACL。 管理员可以通过将 RemediateDkmAcl 设置为 0 来选择退出。 此强化工作解决了 CVE-2026-56155 中记录的漏洞可能导致的特权提升 (EOP) |Active Directory 联合身份验证服务特权提升漏洞。

总之,Active Directory 联合身份验证服务 (AD FS) 依赖于 DKM 容器来存储用于保护私钥的令牌签名和令牌加密证书的对称密钥。 如果容器的 ACL 过于宽松,则对 DKM 密钥材料具有读取访问权限的攻击者可以解密令牌签名私钥。

返回顶部

采取行动

要保护您的环境,请完成以下步骤:

  1. 在所有 AD FS 服务器上安装 2026 年 10 月 13 日或之后发布的相应 Windows 安全更新。

重要

安装安全更新之前,请确定是否需要选择退出自动修正。 不建议选择退出,因为这会使 DKM 容器 ACL 处于不安全状态。

如果必须选择退出特定的兼容性要求,请在安装更新之前,在场中每个 AD FS 服务器上将 RemediateDkmAcl 注册表设置为 0 。 DKM 容器是由场中的所有 AD FS 服务器共享的单个 Active Directory 对象,DKM ACL 后台任务在每个服务器上运行。 如果即使在一个 AD FS 服务器上也缺少 RemediateDkmAcl 或设置为非零值,则该服务器可以在安装更新后自动修正共享 DKM 容器 ACL。

  1. 安装后,AD FS 服务在每次服务启动时以及此后每 24 小时审核一次 DKM 容器 ACL。 如果 ACL 不安全,AD FS 将自动尝试修正,除非 RemediateDkmAcl 设置为 0。

  2. 查看以下事件的 AD FS 管理员事件日志:

    • 事件 ID:1133 指示 DKM 容器 ACL 是安全的。 不需要进行任何后续操作。

    • 事件 ID:1132 指示 DKM 容器 ACL 不安全,将执行自动修正。 ACL 详细信息将写入具有相同实例 ID 的一个或多个后续事件 ID 510 条目。 查看修正结果的事件 ID 1135、1136 或 1137,并根据结果采取以下操作。

    • 事件 ID:1135 (修正成功) 无需进一步的修正操作。 保存后续事件 ID 510 条目中的上一个 ACL,如“保存上一个 SDDL”部分所述。

    • 事件 ID:1136 (修正失败) 查看当前 ACL 和异常详细信息的后续事件 ID 510 条目,更正基础错误,然后重启 AD FS 服务或等待下一个检测周期。

    • 事件 ID:1137 (所有权更改失败) 按照所有权失败事件案例指南授予 AD FS 服务帐户 WriteOwner 和 WriteDacl 权限,然后重启 AD FS 服务或等待下一个检测周期。

AD FS DKM 容器 ACL 事件

事件 ID Type 含义
1132 警告 DKM 容器 ACL 与预期的安全状态不匹配。 审阅修正事件 1135、1136 和 1137。
1133 信息 DKM 容器 ACL 处于预期的安全状态。 无需执行任何操作。
1134 错误 检测任务遇到错误 (,例如 LDAP 连接失败) 。 查看 AD FS 调试日志并更正基础错误。
1135 信息 DKM 容器 ACL 修正已成功完成。 保存以前的 SDDL。
1136 错误 DKM 容器 ACL 修正失败。 查看相关的事件 ID 510 条目和 AD FS 调试跟踪,并更正基础错误。
1137 错误 AD FS 无法取得 DKM 容器的所有权,因为服务帐户缺少所需的权限。 授予所需的权限
510 信息 包含从事件 ID 1132、1135 或 1136 溢出的 ACL 或异常详细信息。 按实例 ID 匹配条目。

返回顶部

预期的安全状态更改

修正后,只有以下主体有权访问 DKM 容器:

Principal 访问权限
域管理员 通用 全部 (完全控制)
企业管理员 通用 全部 (完全控制)
系统 通用 全部 (完全控制)
AD FS 服务帐户 读取、写入、创建子级、写入所有者、删除树

备注 禁用继承,并丢弃所有继承的 ACE。 将删除不在上面列表中的任何其他显式允许 ACE。

返回顶部

选择退出自动修正

重要

本节、方法或任务包含如何更改注册表的信息。 但是,注册表修改不当可能会出现严重问题。 因此,请一定严格按照下列步骤操作。 为了获得进一步的保护,请在修改注册表之前对其进行备份。 然后,即可在出现问题时还原注册表。 有关如何备份和还原注册表的详细信息,请参阅如何备份和还原 Windows 中的注册表。

当 RemediateDkmAcl 缺失或设置为非零值时,默认启用修正。 如果必须选择退出特定的兼容性要求,请在安装更新之前将场中每个 AD FS 服务器上的值设置为 0 。 不建议选择退出,因为这会使 DKM 容器 ACL 处于不安全状态。

信息 详细信息
注册表项: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ADFS
值: RemediateDkmAcl
类型: DWORD
数据: 0

返回顶部

所有权失败事件案例 (事件 ID 1137)

事件 ID:1137 指示 AD FS 无法取得 DKM 容器的所有权,因为服务帐户缺少所需的权限。 在最初在 Windows Server 2012 或 Windows Server 2012 R2 上创建的场上,会出现这种情况。 在这种情况下,请按照以下步骤在场中的 任一 AD FS 服务器 上向 AD FS 服务帐户授予所需的权限。 否则,修正尝试将继续失败。

  1. 标识 DKM 容器 DN:

    
    $dkmContainerDn = (Get-AdfsProperties).CertificateSharingContainer
    $dkmContainerDn
    
    
  2. 标识 AD FS 服务帐户:

    
    $serviceAccount = (Get-CimInstance Win32_Service -Filter "Name='adfssrv'").StartName
    $serviceAccount
    
    
  3. 显式授予 Allow ACE for WriteOwner and WriteDacl:

    
    $sid = (New-Object System.Security.Principal.NTAccount($serviceAccount)).Translate([System.Security.Principal.SecurityIdentifier]) 
    $entry = New-Object System.DirectoryServices.DirectoryEntry("LDAP://$dkmContainerDn") 
    $rule = New-Object System.DirectoryServices.ActiveDirectoryAccessRule( 
     $sid, 
     ([System.DirectoryServices.ActiveDirectoryRights]::WriteOwner -bor [System.DirectoryServices.ActiveDirectoryRights]::WriteDacl), 
     [System.Security.AccessControl.AccessControlType]::Allow, 
     [System.DirectoryServices.ActiveDirectorySecurityInheritance]::All 
    ) 
    $entry.ObjectSecurity.AddAccessRule($rule) 
    $entry.CommitChanges() 
    $entry.Close() 
    
    
  4. 授予所需权限后,可以:

    • 等待最多 24 小时下一个检测周期
    • 重启 AD FS 服务以更快地触发修正

成功修正后, 事件 ID:1135 (信息) 将以 SDDL 格式的上一个 ACL 记录。

返回顶部

作为预防措施,我们建议在成功修正后保存事件 ID:510 个与事件 ID:1135 关联的条目中的前一个 ACL (SDDL) 。 事件 ID:1135 包含用于标识相关事件 ID:510 条目的实例 ID。 虽然在大多数情况下不需要以前的 ACL, (因为原始权限) 不安全,但提供前一个 ACL 可以为任何不可预见的兼容性问题提供一个安全网络。

注意

事件日志可能由于大小限制而滚动。 如果将来需要以前的 SDDL,并且事件已被覆盖,则它将永久丢失。

可以手动复制和组合来自事件 ID:510 个条目,这些条目具有由事件 ID:1135 引用的实例 ID。 或者,使用以下 PowerShell 脚本收集相关事件 ID:510 条目并将 SDDL 保存到文件中:


New-Item -ItemType Directory -Path 'C:\ADFSBackup' -Force | Out-Null

$event = Get-WinEvent -FilterHashtable @{
    LogName = 'AD FS/Admin'
    Id      = 1135
} -MaxEvents 1

if ($null -eq $event) {
    throw 'Event ID 1135 was not found.'
}

if ($event.Message -notmatch 'Instance ID:\s*([0-9a-fA-F-]{36})') {
    throw 'Instance ID was not found in Event ID 1135.'
}

$instanceId = $Matches[1]

$details = Get-WinEvent -FilterHashtable @{
    LogName   = 'AD FS/Admin'
    Id        = 510
    StartTime = $event.TimeCreated
    EndTime   = $event.TimeCreated.AddMinutes(5)
} -ErrorAction SilentlyContinue |
    Where-Object { $_.Message -like "*$instanceId*" } |
    Sort-Object RecordId |
    ForEach-Object {
        if ($_.Message -match '(?s)Details:\s*(.*)$') {
            $Matches[1]
        }
    }

if (-not $details) {
    throw "No Event ID 510 entries were found for Instance ID $instanceId."
}

[System.IO.File]::WriteAllText('C:\ADFSBackup\dkm-acl-previous-sddl.txt', ($details -join '').TrimEnd())

返回顶部

如何还原以前的 ACL

如果在修正后遇到问题,并且需要还原到以前的 ACL:


# Restore the full security descriptor (DACL + Owner + SACL) from the saved SDDL 
$dn = "<Container DN from event 1135 or C:\ADFSBackup\dkm-acl-previous-sddl.txt>" 
$sddl = "<Previous ACL (SDDL) value from event 1135 or C:\ADFSBackup\dkm-acl-previous-sddl.txt>” 
 
$entry = New-Object System.DirectoryServices.DirectoryEntry("LDAP://$dn") 
$entry.ObjectSecurity.SetSecurityDescriptorSddlForm($sddl, [System.Security.AccessControl.AccessControlSections]::All) 
$entry.CommitChanges() 
$entry.Close() 

注意

此命令要求运行它的帐户具有 SeSecurityPrivilege (通常域管理员具有此) 。 在已加入域的计算机上从提升的 PowerShell 会话运行此项。


Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\ADFS" -Name "RemediateDkmAcl" -Value 0 -Type DWord 

还原后,在场中的每个 AD FS 服务器上将 RemediateDkmAcl = 设置为 0 ,以防止服务在下一个周期重新修正。

返回顶部

事件引用

事件 ID:1132 - 需要审查 DKM 容器 ACL
信息 详细信息
事件日志 AD FS/管理员
事件类型 警告
事件源 AD FS
事件 ID 1132
事件文本 AD FS 检测到分布式密钥管理器 (DKM) 容器 ACL 与预期的安全状态不匹配。 DKM 容器存储用于保护令牌签名密钥材料的对称密钥。

容器 DN:
<DN>

预期的安全状态为已禁用继承,并且只有域管理员、企业管理员、系统和 AD FS 服务帐户具有访问权限。

AD FS 将尝试自动修正 ACL。 修正立即运行,此后每 24 小时运行一次,直到 ACL 与预期的安全状态匹配。 有关结果,请参阅事件 1135 (修正成功) 或事件 1136/1137 (修正失败) 。

如果要选择退出自动修正,请将 HKLM\SOFTWARE\Microsoft\ADFS\RemediateDkmAcl (DWORD) 设置为 0。 有关指南,请参阅 https://go.microsoft.com/fwlink/?linkid=2369796。

其他数据

继承已禁用: <是/否>

SDDL) (当前 ACL:
查看事件 510 的实例 ID 条目: <实例 ID>
事件 ID:1133 - DKM 容器 ACL 正常
信息 详细信息
事件日志 AD FS/管理员
事件类型 信息
事件源 AD FS
事件 ID 1133
事件文本 DKM ACL 后台任务审查了容器 ACL 以进行安全强化。

容器具有正确的设置,不需要进一步操作。

容器 DN:
<DN>
事件 ID:1134 - 检测错误
信息 详细信息
事件日志 AD FS/管理员
事件类型 错误
事件源 AD FS
事件 ID 1134
事件文本 AD FS DKM 容器 ACL 检查后台任务遇到错误。

容器 DN:
<DN>

其他数据
异常详细信息:
<例外>

用户操作
有关更多详细信息,请查看 AD FS 调试日志。 确保 AD FS 服务帐户有权访问 Active Directory 中的 DKM 组容器。
事件 ID:1135 - 修正成功
信息 详细信息
事件日志 AD FS/管理员
事件类型 信息
事件源 AD FS
事件 ID 1135
事件文本 AD FS 成功强化了分布式密钥管理器 (DKM) 容器 ACL。

容器 DN:
<DN>

容器 ACL 现在仅向域管理员、企业管理员、SYSTEM 和 AD FS 服务帐户授予访问权限。 已阻止继承,所有其他权限已删除。

注意: 当 ACL 与基线匹配时,自动修正将不会再次运行。 如果即使将来 ACL 偏移,也想永久选择退出自动修正,请将 HKLM\SOFTWARE\Microsoft\ADFS\RemediateDkmAcl (DWORD) 设置为 0。

以前的 ACL 包含在下面的 SDDL 格式中。 如果需要还原原始权限,请参阅 https://go.microsoft.com/fwlink/?linkid=2369796

其他数据

以前的 ACL (SDDL) :
查看事件 510 的实例 ID 条目: <实例 ID>
事件 ID:1136 - 修正失败
信息 详细信息
事件日志 AD FS/管理员
事件类型 错误
事件源 AD FS
事件 ID 1136
事件文本 AD FS 尝试修正分布式密钥管理器 (DKM) 容器 ACL,但失败。

容器 DN:
<DN>

用户操作自动修正将在) 24 小时内 (下一个检测周期重试。 如果更希望手动修复 ACL,请查看并更正 DKM 组容器上的 ACE。 只有域管理员、企业管理员、系统和 AD FS 服务帐户才应具有访问权限。

若要禁用自动修正,请将 HKLM\SOFTWARE\Microsoft\ADFS\RemediateDkmAcl (DWORD) 设置为 0。

有关指南,请参阅 https://go.microsoft.com/fwlink/?linkid=2369796

其他数据

当前 ACL (SDDL) 和异常详细信息:
查看事件 510 的实例 ID 条目: <实例 ID>
事件 ID:1137 - 所有权更改失败
信息 详细信息
事件日志 AD FS/管理员
事件类型 错误
事件源 AD FS
事件 ID 1137
事件文本 AD FS 尝试修正分布式密钥管理器 (DKM) 容器 ACL,但由于 AD FS 服务帐户没有所需的权限而无法取得所有权。 最初在 Windows Server 2012 或 Windows Server 2012 R2 上创建的服务器场应出现这种情况。

容器 DN:
<DN>

用户操作
向 AD FS 服务帐户授予所需的权限,以便成功进行修正。

自动修正将在) 24 小时内 (下一个检测周期或服务重新启动时重试。 如果更希望手动修复 ACL,请查看并更正 DKM 组容器上的 ACE。 只有域管理员、企业管理员、系统和 AD FS 服务帐户才应具有访问权限。

若要禁用自动修正,请将 HKLM\SOFTWARE\Microsoft\ADFS\RemediateDkmAcl (DWORD) 设置为 0。 有关指南,请参阅 https://go.microsoft.com/fwlink/?linkid=2369796
事件 ID:510 - 其他 ACL 信息
信息 详细信息
事件日志 AD FS/管理员
事件类型 信息
事件源 AD FS
事件 ID 510
事件文本 有关具有实例 ID、实例 ID <>的事件条目的详细信息。 可能有更多事件具有相同的实例 ID 以及更多信息。

实例 ID:
<Instance ID>

详细信息: <ACL 或异常详细信息段>

对于大型 ACL,可以记录多个事件 ID 510 条目。 首先记录相关的事件 ID 1132、1135 或 1136,然后是具有相同实例 ID 的事件 ID 510 条目。

返回顶部

更改日志

更改日期 更改说明
2026 年 10 月 13 日
  • 本文在 2026 年 10 月 13 日发布时广泛重写
  • 在“事件引用”部分添加了新的事件 ID 1137 和 510。

返回页首