Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2021-43229 — CVE-2021-43229 ウォークスルー | Kitploit
ツール/GitHubGitHub/citizen13x/cve-2021-43229
脆弱性分析エクスプロイトリバースエンジニアリング学習と教育バイナリエクスプロイト
GitHubcitizen13x/cve-2021-43229

CVE-2021-43229

CVE-2021-43229 ウォークスルー

リポジトリを見る
114年前未レビュー

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

CVE-2021-43229 ウォークスルー

公開情報

Windows NTFS の特権昇格の脆弱性

以下とは異なる:

  • CVE-2021-43230
  • CVE-2021-43231

パッチ: 2021年12月14日

Twitter の @AravGarg3 によると、CVE-2021-43229 は悪用可能であり、整数オーバーフロー に関連しているようです。

ソース: https://twitter.com/AravGarg3/status/1479447843458863104

Windows 10 のバージョン

Windows 10 のマイナーバージョンリリース日
138711/22/2021
141512/14/2021

第一部 - 差分解析

BinDiff と IDA Pro を使用したパッチ差分解析の結果、以下の変更が見られました:

3つの候補が浮上します:

  • NtfsRenameToPrivateDir
  • TxfAllocateAndStoreNameForTxLogging
  • TxfAllocateFullFilePathForChangeNotify

12月の Microsoft の セキュリティ更新ガイド によると、4つの CVE が NTFS に関連しています:

  • CVE-2021-43229: Windows NTFS Elevation of Privilege Vulnerability
  • CVE-2021-43230: Windows NTFS Elevation of Privilege Vulnerability
  • CVE-2021-43231: Windows NTFS Elevation of Privilege Vulnerability
  • CVE-2021-43240: NTFS Set Short Name Elevation of Privilege Vulnerability

CVE-2021-43240 は NtSetShortNameInfo に関連しているようです。

NtfsRenameToPrivateDir、TxfAllocateAndStoreNameForTxLogging、TxAllocateFullFilePathForChangeNotify の3つはすべて同じ新しい長さチェックを持ち、CVE-2021-43229、CVE-2021-43230、CVE-2021-43231 に関連していると思われます(必ずしもこの順序ではありません)。現時点では、どれがどれかを知ることはできません。Microsoft はこれらの情報について少しケチです。

分析

3つの CVE すべてにおいて、割り当てサイズの計算(ディレクトリパス長 + ファイル名長)中に整数オーバーフローが発生し、その後の2回の memmove(ディレクトリパスとファイル名)によりプールベースのバッファオーバーフローが発生します。

第二部 - パス

最初の試み: NtfsRenameToPrivateDir

NtfsRenameToPrivateDir へのパスを以下に示します:

root@kitploit:~
NtfsCommonSetInformation
       |__________________
       |                  |
       v                  v
NtfsSetLinkInfo   NtfsSetRenameInfo
       |__________________|
       |
       v
NtfsRemoveSupersededTarget
       |
       v
NtfsRenameToPrivateDir

まず、NtfsCommonSetInformation を呼び出すには、NtSetInformationFile を呼び出します。次に、NtfsSetLinkInfo と NtfsSetRenameInfo を経由するには、NtSetInformationFile のファイル情報クラスとしてそれぞれ FileLinkInformationEx と FileRenameInformationEx を使用します。

NtfsSetRenameInfo を経由して NtfsRemoveSupersededTarget に到達するには、FILE_RENAME_REPLACE_IF_EXISTS フラグと FILE_RENAME_POSIX_SEMANTICS フラグを設定する必要があります。既存のファイルの名前でファイルを名前変更して、NtfsRemoveSupersededTarget にアクセスします。NtfsRenameToPrivateDir については、置き換えられるファイルが何らかのプロセスによって開かれている必要があるため、少しトリッキーです。

残念ながら、NtfsRemoveSupersededTarget の呼び出しの前に長さチェックが行われます。

NtfsSetLinkInfo を使用する方法は NtfsSetRenameInfo と似ており、フラグの名前が異なるだけで、意味は同じです。しかし、NtfsSetRenameInfo と同様に、NtfsRemoveSupersededTarget の呼び出し前に別のチェックが行われます。

