Skip to content
KitploitKITPLOIT
OutilsExploitsBlog
Log in
Soumettre
OutilsExploitsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

FluxContactConfidentialité© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
SmmExploit — Le rapport et l'exploit de CVE-2021-26943, la vulnérabilité locale d'élévation de privilèges du noyau vers SMM dans le BIOS version 303 de l'ASUS UX360CA. | Kitploit
Outils/GitHubGitHub/tandasat/smmexploit
Escalade de PrivilègesAnalyse des VulnérabilitésExploitationSécurité MatérielleArticles et RechercheApprentissage et ÉducationAnalyse de MicrologicielExploitation de Binaires
GitHubtandasat/smmexploit

SmmExploit

Le rapport et l'exploit de CVE-2021-26943, la vulnérabilité locale d'élévation de privilèges du noyau vers SMM dans le BIOS version 303 de l'ASUS UX360CA.

1482321il y a 5 ansVérifié par Kitploit

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager
Voir le dépôt
Site web

SmmExploit

Il s'agit d'un rapport et d'un exploit de CVE-2021-26943, la vulnérabilité d'élévation de privilèges locale du noyau vers SMM dans la version 303 du BIOS ASUS UX360CA. Le problème a été corrigé dans la version 304.

Description du problème

Résumé

Le BIOS UX360CA version 303 contient 3 modules vulnérables qui permettent à un attaquant disposant du privilège ring0 d'écraser une mémoire physique presque arbitraire, y compris la SMRAM, et d'exécuter du code arbitraire en mode SMM.

Ces modules peuvent être identifiés comme suit :

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

Ces modules proviennent d'AMI (fournisseur de BIOS) et peuvent être présents dans les BIOS d'autres OEM.

Vulnérabilités

Les modules vulnérables et les SMI correspondants sont : UsbRt (0x31), SdioSmm (0x40) et NvmeSmm (0x42). Tous ces gestionnaires SMI lisent l'adresse mémoire physique 0x40E pour obtenir une adresse sur laquelle travailler et écrivent un octet à cette adresse en cas d'erreur, même s'il s'agit de la SMRAM.

Par exemple, le gestionnaire SMI de SdioSmm se présente comme suit :

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;
}

Ce problème semble identique à INTEL-SA-00057, qui est très bien décrit dans Aptiocalypsis. La version 303 du BIOS pour UX360CA n'inclut toutefois pas de correctifs pour ces derniers.

Exploitation

Cela permet à un attaquant ayant accès en écriture à la mémoire physique et à l'instruction OUT (c'est-à-dire les privilèges ring0) d'écraser le contenu de la SMRAM avec les étapes suivantes :

  1. Assurez-vous que l'adresse physique 0x40e est à zéro (ce qui est très probablement déjà le cas)
  2. Écrivez une adresse de la SMRAM, par exemple 0x88400000, à l'adresse physique 0x104
  3. Déclenchez le SMI 0x40
  4. 0x88400000+2 est mis à jour avec 0x7.

Cela peut être utilisé pour exécuter du code arbitraire en mode SMM comme suit :

  1. Trouvez l'adresse de la System Management Service Table (SMST) dans la SMRAM, avec les étapes ci-dessous :
    1. Obtenez une plage d'adresses physiques pour le code d'exécution UEFI à partir du contenu de la valeur .Raw dans HKLM\HARDWARE\RESOURCEMAP\System Resources\Loader Reserved
    2. Trouvez l'adresse de SMM_CORE_PRIVATE_DATA en recherchant la signature 'smmc' dans la plage d'adresses.
    3. SMM_CORE_PRIVATE_DATA contient le pointeur vers la SMST à l'offset 30h
  2. Écrasez le pointeur vers la fonction SmmLocateProtocol à l'offset d0h de la SMST en utilisant la primitive d'écriture ci-dessus. La valeur est mise à jour à 0x07070707.
  3. Écrivez le shellcode à l'adresse mémoire physique 0x07070707
  4. Déclenchez un autre SMI qui appelle Smst->SmmLocateProtocol, comme le SMI 0xdf. Le shellcode à 0x07070707 est exécuté en mode SMM.

L'exécution de code arbitraire en mode SMM permettrait à un attaquant de contourner les mesures de sécurité du noyau et de l'hyperviseur telles que HVCI, comme démontré dans un autre rapport de vulnérabilité SMM, et d'établir une persistance en mettant à jour le contenu de la flash SPI (BIOS).

Preuve de concept (PoC)

Le projet de démonstration joint démontre une exploitation réussie et extrait le contenu des MSR uniquement accessibles en mode SMM ainsi que l'adresse physique de l'EPTP. Il modifie également le code de gestion des VM-exit CPUID de l'hyperviseur Hyper-V pour renvoyer une chaîne de nom de fournisseur d'hyperviseur modifiée.

La PoC a été testée sur Windows build 18362.1256, avec et sans HVCI activé.

Un enregistrement de l'exploitation réussie est disponible sur YouTube. Demo.png

Instructions de test

  1. Ouvrez demo.sln dans Visual Studio 2019
  2. Compilez la solution en configuration Debug ou Release
  3. Copiez le demo.sys compilé sur le système cible (par exemple, C:\users\user\desktop\demo.sys)

Sur le système cible,

  1. Désactivez le Secure Boot dans le BIOS, puis redémarrez
  2. Activez le mode de signature de test, puis redémarrez
    > bcdedit /set testsigning on
    
  3. Créez le service pour charger demo.sys
    > sc create demo type= kernel binPath= C:\users\user\desktop\demo.sys
    
  4. Démarrez DebugView et activez « Capture Kernel » dans le menu « Capture ».
  5. Démarrez la démo
    > sc start demo
    
  6. En cas de succès, DebugView affichera les valeurs des MSR liés au 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. Si Hyper-V est en cours d'exécution et que la modification du code a réussi, CPUID 0x4000000 renverra la chaîne de fournisseur d'hyperviseur modifiée 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!
    

Résolution

Le correctif consiste à éviter totalement d'utiliser le contenu contrôlé par l'utilisateur lorsqu'il pointe à l'intérieur de la SMRAM, comme indiqué ci-dessous.

{
  // ...
  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;
}

Considérations

Absence de protection pour l'hyperviseur

Le correctif suit parfaitement les meilleures pratiques actuelles de l'industrie et empêche l'attaque par député confus qui conduit à la corruption de la SMRAM.

Télécharger l’outil