インターネット上で CVE-2021-42287/CVE-2021-42278 の権限昇格の脆弱性の EXP が公開されているのを見て、学習の目的で関連資料を調べて研究しました。
この権限昇格の脆弱性は、ドメイン内の一般ユーザーをドメイン管理者の権限に昇格させることができます。条件が必要ですが、依然として深刻なリスクがあります。
この脆弱性に関する情報がまだ十分に整理されておらず、自分の理解も十分ではないため、以下の分析は正確ではないかもしれません。
1. 脆弱性の原理#
この脆弱性の原理を理解するには、まず Kerberos プロトコルの原理を理解する必要があります。
簡単に言うと:
Kerberos プロトコルは 3 つのステップに分かれています
認証ステップ | 認証プロセス | 認証結果 |
---|---|---|
AS 認証 | ASREQ & ASREP | TGT(チケットグラントチケット)を取得 |
TGS 認証 | TGSREQ & TGSREP | ST(サービスチケット)を取得 |
TGS 認証 | AP-REQ & AP-REP | クライアントとサーバーの接続を確立する |
認証のフローチャートは以下の通りです:
CVE-2021-42278:
マシンユーザーアカウントは、アカウント名の末尾に
$
を追加する形式ですが、DC はマシンユーザーアカウントの末尾に$
があるかどうかを検証しないため、マシンユーザーのアカウントは一般ユーザーとして操作されます。CVE-2021-42287:
一般ユーザーが TGT を取得する際、別のユーザーを介して自分自身の ST を要求し、TGT を KDC に送信します。TGT は別のユーザーの情報を使用して取得されるため、KDC はデータベースで一致するユーザー情報を見つけることができず、その後、KDC はマシンユーザーの ST を検索し、最終的にマシンユーザーの権限を取得します。
1.1 脆弱性の手順:#
- ドメインの一般ユーザーを使用してマシンアカウントを追加する(ドメインユーザーは通常、マシンアカウントを追加できる)
- マシンアカウントの SPN をクリアし、マシン名をドメインコントローラの名前に変更し、末尾の $ を削除する
- 追加したマシンアカウントを使用して、ドメインコントローラに Kerberos リクエスト認証を送信して TGT(チケットグラントチケット)を取得する
- マシンアカウントを削除し、取得した TGT を使用して ldap 管理者サービスの権限を要求する ST(サーバーチケット)を要求する
- ドメインコントローラは TGT を復号化して PAC(特権属性証明書)を取得し、要求されたのが ldap 管理者サービスの権限であることを確認し、ldap サーバーの管理者のハッシュを使用して ST を暗号化する
- ldap サーバーの管理者は自身のハッシュを使用して PAC を復号化する
- PAC を使用して要求ユーザーと要求されたユーザーの情報を取得し、サービスへのアクセス権限を判断する
- この判断プロセスでは、ドメインコントローラにリクエストを送信し、ドメインコントローラはまずデータベース(アクティブディレクトリ)で要求元の関連情報を検索します。
$
が削除されているため、ドメインユーザーとして検索され、情報が見つからない場合は、マシンアカウント情報を検索し、末尾に$
を追加します - この時点で、ドメインコントローラは次の情報を取得します:ドメインコントローラのマシンが ldap 管理者サービスを要求しようとしていること、要求を介してドメインコントローラの権限を取得できるため、ドメインコントローラにリクエストするだけでドメインコントローラの権限を取得できます
1.2 脆弱性の条件:#
- 低い権限のドメインアカウントでマシンアカウントを作成および変更できる
- AP_REP の時に(TGS_REP ではなく)、ユーザーが見つからない場合にマシンユーザーを検索し、その後で末尾に
$
を追加する - ドメインコントローラが委任攻撃を許可している
- DC にパッチ KB5008380 または KB5008602 が適用されていない
2. 影響を受けるバージョン#
CVE-2021-42278
○ Windows Server 2012 R2
○ Windows Server 2012 (Server Core インストール)
○ Windows Server 2012
○ Windows Server 2008 R2 for x64-based Systems Service Pack 1(Server Core インストール)
○ Windows Server 2008 R2 for x64-based Systems Service Pack 1
○ Windows Server 2008 for x64-based Systems Service Pack 2(Server Core インストール)
○ Windows Server 2008 for x64-based Systems Service Pack 2
○ Windows Server 2008 for 32-bit Systems Service Pack 2(Server Core インストール)
○ Windows Server 2008 for 32-bit Systems Service Pack 2
○ Windows Server 2016 (Server Core インストール)
○ Windows Server 2016
○ Windows Server, version 20H2 (Server Core インストール)
○ Windows Server, version 2004 (Server Core インストール)
○ Windows Server 2022 (Server Core インストール)
○ Windows Server 2019 (Server Core インストール)
○ Windows Server 2022○ Windows Server 2019
○ Windows Server 2012 R2 (Server Core インストール)
CVE-2021-42287
○ Windows Server 2012 R2 (Server Core インストール)
○ Windows Server 2012 R2
○ Windows Server 2012 (Server Core インストール)
○ Windows Server 2008 R2 for x64-based Systems Service Pack 1(Server Core インストール)
○ Windows Server 2012
○ Windows Server 2008 R2 for x64-based Systems Service Pack 1
○ Windows Server 2008 for x64-based Systems Service Pack 2(Server Core インストール)
○ Windows Server 2008 for x64-based Systems Service Pack 2
○ Windows Server 2008 for 32-bit Systems Service Pack 2(Server Core インストール)
○ Windows Server 2008 for 32-bit Systems Service Pack 2
○ Windows Server 2016 (Server Core インストール)
○ Windows Server 2016○ Windows Server, version 20H2 (Server Core インストール)
○ Windows Server, version 2004 (Server Core インストール)
○ Windows Server 2022 (Server Core インストール)
○ Windows Server 2022
○ Windows Server 2019 (Server Core インストール)
○ Windows Server 2019
3. 脆弱性の再現#
ツール:
3.1 スキャン探索#
noPac.exe scan -domain redteam.club -user xfeng -pass 123456
3.2 直接利用(noPac.exe)#
noPac.exe -domain redteam.club -user test -pass pass@123 /dc ad02.redteam.club /mAccount test123 /mPassword feng /service cifs /ptt
dir \\ad01.redteam.club\c$
psexec.exe \\ad01.redteam.club cmd.exe
4. 脆弱性の修正#
Microsoft はすでにセキュリティパッチをリリースしており、詳細はリンクを参照してください。
自分の Windows のバージョンが対応するセキュリティパッチがインストールされているか確認してください。
5. 参考記事#
https://exploit.ph/cve-2021-42287-cve-2021-42278-weaponisation.html
https://www.thehacker.recipes/ad/movement/kerberos/samaccountname-spoofing