
Proof of Concept für CVE-2021-31166, eine remote ausgelöste Use-after-Free-Schwachstelle in HTTP.sys.
Dies ist ein Proof-of-Concept für CVE-2021-31166 („Schwachstelle bezüglich Remotecodeausführung im HTTP-Protokollstapel“), ein Use-After-Free-Dereferenzierungsfehler in http.sys, der von Microsoft im Mai 2021 gepatcht wurde. Laut diesem Tweet wurde die Schwachstelle von @_mxms und @fzzyhd1 entdeckt.

Der Fehler selbst tritt in http!UlpParseContentCoding auf, wo die Funktion eine lokale LIST_ENTRY hat und ein Element daran anhängt. Nach Abschluss verschiebt sie es in die Request-Struktur, setzt die lokale Liste jedoch nicht auf NULL. Das Problem dabei ist, dass ein Angreifer einen Codepfad auslösen kann, der alle Einträge der lokalen Liste freigibt, sodass sie in dem Request-Objekt als baumelnde Zeiger zurückbleiben.

Hier ist der Bugcheck:
KDTARGET: Refreshing KD connection
*** Fatal System Error: 0x00000139
(0x0000000000000003,0xFFFFF90EA867EE40,0xFFFFF90EA867ED98,0x0000000000000000)
Break instruction exception - code 80000003 (first chance)
A fatal system error has occurred.
Debugger entered on first try; Bugcheck callbacks have not been invoked.
A fatal system error has occurred.
nt!DbgBreakPointWithStatus:
fffff804`19410c50 cc int 3
kd> kp
# Child-SP RetAddr Call Site
00 fffff90e`a867e368 fffff804`19525382 nt!DbgBreakPointWithStatus
01 fffff90e`a867e370 fffff804`19524966 nt!KiBugCheckDebugBreak+0x12
02 fffff90e`a867e3d0 fffff804`19408eb7 nt!KeBugCheck2+0x946
03 fffff90e`a867eae0 fffff804`1941ad69 nt!KeBugCheckEx+0x107
04 fffff90e`a867eb20 fffff804`1941b190 nt!KiBugCheckDispatch+0x69
05 fffff90e`a867ec60 fffff804`19419523 nt!KiFastFailDispatch+0xd0
06 fffff90e`a867ee40 fffff804`1db3f677 nt!KiRaiseSecurityCheckFailure+0x323
07 fffff90e`a867efd0 fffff804`1daf6c05 HTTP!UlFreeUnknownCodingList+0x63
08 fffff90e`a867f000 fffff804`1dacd201 HTTP!UlpParseAcceptEncoding+0x299c5
09 fffff90e`a867f0f0 fffff804`1daa93d8 HTTP!UlAcceptEncodingHeaderHandler+0x51
0a fffff90e`a867f140 fffff804`1daa8ab7 HTTP!UlParseHeader+0x218
0b fffff90e`a867f240 fffff804`1da04c5f HTTP!UlParseHttp+0xac7
0c fffff90e`a867f3a0 fffff804`1da0490a HTTP!UlpParseNextRequest+0x1ff
0d fffff90e`a867f4a0 fffff804`1daa48c2 HTTP!UlpHandleRequest+0x1aa
0e fffff90e`a867f540 fffff804`1932ae85 HTTP!UlpThreadPoolWorker+0x112
0f fffff90e`a867f5d0 fffff804`19410408 nt!PspSystemThreadStartup+0x55
10 fffff90e`a867f620 00000000`00000000 nt!KiStartSystemThread+0x28
kd> !analyze -v
[...]
*******************************************************************************
* *
* Bugcheck-Analyse *
* *
*******************************************************************************
KERNEL_SECURITY_CHECK_FAILURE (139)
Eine Kernelkomponente hat eine kritische Datenstruktur beschädigt. Diese Beschädigung könnte es einem böswilligen Benutzer ermöglichen, die Kontrolle über diesen Computer zu erlangen.
Arguments:
Arg1: 0000000000000003, Eine LIST_ENTRY wurde beschädigt (d.h. doppelt entfernt).
Arg2: fffff90ea867ee40, Adresse des Trap-Frames für die Ausnahme, die den Bugcheck verursacht hat
Arg3: fffff90ea867ed98, Adresse des Ausnahmedatensatzes für die Ausnahme, die den BugCheck verursacht hat
Arg4: 0000000000000000, Reserviert
F: Ist Windows Remote Management (WinRM) betroffen?
Ja (Dank an @JimDinMN für die Bereitstellung seiner Experimente).
F: Ist Web Services on Devices (WSDAPI) betroffen?
Ja (Dank an @HenkPoley für die Bereitstellung seiner Ergebnisse).
F: Welche Windows-Versionen sind betroffen?
Laut Microsofts Dokumentation sind die folgenden Plattformen betroffen: