
ThrottleStop.sys – beliebiger physischer Speicher-Lese-/Schreibzugriff
Vollständiger Proof-of-Concept für den TechPowerUp-ThrottleStop.sys-Treiber (CVE-2025-7771).
Ein signierter, weiterhin ladbarer Kernel-Treiber legt über zwei IOCTLs unvalidierte physische Speicher-Lese- und -Schreibzugriffe offen. Dieses Repository verwandelt diese Primitive in eine funktionierende lokale Privilege-Escalation von Administrator zu SYSTEM und dokumentiert eine Besonderheit bei der Benennung von Geräten, 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 bloße Demonstration der Primitive.
| Feld | Wert |
|---|---|
| SHA256 | 16F83F056177C4EC24C7E99D01CA9D9D6713BD0497EEEDB777A3FFEFA99C97F0 |
| SHA1 | 82ED942A52CDCF120A8919730E00BA37619661A3 |
| MD5 | 6BC8E3505D9F51368DDF323ACB6ABC49 |
| Version | 3.0.0.0 ("Low-Level Driver", 2004-2020) |
| Unterzeichner | TechPowerUp LLC, DigiCert EV Code Signing |
| Zertifikats-Fingerabdruck | 524EDA9C819321C66E22C7BABEB23DAEAFFB2182 |
| Zertifikatsgültigkeit | 2019-08-10 bis 2022-06-15 |
Das Zertifikat ist 2022 abgelaufen, aber die Signatur trägt einen vertrauenswürdigen Zeitstempel einer Gegensignatur, sodass Windows es weiterhin lädt. Eine Sperrung hilft nur, wenn ihr Datum vor dem Signierungszeitpunkt liegt, was bei alten Treibern wie diesem selten der Fall ist.
Die Versionsressource enthält weder CompanyName, OriginalFilename noch InternalName, daher kann die Datei anhand ihrer eigenen Metadaten keinem Hersteller zugeordnet werden.
Zwei IOCTLs lesen und schreiben physischen Speicher ohne Grenz- oder Adressvalidierung:
| IOCTL | Operation |
|---|---|
0x80006498 | Physisches Lesen |
0x8000649C | Physisches Schreiben |
Beide verwenden METHOD_BUFFERED, es gibt also keine Dereferenzierung von Benutzerzeigern; der Fehler 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 Handle, das nur mit Lesezugriff geöffnet wurde, kann weiterhin physische Schreibzugriffe auslösen. Die deklarierte Zugriffsmaske entspricht also nicht dem, was der Handler tatsächlich tut.
Das Öffnen des Geräts erfordert Administratorrechte, stellt also für sich genommen keine Überwindung einer Privilegiengrenze dar. Was es einem Angreifer, der bereits Admin ist, verschafft, ist ein beliebiger Kernel-Lese-/Schreibzugriff aus dem Benutzermodus. Damit werden die Schutzmechanismen ausgehebelt, die oberhalb von Admin greifen sollen: HVCI-Codeintegrität, PPL und der Selbstschutz von EDR/AV. Klassischer Bring-your-own-Vulnerable-Driver.
Als konkrete Demonstration nutzt der PoC die Lese-/Schreib-Primitive, 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, Hoch).
Alles läuft aus dem Benutzermodus gegen die physischen Lese-/Schreib-IOCTLs des Treibers. Es gibt weder Page-Table-Walking noch CR3; beide Prozesse werden durch direktes Scannen des physischen Speichers gefunden:
ImageFileName System und dessen UniqueProcessId 4 ist. Der Scan ist auf die belegten RAM-Bereiche begrenzt, die aus dem Registrierungsschlüssel HARDWARE\RESOURCEMAP\...\Physical Memory der Firmware gelesen werden, nicht auf ein geratenes Fenster. So werden MMIO-Lücken nie berührt und nichts oberhalb des installierten RAMs übersehen.Token-Feld (EPROC_TOKEN) aus dem gefundenen EPROCESS lesen.Token-Slot schreiben. Das Token ist ein _EX_FAST_REF, daher werden die niedrigen Referenzzähl-Bits standardmäßig maskiert (--mask wählt das Verhalten).cmd.exe starten; whoami liefert .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 findet unseren eigenen Prozess, indem er dessen ImageFileName im physischen Speicher abgleicht; dieses Feld ist auf 15 Zeichen begrenzt, wobei der Scan die ersten 8 abgleicht. Halten Sie den kompilierten Namen kurz und markant; wenn Sie die Binärdatei umbenennen, bleiben Sie innerhalb dieses Limits, sonst findet der Selbstscan 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. Wenn die Binärdatei unter dem Dienst TRIXX registriert wird, ergibt sich \\.\TRIXX, egal wie die Datei auf der Festplatte heißt.
Daher lässt sich jede Erkennung, die auf \Device\ThrottleStop oder ThrottleStop.sys basiert, trivial umgehen. Die Erkennung muss auf dem Dateihash oder dem Signaturzertifikat beruhen:
SHA256: 16F83F056177C4EC24C7E99D01CA9D9D6713BD0497EEEDB777A3FFEFA99C97F0
Thumbprint: 524EDA9C819321C66E22C7BABEB23DAEAFFB2182
Subject: CN=TechPowerUp LLC, O=TechPowerUp LLC, L=Spokane, S=Washington, C=US
Die Liste DEVICE_NAMES im Quellcode dient nur als Sonde für bekannte Produktinstallationen. Übergeben Sie einen Gerätenamen als Argument, um einen Dienst anzusteuern, den Sie selbst registriert haben.
| CVE | Treiber |
|---|---|
| CVE-2019-7245 | GPU-Z.sys |
| CVE-2025-5324 | GPU-Z.sys |
| CVE-2025-7771 | ThrottleStop.sys (dieses Repository) |
Die Binärdatei wird hier nicht mitgeliefert. Überprüfen Sie jede Kopie anhand der obigen SHA256. Das Exemplar ist in LOLDrivers katalogisiert.
cl /nologo /EHsc /W4 /O2 src\ThrottleStop.cpp /Fe:myLittleLpe.exe /link advapi32.lib
Nur für den Laboreinsatz. In einer isolierten VM mit einem Snapshot ausführen, auf den zurückgesetzt werden kann.
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 akzeptiert keine Argumente. Sie gibt die physische Speicherkarte aus, sucht nach dem SYSTEM- und dem lokalen EPROCESS, tauscht das Token und startet cmd.exe mit den Rechten von NT AUTHORITY\SYSTEM.

Andere öffentliche Arbeiten zu demselben Treiber, zum Vergleich:
Veröffentlicht für defensive Forschung und Erkennungsentwicklung. 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 für die Sie nicht zum Testen autorisiert sind.
NT AUTHORITY\SYSTEM