Skip to content
KitploitKITPLOIT
ToolsExploitsBlog
Log in
Einreichen
ToolsExploitsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

FeedsKontaktDatenschutz© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
SmmExploit — Der Bericht und der Exploit für CVE-2021-26943, die kernel-to-SMM lokale Privilegieneskalations-Schwachstelle in ASUS UX360CA BIOS Version 303. | Kitploit
Tools/GitHubGitHub/tandasat/smmexploit
Privilege EscalationSchwachstellenanalyseExploitationHardware-SicherheitPapers & ForschungLernen & BildungFirmware-AnalyseBinary-Exploitation
GitHubtandasat/smmexploit

SmmExploit

Der Bericht und der Exploit für CVE-2021-26943, die kernel-to-SMM lokale Privilegieneskalations-Schwachstelle in ASUS UX360CA BIOS Version 303.

Repository anzeigen
1482321vor 5 JahrenVon Kitploit geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen
Webseite

SmmExploit

Dies ist ein Bericht und ein Exploit für CVE-2021-26943, die Kernel-zu-SMM lokale Privilegienausweitung Schwachstelle im ASUS UX360CA BIOS Version 303. Das Problem wurde in der Version 304 behoben.

Issue Description

Zusammenfassung

Das UX360CA BIOS Version 303 enthält 3 anfällige Module, die einem Angreifer mit Ring0-Berechtigung erlauben, fast beliebigen physischen Speicher, einschließlich SMRAM, zu überschreiben und beliebigen Code im SMM auszuführen.

Diese Module können wie folgt identifiziert werden:

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

Diese Module stammen von AMI (BIOS-Hersteller) und können in anderen OEM-BIOSen vorhanden sein.

Schwachstellen

Die anfälligen Module und die zugehörigen SMIs sind: UsbRt (0x31), SdioSmm (0x40) und NvmeSmm (0x42). Alle diese SMI-Handler lesen die physische Speicheradresse 0x40E, um eine Adresse zu erhalten, mit der gearbeitet wird, und schreiben bei einem Fehler ein Byte an die Adresse, selbst wenn es sich um SMRAM handelt.

Zum Beispiel sieht der SMI-Handler von SdioSmm wie folgt aus:

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

Dieses Problem scheint identisch mit INTEL-SA-00057 zu sein, das ausführlich als Aptiocalypsis beschrieben wird. Die BIOS-Version 303 für UX360CA enthält jedoch keine Korrekturen dafür.

Ausnutzung

Dies ermöglicht einem Angreifer mit Schreibzugriff auf physischen Speicher und der OUT-Anweisung (d.h. Ring0-Berechtigungen), den Inhalt von SMRAM mit den folgenden Schritten zu überschreiben:

  1. Stellen Sie sicher, dass die physische Adresse 0x40e null ist (was höchstwahrscheinlich bereits der Fall ist)
  2. Schreiben Sie eine Adresse von SMRAM, z.B. 0x88400000, an die physische Adresse 0x104
  3. Lösen Sie das SMI 0x40 aus
  4. 0x88400000+2 wird mit 0x7 aktualisiert.

Dies kann verwendet werden, um eine beliebige Codeausführung im SMM zu erreichen, wie folgt:

  1. Finden Sie die Adresse der System Management Service Table (SMST) im SMRAM mit den folgenden Schritten:
    1. Ermitteln Sie einen physischen Adressbereich für den UEFI-Laufzeitcode aus dem Inhalt des .Raw-Werts in HKLM\HARDWARE\RESOURCEMAP\System Resources\Loader Reserved
    2. Finden Sie die Adresse von SMM_CORE_PRIVATE_DATA durch Scannen der 'smmc'-Signatur im Adressbereich.
    3. SMM_CORE_PRIVATE_DATA enthält den Zeiger auf die SMST an Offset 30h
  2. Überschreiben Sie den Zeiger auf die SmmLocateProtocol-Funktion an Offset d0h der SMST mit dem obigen Schreibprimitive. Der Wert wird auf 0x07070707 aktualisiert.
  3. Schreiben Sie Shellcode in den physischen Speicher 0x07070707
  4. Lösen Sie ein weiteres SMI aus, das Smst->SmmLocateProtocol aufruft, z.B. SMI 0xdf. Der Shellcode an 0x07070707 wird im SMM ausgeführt.

Die beliebige Codeausführung im SMM würde es einem Angreifer ermöglichen, Sicherheitsmaßnahmen des Kernels und Hypervisors wie HVCI zu umgehen, wie in einem anderen SMM-Sicherheitsbericht gezeigt, und Persistenz durch Aktualisierung des Inhalts des SPI-Flashs (BIOS) zu erreichen.

Proof of Concept (PoC)

Das beigefügte Demo-Projekt demonstriert die erfolgreiche Ausnutzung und gibt Inhalte von MSRs aus, die nur im SMM zugänglich sind, sowie die physische Adresse des EPTP. Es modifiziert auch den CPUID VM-Exit-Behandlungscode des Hyper-V-Hypervisors, um eine geänderte Hypervisor-Anbieterzeichenfolge zurückzugeben.

Der PoC wurde unter Windows Build 18362.1256 getestet, sowohl mit als auch ohne aktiviertem HVCI.

Eine Aufzeichnung der erfolgreichen Ausnutzung finden Sie auf YouTube. Demo.png

Testanweisungen

  1. Öffnen Sie die Datei demo.sln in Visual Studio 2019
  2. Erstellen Sie die Projektmappe für Debug- oder Release-Build
  3. Kopieren Sie die kompilierte demo.sys auf das Zielsystem (z.B. C:\users\user\desktop\demo.sys)

Auf dem Zielsystem:

  1. Deaktivieren Sie Secure Boot im BIOS und starten Sie neu
  2. Aktivieren Sie den Testsignierungsmodus und starten Sie neu
    > bcdedit /set testsigning on
    
  3. Erstellen Sie den Dienst zum Laden von demo.sys
    > sc create demo type= kernel binPath= C:\users\user\desktop\demo.sys
    
  4. Starten Sie DebugView und aktivieren Sie "Capture Kernel" im Menü "Capture".
  5. Starten Sie das Demo
    > sc start demo
    
  6. Bei Erfolg zeigt DebugView Werte von SMM-bezogenen MSRs an.
    [+] 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. Wenn Hyper-V läuft und die Codeänderung erfolgreich war, gibt CPUID 0x4000000 die geänderte Hypervisor-Anbieterzeichenfolge Hv Tampered! zurück.
    > 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!
    

Lösung

Die Behebung besteht darin, die benutzergesteuerten Inhalte überhaupt nicht zu verwenden, wenn sie auf SMRAM zeigen, wie unten gezeigt.

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

Überlegungen

Fehlender Schutz für Hypervisor

Die Behebung folgt perfekt der aktuellen Branchenbest Practice und verhindert den Confused-Deputy-Angriff, der zur SMRAM-Korruption führt.

Tool herunterladen