
これは、CVE-2026-54121(別名 Certighost)を実証するための概念実証ツールです。詳細な分析についてはこちら https://gist.github.com/H0j3n/a5ef2609b5f2944ac2390a191a534c26 をお読みください。
この概念実証は自己完結型のPythonスクリプトです。impacket、cryptography、pyasn1、asn1crypto、およびdnspythonが必要です。
sudo pip install --break-system-packages git+https://github.com/fortra/impacket.git cryptography pyasn1 asn1crypto pycryptodome dnspython
不正なLDAPおよびSMBサービスは特権ポート389および445で待ち受けるため、rootとして実行してください。
sudo python3 certighost.py -d playground.local -u lowpriv -p 'Password1234' --dc-ip 192.168.1.10
実行に成功すると、ターゲットの証明書(.pfx)とKerberosキャッシュ(.ccache)がカレントディレクトリに書き込まれます。
GHOSTABCDEFGH$)を作成するか、--computer-name で渡されたアカウントを再利用します。cdc 属性(--listener で指定。省略時は自動検出)と、ターゲットDCのDNS名を保持する rmd 属性を埋め込みます。STATUS_NOLOGON_SERVER_TRUST_ACCOUNT 問題を修正したPRに対して @GregDurys に謝意を表します。certighost には現在、不正SMB NetLogonパスに対する適切なスクリプト内ホットパッチが同梱されています(MS-NRPC 2.2.1.4.15に従い、ParameterControl のKビット 0x800 とともにEビット 0x20 を設定します)。これにより、別の/フォークされたImpacketバージョンをインストールすることを心配せずに、ドメインコントローラー上でホストされているCAに対してエクスプロイトが機能します。EDITF_ATTRIBUTESUBJECTALTNAME2 / ESC6)では、証明書リクエストは SAN:dns IDを不正コンピューターのものではなく、ターゲットDCのDNS名(rmd_value)に設定するため、PKINITステップでの KDC_ERR_CLIENT_NAME_MISMATCH を回避します。ADテンプレートからの構築ではリクエストSANは無視されるため、この変更は安全なno-opです。