
Vollständige Exploit-Kette für CVE-2025-7771 in ThrottleStop.sys, die unvalidierte physische Speicher-R/W-IOCTLs missbraucht, um unter Windows von Administrator zu SYSTEM zu eskalieren.
Vollständiger Proof-of-Concept für den TechPowerUp-Treiber ThrottleStop.sys (CVE-2025-7771).
Ein signierter, weiterhin ladbarer Kernel-Treiber stellt unvalidiertes Lesen und Schreiben
physischen Speichers über zwei IOCTLs bereit. Dieses Repo verwandelt dieses Primitiv in eine
funktionierende lokale Privilegieneskalation von Administrator zu SYSTEM und dokumentiert eine
Gerätenamens-Eigenheit, die die meisten pfad- und dateinamenbasierten Erkennungen aushebelt.
Ein PoC für dieselben IOCTLs existierte bereits (siehe Credits). Dies ist eine unabhängige, vollständige Exploit-Kette und keine Primitiv-Demonstration.
| Feld | Wert |
|---|
| SHA256 | 16F83F056177C4EC24C7E99D01CA9D9D6713BD0497EEEDB777A3FFEFA99C97F0 |
| SHA1 | 82ED942A52CDCF120A8919730E00BA37619661A3 |
| MD5 | 6BC8E3505D9F51368DDF323ACB6ABC49 |
| Version | 3.0.0.0 ("Low-Level Driver", 2004-2020) |
| Signierer | TechPowerUp LLC, DigiCert EV Code Signing |
| Zertifikat-Thumbprint | 524EDA9C819321C66E22C7BABEB23DAEAFFB2182 |
| Zertifikat-Gültigkeit | 2019-08-10 bis 2022-06-15 |
Das Zertifikat ist 2022 abgelaufen, aber die Signatur trägt einen vertrauenswürdigen Gegenzeichnungs-Zeitstempel, sodass Windows sie weiterhin lädt. Sperrung (Revocation) hilft nur, wenn ihr Datum vor dem Signierzeitpunkt liegt, was bei alten Treibern wie diesem selten der Fall ist.
Die Versionsressource enthält kein CompanyName, OriginalFilename oder InternalName, sodass
die Datei anhand ihrer eigenen Metadaten keinem Hersteller zugeordnet werden kann.
Zwei IOCTLs lesen und schreiben physischen Speicher ohne Grenzen- oder Adressvalidierung:
| IOCTL | Operation |
|---|---|
0x80006498 | Physisches Lesen |
0x8000649C | Physisches Schreiben |
Beide sind METHOD_BUFFERED, sodass kein Dereferenzieren von Benutzerzeigern stattfindet; der
Defekt ist die fehlende Validierung der vom Aufrufer gelieferten physischen Adresse, nicht ein
ungeprüfter Zeiger.
Erwähnenswert: Der Schreib-Handler 0x8000649C ist als FILE_READ_ACCESS deklariert. Ein
schreibgeschützt geöffnetes Handle kann dennoch physische Schreibvorgänge auslösen, sodass die
deklarierte Zugriffsmaske nicht dem entspricht, was der Handler tatsächlich tut.
Das Öffnen des Geräts erfordert Administratorrechte, sodass dies für sich genommen keine Überschreitung einer Privilegiengrenze ist. Was es einem Angreifer gibt, der bereits Admin ist, ist beliebiges Kernel-Lesen/Schreiben aus dem Benutzermodus, was die Schutzmaßnahmen aushebelt, die oberhalb von Admin greifen sollen: HVCI-Codeintegrität, PPL und EDR/AV-Selbstschutz. Klassisches Bring-your-own-vulnerable-driver.
Als konkrete Demonstration nutzt der PoC das Lese/Schreib-Primitiv, um das SYSTEM-Token zu stehlen und eine SYSTEM-Shell zu starten.
CVSS 4.0: AV:L/AC:H/AT:N/PR:H/UI:N/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H (8.7, High).
Alles läuft aus dem Benutzermodus gegen die physischen Lese/Schreib-IOCTLs des Treibers. Es gibt kein Page-Table-Walking und kein CR3 ist beteiligt; beide Prozesse werden durch direktes Scannen des physischen Speichers lokalisiert:
ImageFileName System und dessen UniqueProcessId 4 ist. Der Scan ist auf die belegten
RAM-Bereiche beschränkt, die aus dem Registry-Schlüssel
HARDWARE\RESOURCEMAP\...\Physical Memory der Firmware gelesen werden, nicht auf ein
geratenes Fenster, sodass MMIO-Lücken nie berührt werden und nichts oberhalb des installierten
RAMs übersehen wird.Token-Feld (EPROC_TOKEN) aus dem lokalisierten EPROCESS
lesen.Token-Slot schreiben.
Das Token ist ein _EX_FAST_REF, sodass die unteren Referenzzähl-Bits standardmäßig maskiert
werden (--mask wählt das Verhalten).cmd.exe starten; whoami gibt NT AUTHORITY\SYSTEM zurück.Die Offsets (EPROC_TOKEN, EPROC_PID, EPROC_IMG_NAME, usw.) gelten für einen bestimmten
Build und müssen gegen dt nt!_EPROCESS auf der Ziel-Windows-Version bestätigt werden.
Der Name der ausführbaren Datei ist wichtig. Schritt 3 lokalisiert unseren eigenen Prozess durch
Abgleich seines ImageFileName im physischen Speicher, und dieses Feld ist auf 15 Zeichen
begrenzt, wobei der Scan die ersten 8 abgleicht. Halten Sie den kompilierten Namen kurz und
unverwechselbar; wenn Sie die Binärdatei umbenennen, bleiben Sie innerhalb dieses Limits, sonst
findet der Selbst-Scan den Prozess nicht.
Der Treiber verwendet keinen festen Gerätenamen. Er leitet den Namen des Geräteobjekts vom
Dienstnamen ab, unter dem er registriert ist; der Dateiname auf der Festplatte ist irrelevant.
Wird die Binärdatei unter dem Dienst TRIXX registriert, ergibt sich \\.\TRIXX, egal wie die
Datei auf der Festplatte heißt.
Somit ist jede Erkennung, die auf \Device\ThrottleStop oder ThrottleStop.sys abzielt, trivial
umgehbar. Die Erkennung muss auf dem Datei-Hash oder dem Signaturzertifikat basieren:
SHA256: 16F83F056177C4EC24C7E99D01CA9D9D6713BD0497EEEDB777A3FFEFA99C97F0
Thumbprint: 524EDA9C819321C66E22C7BABEB23DAEAFFB2182
Subject: CN=TechPowerUp LLC, O=TechPowerUp LLC, L=Spokane, S=Washington, C=US
Die DEVICE_NAMES-Liste im Quellcode ist nur eine Sonde für bekannte Produktinstallationen.
Übergeben Sie einen Gerätenamen als Argument, um einen selbst registrierten Dienst anzusprechen.
| CVE | Treiber |
|---|---|
| CVE-2019-7245 | GPU-Z.sys |
| CVE-2025-5324 | GPU-Z.sys |
| CVE-2025-7771 | ThrottleStop.sys (dieses Repo) |
Die Binärdatei wird hier nicht mitgeliefert. Überprüfen Sie jede Kopie gegen den obigen SHA256. Das Sample ist in LOLDrivers katalogisiert.
cl /nologo /EHsc /W4 /O2 src\ThrottleStop.cpp /Fe:myLittleLpe.exe /link advapi32.lib
Nur für den Laboreinsatz. Führen Sie es in einer isolierten VM mit einem Snapshot zum Zurückrollen aus.
sc.exe create <name> type= kernel binPath= C:\path\to\ThrottleStop.sys
sc.exe start <name>
myLittleLpe.exe
sc.exe stop <name>
sc.exe delete <name>
Die Binärdatei nimmt keine Argumente entgegen. Sie gibt die physische Speicherkarte aus, scannt
nach dem SYSTEM- und dem lokalen EPROCESS, tauscht das Token aus und startet cmd.exe als
NT AUTHORITY\SYSTEM.

Andere öffentliche Arbeiten zum selben Treiber, zum Vergleich:
Veröffentlicht für Defensivforschung und Detection Engineering. Die Schwachstelle ist bereits als CVE-2025-7771 öffentlich. Alles hier wurde auf Systemen getestet, die dem Autor gehören. Führen Sie dies nicht gegen Systeme aus, die Ihnen nicht gehören oder die Sie nicht testen dürfen.