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 識別碼: 5121391

本文內容

摘要

隨著 2026 年 7 月 14 日的 Windows 安全性更新,分散式金鑰管理員 ( (存取控制清單) ACL) 已進入第一個強化階段,該更新引入了不安全 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 服務會在每次服務啟動時稽核 DKM 容器 ACL,之後每 24 小時一次。 如果 ACL 不安全,除非 RemediateDkmAcl 設為 0,否則 AD FS 會自動嘗試補救。

  2. 檢閱下列事件的 AD FS 管理員事件記錄檔:

    • 事件識別碼:1133 表示 DKM 容器 ACL 是安全的。 無需採取任何動作。

    • 事件識別碼: 1132 表示 DKM 容器 ACL 不安全,將會執行自動補救。 ACL 詳細資料會寫入具有相同執行個體識別碼的一或多個後續事件識別碼 510 項目。 檢閱補救結果的事件識別碼 1135、1136 或 1137,並根據結果採取下列動作。

    • 事件識別碼:1135 (補救成功) 不需要採取進一步的補救動作。 從後續事件識別碼 510 項目儲存上一個 ACL,如儲存上一個 SDDL 一節中所述。

    • 事件識別碼:1136 (補救失敗) 檢閱後續事件識別碼 510 項目以了解目前的 ACL 和例外狀況詳細資料、更正基礎錯誤,然後重新啟動 AD FS 服務或等待下一個偵測週期。

    • 事件識別碼:1137 (擁有權變更失敗) 遵循所有權失敗事件案例指引,授與 AD FS 服務帳戶 WriteOwner 和 WriteDacl 權限,然後重新啟動 AD FS 服務或等待下一個偵測週期。

AD FS DKM 容器 ACL 事件

事件識別碼 類型 意義
1132 警告 DKM 容器 ACL 不符合預期的安全狀態。 檢閱補救事件 1135、1136 和 1137。
1133 資訊 DKM 容器 ACL 處於預期的安全狀態。 不需要採取任何動作。
1134 錯誤 偵測工作遇到錯誤 (,例如 LDAP 連線失敗) 。 檢閱 AD FS 偵錯記錄檔,並修正基礎錯誤。
1135 資訊 DKM 容器 ACL 修復已成功完成。 儲存上一個 SDDL。
1136 錯誤 DKM 容器 ACL 修復失敗。 檢閱相互關聯的事件識別碼 510 項目和 AD FS 偵錯追蹤,並修正基礎錯誤。
1137 錯誤 AD FS 無法取得 DKM 容器的擁有權,因為服務帳戶缺乏必要的權限。 授與必要的權限
510 資訊 包含從事件識別碼 1132、1135 或 1136 溢位的 ACL 或例外狀況詳細資料。 依執行個體識別碼比對項目。

回到頁首

預期的安全狀態變更

補救之後,只有下列主體才能存取 DKM 容器:

Principal 存取權限
網域管理員 一般、所有 (完全控制)
企業管理員 一般、所有 (完全控制)
系統 一般、所有 (完全控制)
AD FS 服務帳戶 讀取、寫入、建立子系、寫入擁有者、刪除樹狀結構

備註 系統會停用繼承,並捨棄所有繼承的 ACE。 會移除上述清單中以外的任何其他明確允許 ACE。

回到頁首

退出自動補救

重要

此部分、方法或工作包含如何變更登錄的資訊。 然而,不當修改登錄可能會發生嚴重問題。 因此,請務必謹慎地依照這些步驟執行。 為加強保護,請先備份登錄再進行修改。 萬一發生問題,您就可以還原登錄。 如需進一步了解如何備份及還原登錄的相關資訊,請參閱如何在 Windows 中備份及還原登錄。

當 RemediateDkmAcl 遺失或設定為非零值時,預設會啟用補救。 如果必須選擇退出特定的相容性需求,請在安裝更新之前,在陣列中的每個 AD FS 伺服器上將值設定為 0 。 不建議退出,因為這會使 DKM 容器 ACL 處於不安全的狀態。

資訊 詳細資料
登錄機碼: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ADFS
值: RemediateDkmAcl
類型: DWORD
資料: 0

回到頁首

擁有權失敗事件案例 (事件識別碼 1137)

事件識別碼: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. 明確授與 允許 WriteOwner 和 WriteDacl 的 ACE:

    
    $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 服務以更快觸發補救

成功補救時, 事件識別碼:1135 (資訊) 會以 SDDL 格式與先前的 ACL 一起記錄。

回到頁首

作為預防措施,建議您從事件識別碼儲存先前的 ACL (SDDL) :成功補救後,有 510 個與事件識別碼:1135 相關聯的項目。 事件識別碼: 1135 包含用來識別相關事件識別碼的執行個體識別碼: 510 項目。 雖然在大多數情況下不需要先前的 ACL, (因為原始權限) 不安全,但擁有它可為任何未預期的相容性問題提供安全網。

注意

事件記錄檔可以因為大小限制而變換。 如果您未來需要先前的 SDDL,且事件已被覆寫,它將會永久遺失。

您可以手動複製並結合事件識別碼: 510 具有事件識別碼所參照之執行個體識別碼: 1135 的項目。 或者,使用下列 PowerShell 指令碼來收集相互關聯的事件識別碼: 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 ,以防止服務在下一個週期重新補救。

回到頁首

事件參考

