Skip to content
KitploitKITPLOIT
StrumentiExploitsBlog
Log in
Invia
StrumentiExploitsBlog
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.

FeedContattoPrivacy© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
SmmExploit — Il report e l'exploit di CVE-2021-26943, la vulnerabilità di escalation locale dei privilegi da kernel a SMM nel BIOS ASUS UX360CA versione 303. | Kitploit
Strumenti/GitHubGitHub/tandasat/smmexploit
Escalation di PrivilegiAnalisi delle VulnerabilitàExploitSicurezza HardwarePaper e RicercaApprendimento e FormazioneAnalisi del FirmwareBinary Exploitation
GitHubtandasat/smmexploit

SmmExploit

Il report e l'exploit di CVE-2021-26943, la vulnerabilità di escalation locale dei privilegi da kernel a SMM nel BIOS ASUS UX360CA versione 303.

14823215 anni faRevisionato da Kitploit

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
Vedi Repository
Sito web

SmmExploit

Questa è una relazione e un exploit di CVE-2021-26943, la vulnerabilità di escalation dei privilegi locali da kernel a SMM nel BIOS versione 303 di ASUS UX360CA. Il problema è stato corretto nella versione 304.

Descrizione del problema

Sommario

Il BIOS versione 303 di UX360CA ha 3 moduli vulnerabili che consentono a un attaccante con privilegi ring0 di sovrascrivere memoria fisica quasi arbitraria, inclusa la SMRAM, e di eseguire codice arbitrario in SMM.

Questi moduli possono essere identificati come segue:

NomeGUIDSHA256
UsbRt04EAAAA1-29A1-11D7-8838-00500473D4EB8A3DEAFD0A688DD4360A65C98E434180152EB43EB2C913C663F13D5709776781
SdioSmmEA343100-1A37-4239-A3CB-B92240B935CF4578E1E147D846BB925DF881A2A0A3C3F1E6CD2AE033A8B0F769E5EB42783A0A
NvmeSmmE5E2C9D9-5BF5-497E-8860-94F81A09ADE0A9C762B13FC9C4156603D674C6DAEBC4369520D95ACB1D0FA976078D6F7F1003

Questi moduli sono di AMI (fornitore del BIOS) e potrebbero essere presenti nei BIOS di altri OEM.

Vulnerabilità

I moduli vulnerabili e i rispettivi SMI sono: UsbRt (0x31), SdioSmm (0x40) e NvmeSmm (0x42). Tutti questi gestori SMI leggono l'indirizzo di memoria fisica 0x40E per ottenere un indirizzo su cui lavorare e scrivono un byte all'indirizzo in caso di errore, anche se si tratta di SMRAM.

Ad esempio, il gestore SMI di SdioSmm si presenta come segue:

EFI_STATUS
EFIAPI
SdioSmm_SwSmi_40h(
  EFI_HANDLE  DispatchHandle,
  CONST VOID  *Context,
  VOID        *CommBuffer,
  UINTN       *CommBufferSize
  )
{
  // ...
  struct_v0 *userControlled = *(0x10 * MEMORY[0x40E] + 0x104);
  if ( EFI_ERROR(ValidateBufferIsOutsideSmram(userControlled, sizeof(struct_v0)))
    || userControlled->Offset0_FunctionCode >= 4 )
  {
    userControlled->Offset2 = 7;
  }
  else
  {
    // ...
  }
  return EFI_SUCCESS;
}

Questo problema sembra essere identico a INTEL-SA-00057, descritto egregiamente come Aptiocalypsis. Tuttavia, la versione 303 del BIOS per UX360CA non include le correzioni per questi problemi.

Sfruttamento

Ciò consente a un attaccante con accesso in scrittura alla memoria fisica e all'istruzione OUT (cioè i privilegi ring0) di sovrascrivere il contenuto della SMRAM con i seguenti passaggi:

  1. Assicurarsi che l'indirizzo fisico 0x40e sia zero (cosa molto probabile)
  2. Scrivere un indirizzo della SMRAM, ad esempio 0x88400000, all'indirizzo fisico 0x104
  3. Emettere l'SMI 0x40
  4. 0x88400000+2 viene aggiornato con 0x7.

Questo può essere usato per ottenere l'esecuzione di codice arbitrario in SMM come segue:

  1. Trovare l'indirizzo della System Management Service Table (SMST) nella SMRAM, con i seguenti passaggi:
    1. Ottenere un intervallo di indirizzi fisici per il codice runtime UEFI dal contenuto del valore .Raw in HKLM\HARDWARE\RESOURCEMAP\System Resources\Loader Reserved
    2. Trovare l'indirizzo di SMM_CORE_PRIVATE_DATA scansionando la firma 'smmc' nell'intervallo di indirizzi.
    3. SMM_CORE_PRIVATE_DATA contiene il puntatore alla SMST all'offset 30h
  2. Sovrascrivere il puntatore alla funzione SmmLocateProtocol all'offset d0h della SMST usando la primitiva di scrittura sopra descritta. Il valore viene aggiornato a 0x07070707.
  3. Scrivere lo shellcode nella memoria fisica 0x07070707
  4. Attivare un altro SMI che richiami Smst->SmmLocateProtocol, come l'SMI 0xdf. Lo shellcode a 0x07070707 viene eseguito in SMM.

