Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
CVE-2021-43229 — CVE-2021-43229 Guida | Kitploit
Strumenti/GitHubGitHub/citizen13x/cve-2021-43229
Analisi delle VulnerabilitàExploitReverse EngineeringApprendimento e FormazioneBinary Exploitation
GitHubcitizen13x/cve-2021-43229

CVE-2021-43229

CVE-2021-43229 Guida

Vedi Repository
114 anni faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

CVE-2021-43229: Procedura dettagliata

Informazioni pubbliche

Vulnerabilità di elevazione dei privilegi di Windows NTFS

Distinto da:

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

Patch: 14 dicembre 2021

Secondo @AravGarg3 su Twitter, CVE-2021-43229 sembra essere sfruttabile e correlato a un integer overflow.

Fonte: https://twitter.com/AravGarg3/status/1479447843458863104

Versioni di Windows 10

Versioni minori di Windows 10Date di rilascio
138711/22/2021
141512/14/2021

Prima parte - Diffing

Usando BinDiff con IDA Pro, il risultato del patch diffing mostra le seguenti modifiche:

Tre candidati emergono:

  • NtfsRenameToPrivateDir
  • TxfAllocateAndStoreNameForTxLogging
  • TxfAllocateFullFilePathForChangeNotify

Secondo il Security Update Guide di Microsoft di dicembre, quattro CVE sono correlati a 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, sembra essere correlato a NtSetShortNameInfo.

NtfsRenameToPrivateDir, TxfAllocateAndStoreNameForTxLogging e TxfAllocateFullFilePathForChangeNotify hanno tutti e tre lo stesso nuovo controllo di lunghezza, e sembrano essere correlati a CVE-2021-43229, CVE-2021-43230 e CVE-2021-43231, non necessariamente in quest'ordine. Al momento, non è possibile sapere quale corrisponda a quale, Microsoft è un po' avara di queste informazioni.

Analisi

In tutti e tre i CVE si verifica un integer overflow durante il calcolo della dimensione di allocazione (lunghezza del percorso della directory + lunghezza del nome file), portando a un overflow del buffer basato su pool con i successivi due memmove del percorso della directory e del nome file.

Seconda parte - Il percorso

Primo tentativo: NtfsRenameToPrivateDir

Il percorso verso NtfsRenameToPrivateDir è mostrato di seguito:

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

Innanzitutto, per chiamare NtfsCommonSetInformation, basta chiamare NtSetInformationFile. Quindi, per passare attraverso NtfsSetLinkInfo e NtfsSetRenameInfo, usare rispettivamente FileLinkInformationEx e FileRenameInformationEx come classe di informazioni file in NtSetInformationFile.

Per raggiungere NtfsRemoveSupersededTarget tramite NtfsSetRenameInfo, è necessario impostare i flag FILE_RENAME_REPLACE_IF_EXISTS e FILE_RENAME_POSIX_SEMANTICS. Rinominare un file con il nome di uno già esistente per accedere a NtfsRemoveSupersededTarget. Per NtfsRenameToPrivateDir, è un po' più complesso, perché il file sostituito deve essere aperto da qualsiasi processo.

Sfortunatamente viene eseguito un controllo di lunghezza prima della chiamata a NtfsRemoveSupersededTarget.

Il metodo con NtfsSetLinkInfo è simile a NtfsSetRenameInfo, solo i nomi dei flag differiscono, i loro significati rimangono gli stessi. Ma così come per NtfsSetRenameInfo, viene eseguito un altro controllo prima della chiamata a NtfsRemoveSupersededTarget.

Secondo tentativo: TxfAllocateAndStoreNameForTxLogging

Il percorso verso TxfAllocateAndStoreNameForTxLogging è mostrato di seguito:

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

Innanzitutto, per chiamare NtfsCommonCreate, basta chiamare CreateFile.

La funzione TxfNewFileCreate è prefissata con Txf che sta per "Transactional NTFS" e viene chiamata quando viene creato un file transazionale. TxfAllocateAndStoreNameForTxfLogging viene chiamata durante il processo per memorizzare il percorso del file transazionale.

Sono necessarie solo due chiamate:

  • CreateTransaction
  • CreateFileTransacted

Terza parte - PoC

Il codice vulnerabile di TxfAllocateAndStoreNameForTxLogging è mostrato di seguito:

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
...

Per attivare l'overflow, è necessario creare un file con una lunghezza eccessiva, superiore a 0xFFFF byte (32767 caratteri).

Un problema che emerge è che un nome di file o directory non può essere maggiore di 256 caratteri - incluso il carattere NULL. Per risolvere questo problema, sarà necessario l'uso di sottocartelle profonde. Stranamente, non è così facile; anche con le sottocartelle create con successo, il file sottostante non può essere creato, certamente a causa di alcuni controlli eseguiti in precedenza.

Usando la barra di explorer è possibile notare il formato usato per mostrare il percorso della directory. Non è quello che mi aspettavo; invece di usare un percorso "classico", explorer usa il vecchio formato DOS, il formato abbreviato 8.3.

Mantenendo la creazione delle sottocartelle come prima e usando il nome breve per le sottodirectory durante la creazione del file, si ottiene il risultato.

È importante notare che 16 byte verranno aggiunti alla dimensione dell'overflow, che è la dimensione della UNICODE_STRING che rappresenterà il percorso finale. Questo perché la memoria richiesta conterrà la UNICODE_STRING seguita dal buffer di questa UNICODE_STRING.

Metodo:

  • Crea sottodirectory con nome lungo
  • Crea un file con un nome lungo e nomi brevi per il percorso della directory

Condizioni attuali:

  • L'overflow sovrascrive l'equivalente di 64KB
  • La dimensione della memoria allocata è fino a 0x20C byte
  • La memoria allocata è in paged pool

Quarta parte - Spunti

Un interessante write-up di Synacktiv al SSTIC 2020 potrebbe essere un'idea da approfondire, prendendo di mira VS Heap.

Il CVE-2020-17087, un caso simile di sfruttamento, è stato presentato da PixiePoint Security utilizzando la tecnica menzionata sopra.

Scarica lo strumento
SimiConfFunzioneInformazioni
NOK0.980.99NtfsCommonSetInformation$fin$0Modifiche ai salti
0.970.99NtSetShortNameInfo
0.960.99NtfsUpdateSecurity
NOK0.910.94NtfsRenameToPrivateDir$fin$1Modifiche ai salti
0.890.98NtfsInitializeFileInDirectory
OK0.880.95TxfAllocateAndStoreNameForTxLoggingControllo lunghezza
OK0.870.93NtfsRenameToPrivateDirControllo lunghezza
OK0.810.95TxfAllocateFullFilePathForChangeNotifyControllo lunghezza
0.760.94NtfsCommonSetInformation