事件識別碼:1132 - DKM 容器 ACL 需要檢閱
資訊 詳細資料
事件記錄檔 AD FS/管理員
事件類型 警告
事件來源 AD FS
事件識別碼 1132
事件文字 AD FS 偵測到分散式金鑰管理員 (DKM) 容器 ACL 不符合預期的安全狀態。 DKM 容器會儲存用來保護權杖簽署金鑰內容的對稱金鑰。

容器 DN:
<DN>

預期的安全狀態為已停用繼承,且只有網域系統管理員、企業系統管理員、SYSTEM 和 AD FS 服務帳戶具有存取權。

AD FS 將嘗試自動修復 ACL。 補救會立即執行,之後每 24 小時執行一次,直到 ACL 符合預期的安全狀態為止。 請參閱事件 1135 (補救成功) 或事件 1136/1137 (補救失敗) 結果。

如果您想要退出自動補救,請將 HKLM\SOFTWARE\Microsoft\ADFS\RemediateDkmAcl (DWORD) 設定為 0。 如需指引,請參閱 https://go.microsoft.com/fwlink/?linkid=2369796。

其他資料

已停用繼承: <是/否>

目前的 ACL (SDDL) :
查看事件 510 項目搭配執行個體識別碼: <執行個體識別碼>
事件識別碼: 1133 - DKM 容器 ACL 狀況良好
資訊 詳細資料
事件記錄檔 AD FS/管理員
事件類型 資訊
事件來源 AD FS
事件識別碼 1133
事件文字 DKM ACL 背景工作已檢閱容器 ACL 以進行安全性強化。

容器具有正確的設定,不需要採取進一步動作。

容器 DN:
<DN>
事件識別碼:1134 - 偵測錯誤
資訊 詳細資料
事件記錄檔 AD FS/管理員
事件類型 錯誤
事件來源 AD FS
事件識別碼 1134
事件文字 AD FS DKM 容器 ACL 檢查背景工作發生錯誤。

容器 DN:
<DN>

其他資料
例外狀況詳細資料:
<例外狀況>

使用者動作
如需詳細資訊,請檢閱 AD FS 偵錯記錄檔。 確保 AD FS 服務帳戶可以存取 Active Directory 中的 DKM 群組容器。
事件識別碼:1135 — 補救成功
資訊 詳細資料
事件記錄檔 AD FS/管理員
事件類型 資訊
事件來源 AD FS
事件識別碼 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 項目搭配執行個體識別碼: <執行個體識別碼>
事件識別碼:1136 - 補救失敗
資訊 詳細資料
事件記錄檔 AD FS/管理員
事件類型 錯誤
事件來源 AD FS
事件識別碼 1136
事件文字 AD FS 嘗試修復分散式金鑰管理員 (DKM) 容器 ACL,但失敗了。

容器 DN:
<DN>

User ActionAutoremediation 會在 24 小時) 內於下一個偵測週期 (重試。 如果您希望手動修正 ACL,請查看並更正 DKM 群組容器上的 ACE。 只有網域系統管理員、企業系統管理員、SYSTEM 和 AD FS 服務帳戶才應具有存取權。

若要停用自動補救,請將 HKLM\SOFTWARE\Microsoft\ADFS\RemediateDkmAcl (DWORD) 設定為 0。

如需指引,請參閱 https://go.microsoft.com/fwlink/?linkid=2369796

其他資料

目前 ACL (SDDL) 和例外狀況詳細資料:
查看事件 510 項目搭配執行個體識別碼: <執行個體識別碼>
事件識別碼:1137 - 擁有權變更失敗
資訊 詳細資料
事件記錄檔 AD FS/管理員
事件類型 錯誤
事件來源 AD FS
事件識別碼 1137
事件文字 AD FS 嘗試修復分散式金鑰管理員 (DKM) 容器 ACL,但無法取得擁有權,因為 AD FS 服務帳戶沒有必要的權限。 對於原本在 Windows Server 2012 或 Windows Server 2012 R2 上建立的陣列,這是預期的做法。

容器 DN:
<DN>

使用者動作
將必要權限授與 AD FS 服務帳戶,使補救成功。

自動補救會在 24 小時內 (的下一個偵測週期) 或服務重新啟動時重試。 如果您希望手動修正 ACL,請查看並更正 DKM 群組容器上的 ACE。 只有網域系統管理員、企業系統管理員、SYSTEM 和 AD FS 服務帳戶才應具有存取權。

若要停用自動補救,請將 HKLM\SOFTWARE\Microsoft\ADFS\RemediateDkmAcl (DWORD) 設定為 0。 如需指引,請參閱 https://go.microsoft.com/fwlink/?linkid=2369796
事件識別碼:510 - 其他 ACL 資訊
資訊 詳細資料
事件記錄檔 AD FS/管理員
事件類型 資訊
事件來源 AD FS
事件識別碼 510
事件文字 具有執行個體識別碼的事件項目詳細資訊。 可能有更多具有相同執行個體識別碼的事件,並提供詳細資訊。

執行個體識別碼:
<執行個體識別碼>

詳細資料: <ACL 或例外狀況詳細資料區段>

對於大型 ACL,可以記錄多個事件識別碼 510 項目。 會先記錄相關事件識別碼 1132、1135 或 1136,後面接著具有相同執行個體識別碼的事件識別碼 510 項目。

回到頁首

變更記錄

變更日期 變更描述
2026 年 10 月 13 日
  • 針對 2026 年 10 月 13 日發行版本廣泛重寫本文
  • 在 [事件參考] 區段中新增新的事件識別碼 1137 和 510。

回到頁首