L'esecuzione di codice arbitrario in SMM consentirebbe a un attaccante di bypassare le misure di sicurezza del kernel e dell'hypervisor come l'HVCI, come dimostrato in un'altra relazione su una vulnerabilità SMM, e di stabilire una persistenza aggiornando il contenuto della flash SPI (BIOS).

Proof of Concept (PoC)

Il progetto demo allegato dimostra lo sfruttamento riuscito e scarica il contenuto dei MSR accessibili solo in SMM e l'indirizzo fisico dell'EPTP. Modifica inoltre il codice di gestione della VM-exit CPUID dell'hypervisor Hyper-V per restituire una stringa del fornitore dell'hypervisor alterata.

Il PoC è testato su Windows build 18362.1256, con e senza HVCI abilitato.

La registrazione dello sfruttamento riuscito è disponibile su YouTube. Demo.png

Istruzioni di test

  1. Aprire demo.sln in Visual Studio 2019
  2. Compilare la soluzione per la build Debug o Release
  3. Copiare il demo.sys compilato nel sistema di destinazione (ad esempio, C:\users\user\desktop\demo.sys)

Sul sistema di destinazione,

  1. Disabilitare il secure boot dal BIOS e riavviare
  2. Abilitare la modalità test signing e riavviare
    > bcdedit /set testsigning on
    
  3. Creare il servizio per caricare demo.sys
    > sc create demo type= kernel binPath= C:\users\user\desktop\demo.sys
    
  4. Avviare DebugView e abilitare "Capture Kernel" dal menu "Capture".
  5. Avviare la demo
    > sc start demo
    
  6. In caso di successo, DebugView mostrerà i valori dei MSR relativi alla SMM.
    [+] ReportSmramRange: TSEG implied SMRAM: 0x88400000 - 0x88800000
    [-] ReportSmramRange: Exception occurred while accessing SMRR MSR : c0000096
    [+] FindSystemManagementServiceTable: SMM core found at 0x87f1b390 in RT Code
    [+] FindSystemManagementServiceTable: SMST found at 0x887fa710 in SMRAM
    [+] ExploitSmm: Patched SMST->SmmLocateProtocol in SMRAM
    [+] ExploitSmm: Placed SMM shell code
    [+] ExploitSmm: Triggered SMM exploit
    [+] DumpSmmExploitOuput: IA32_SMBASE             = 0x887cd000
    [+] DumpSmmExploitOuput: MSR_SMM_FEATURE_CONTROL = 0x1
    [+] DumpSmmExploitOuput: MSR_SMM_MCA_CAP         = 0xc00000000000000
    [+] DumpSmmExploitOuput: EPT pointer             = 0x10a72001e
    [+] DumpSmmExploitOuput: Patched Hv address      = 0x1004382f0
    [+] ExploitSmm: Successfully executed shell code in SMM. Failing DriverEntry to unload itself
    DriverEntry failed 0xc0000120 for driver \REGISTRY\MACHINE\SYSTEM\ControlSet001\Services\demo
    
  7. Se Hyper-V è in esecuzione e la modifica del codice è riuscita, CPUID 0x4000000 restituirà la stringa del fornitore dell'hypervisor modificata Hv Tampered!.
    > CheckHvVendor.exe
    Executing CPUID(0x40000000) on CPU 0
    Result: Hv Tampered!
    Executing CPUID(0x40000000) on CPU 1
    Result: Hv Tampered!
    Executing CPUID(0x40000000) on CPU 2
    Result: Hv Tampered!
    Executing CPUID(0x40000000) on CPU 3
    Result: Hv Tampered!
    

Risoluzione

La correzione consiste nell'evitare del tutto l'uso del contenuto controllato dall'utente quando punta all'interno della SMRAM, come mostrato di seguito.

{
  // ...
  struct_v0 *userControlled = *(0x10 * MEMORY[0x40E] + 0x104);
  if (!EFI_ERROR(ValidateBufferIsOutsideSmram(userControlled, sizeof(struct_v0))))
  {
    if (userControlled->Offset0_FunctionCode < 7 )
    {
      // ...
    }
    else
    {
      userControlled->Offset2 = 7;
    }
  }
  return EFI_SUCCESS;
}

Considerazioni

Protezione mancante per l'hypervisor

La correzione segue perfettamente le attuali migliori pratiche del settore e previene l'attacco del deputato confuso che porta alla corruzione della SMRAM.

Scarica lo strumento