
CVE-2026-54121(別名 Certighost)の概念実証ツールの動作するフォークです。 元の研究とPoCは @H0j3n と @aniqfakhrul によるもので、詳細な分析は以下にあります:
このフォークは、要求されたSANを尊重するCAでPKINITが成功しない原因となっていたSAN処理を修正し、--target-san の解析を強化し、コンピュータアカウントの処理を再設計して ms-DS-MachineAccountQuota を使い尽くさないようにしています。
特権ポート389と445を必要とする不正LDAP/SMBサービスを使用するため、rootで実行してください。
sudo python3 certighost.py -d playground.local -u lowpriv -p 'Password1234' --dc-ip 192.168.1.10
正常に完了すると、対象の証明書 (.pfx) とKerberosキャッシュ (.ccache) が現在の作業ディレクトリに書き込まれます。
CERTIGHOST$)を再利用するか、--computer-name で指定されたアカウントを使用します。cdc 属性(--listener で指定、省略時は自動検出)と、対象DCのDNS名を持つ rmd 属性を埋め込みます。.ccache とNTハッシュを要求します。元の実装では、CSRの subjectAltName 拡張と SAN:dns= 要求属性の両方に、対象DCのFQDN ではなく 不正コンピュータの ホスト名を使用して証明書SANを構築していました。そのため、要求されたSANを尊重するCAでは、発行された証明書に不正アカウントの dNSHostName が含まれ、PKINITがそれを誤ったプリンシパルにマッピングして、次のエラーで失敗していました:
KDC_ERR_CLIENT_NAME_MISMATCH(Reserved for PKINIT)
SANは現在、対象DCの dNSHostName(rmd_value / target_dns)を使用します。これはPKINITがマシンアカウントをマッピングする値です。発行される証明書は DNS:<dc>.<domain> を提示し、AS-REQはDCとして完了します。
--target-san--target-san は、短い NAME 形式のみではなく、MEEREEN、MEEREEN$、またはFQDN meereen.essos.local(sAMAccountName または dNSHostName で照合)のいずれも受け付けるようになりました。
元の実装では、実行のたびに新しいランダムな GHOST********$ アカウントを作成していました。ms-DS-MachineAccountQuota を介して作成されたコンピュータアカウントは Domain Admins が所有する(作成者ではない)ため、低特権ユーザーは それらを削除できず、実行を繰り返すと孤児アカウントでクォータ(デフォルト10)をすぐに使い果たしていました。
このフォークは単一の安定したアカウント(CERTIGHOST$、存在しない場合にのみ作成)を再利用するため、クォータは増えず、実行間でクリーンアップするものもありません。
アカウントが初めて作成されると、スクリプトはADに残されることを示す警告を表示します:
[!] WARNING: computer account CERTIGHOST$ was created and is left in AD.
このアカウントは後続の実行で再利用するために残されます。完全に削除するには、オブジェクト所有者であるDomain Adminで削除してください:
Get-ADComputer CERTIGHOST | Remove-ADComputer -Confirm:$false
impacketcryptography、pyasn1、asn1crypto、pycryptodomex正規のセキュリティテストおよび教育目的にのみ使用してください。明示的にテスト許可を得たシステムに対してのみ使用してください。