2番目の試み: TxfAllocateAndStoreNameForTxLogging

TxfAllocateAndStoreNameForTxLogging へのパスを以下に示します:

root@kitploit:~
NtfsCommonCreate
      |
      v
NtfsCreateNewFile
      |
      v
TxfNewFileCreate
      |
      v
TxfAllocateAndStoreNameForTxfLogging

まず、NtfsCommonCreate を呼び出すには、CreateFile を呼び出します。

TxfNewFileCreate 関数は、Txf というプレフィックスが付いており、これは「Transactional NTFS」を意味し、トランザクションファイルが作成されるときに呼び出されます。TxfAllocateAndStoreNameForTxfLogging は、トランザクションファイルのパスを保存するためにプロセス中に呼び出されます。

必要な呼び出しは2つだけです:

  • CreateTransaction
  • CreateFileTransacted

第三部 - PoC を実行する

TxfAllocateAndStoreNameForTxLogging の脆弱なコードを以下に示します:

root@kitploit:~
...
and     di, 2
add     di, [rsi+UNICODE_STRING.Length]                      ; File name
add     di, [rsp+68h+RelativeNormalizedDirectoryPath.Length] ; OVERFLOW HERE
cmp     [rsp+68h+arg_20], r12b
jnz     loc_16592C

movzx   edx, di
add     rdx, size UNICODE_STRING ; NumberOfBytes
mov     ecx, cs:PoolType
or      ecx, 10h        ; PoolType
mov     r8d, 'afxT'     ; Tag
call    cs:__imp_ExAllocatePooliWthTag
...

オーバーフローを引き起こすには、過度に長いファイル(0xFFFF バイト(32767 文字)以上)を作成する必要があります。

問題として、ファイル名またはディレクトリ名は256文字(NULL文字を含む)を超えることはできません。これを解決するには、深いサブフォルダを使用する必要があります。奇妙なことに、サブフォルダが正常に作成されても、サブファイルを作成できないのは、おそらく以前に行われたチェックが原因です。

エクスプローラ のバーを使用すると、ディレクトリパスを表示するために使用される形式に気付くことができます。私が予想したものとは異なり、「クラシック」なパスを使用する代わりに、エクスプローラ は DOS の昔ながらの形式である 8.3 ショート形式を使用します。

サブフォルダの作成は以前と同じように行い、ファイル作成時にサブディレクトリにショート名を使用することでうまくいきます。

重要なのは、オーバーフローしたサイズに 16 バイトが追加されることです。これは、最終的なパスを表す UNICODE_STRING のサイズです。要求されたメモリには、UNICODE_STRING とその UNICODE_STRING のバッファが続いて含まれるためです。

方法:

  • 長い名前でサブディレクトリを作成
  • 長い名前のファイルを作成し、ディレクトリパスにはショート名を使用

現在の条件:

  • オーバーフローは 64KB 相当を上書きする
  • 割り当てられたメモリサイズは最大 0x20C バイト
  • 割り当てられたメモリはページプール内

第四部 - 手がかり

SSTIC 2020 における Synacktiv による興味深い解説は、VS Heap をターゲットにすることで掘り下げるアイデアになるかもしれません。

CVE-2020-17087 の同様の悪用事例は、PixiePoint Security によって上記の手法を用いて発表されています。

ツールをダウンロード
SimiConf関数情報
NOK0.980.99NtfsCommonSetInformation$fin$0ジャンプ変更
0.970.99NtSetShortNameInfo
0.960.99NtfsUpdateSecurity
NOK0.910.94NtfsRenameToPrivateDir$fin$1ジャンプ変更
0.890.98NtfsInitializeFileInDirectory
OK0.880.95TxfAllocateAndStoreNameForTxLogging長さチェック
OK0.870.93NtfsRenameToPrivateDir長さチェック
OK0.810.95TxfAllocateFullFilePathForChangeNotify長さチェック
0.760.94NtfsCommonSetInformation