Sploitus

Exploit for CVE-2021-1732

kitploit · 2026-08-26

Exploit Code

MARKDOWN21 lines
## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-BENEFICIALCODE-CVE-2021-1732
# CVE-2021-1732

  * Die Schwachstelle tritt in der Windows-Grafiktreiberfunktion `win32kfull!NtUserCreateWindowEx` auf, verursacht durch eine fehlende Synchronisation zwischen der Kernel-Rückruffunktion zur Speicherzuweisung im Benutzermodus und der Einstellung der `tagWND->flag`-Eigenschaft. Dadurch kann der `tagWND->offset`-Wert gefälscht werden, was zu einem Speicherzugriffsfehler (Out-of-Bounds) führt.
  * Wenn der Treiber `win32kfull.sys` `NtUserCreateWindowEx` zum Erstellen eines Fensters aufruft, wird `tagWND->cbWndExtra` (die Anzahl der zusätzlich für die Fensterinstanz zugewiesenen Speicherbytes) überprüft. Ist dieser Wert nicht null, wird die Funktion `win32kfull!xxxClientAllocWindowClassExtraBytes` aufgerufen, die in die Benutzerebene zurückruft (`user32.dll!__xxxClientAllocWindowClassExtraBytes`), um Speicher zuzuweisen. Die Adresse nach der Zuweisung wird mit der `NtCallbackReturn`-Funktion korrigiert (Stack-Anpassung) und dann an die Kernel-Ebene zurückgegeben, gespeichert und die Ausführung fortgesetzt. Wenn das `tagWND->flag` die Eigenschaft 0x800 enthält, wird dieser gespeicherte Wert zu einem Offset.
  * Ein Angreifer kann die Funktion `user32.dll!_xxxClientAllocWindowClassExtraBytes` hooken, `NtUserConsoleControl` aufrufen, um das `tagWND->flag` so zu ändern, dass es die Eigenschaft 0x800 enthält, und dann mit `NtCallbackReturn` einen benutzerdefinierten Wert an den Kernel `tagWND->offset` zurückgeben.


  1. Die Schwachstelle tritt in der Windows-Grafiktreiberfunktion `win32kfull!NtUserCreateWindowEx` auf.
  2. Wenn der Treiber `win32kfull.sys` `NtUserCreateWindowEx` zum Erstellen eines Fensters aufruft, wird `tagWND->cbWndExtra` überprüft. Ist dieser Wert nicht null, wird die Funktion `win32kfull!xxxClientAllocWindowClassExtraBytes` aufgerufen, die in die Benutzerebene (`user32.dll!__xxxClientAllocWindowClassExtraBytes`) zurückruft, um Speicher zu erstellen. Die Adresse nach der Zuweisung wird mit `NtCallbackReturn` korrigiert, dann an die Kernel-Ebene zurückgegeben, gespeichert und fortgesetzt. Wenn das `tagWND->flag` die Eigenschaft 0x800 enthält, wird für diesen Wert eine Offset-Adressierung verwendet.
  3. Verwenden Sie `NtUserConsoleControl`, um das Flag so zu ändern, dass es die Eigenschaft 0x800 enthält.



`17763:[[gpKernelHandleTable] + 0x18 * ((hwnd->cx * [gSharedInfo+0x10]) >> 5)]`

Es wird erwähnt, dass der Aufruf von `NtUserConsoleControl` die Werte `tagWND->offset` und `tagWND->flag` zurücksetzt, wobei das Flag die Eigenschaft 0x800 enthält. Wenn das Flag die Eigenschaft 0x800 enthält, wird eine Offset-Adressierung verwendet. Der Zweck des aktuellen Aufrufs von `NtUserConsoleControl` besteht darin, das `tagWND->flag` so zu ändern, dass es die Eigenschaft 0x800 enthält. Anschließend wird `NtCallbackReturn` aufgerufen, um einen bestimmten Wert zurückzugeben, mit dem Ziel, `tagWND->offset` erneut zu ändern, da `win32kfull!xxxClientAllocWindowClassExtraBytes` den Rückgabewert in `tagWND->offset` ablegt.

`+0x058 KernelCallbackTable : 0x00007ffb0e9d1070 Void`

`00007ffb`0e9d1448`