
CVE-2022-24494
CVE-2022-24494
Die Schwachstelle ist ein beliebiger Speicherlesevorgang. Die Ursache ist eine fehlende Validierung einer vom Benutzermodus bereitgestellten Speicheradresse, die in einer memcpy-Operation verwendet wird, um Daten von dieser Speicheradresse in den Pool-Speicher zu kopieren.
Die fehlende Prüfung befindet sich in der Adresse Afd!AfdTliIoControl+0x40B

Wie Sie im obigen Screenshot sehen können, wird die Benutzermodus-Speicheradresse von InputBuffer+0x20 einmalig ordnungsgemäß kopiert, wobei mit MmUserProbeAddress geprüft wird, ob sich die Speicheradresse im Adressraum des Benutzermodus befindet. Ein zweites Mal wird jedoch dieselbe Speicheradresse von InputBuffer+0x20 in das RAX-Register kopiert, diesmal jedoch ohne ordnungsgemäße Prüfung der Speicheradresse mittels MmUSerProbeAddress. Aufgrund dieser fehlenden Validierung ist es möglich, eine beliebige Kernel-Adresse bereitzustellen.
Diese Adresse wird später mit einer memcpy-Operation in eine Pool-Speicherzuweisung (Tag: AfdL) kopiert, wie Sie unten bei AfdTliIoControl+0x5AB sehen können:

Der folgende PoC zeigt die vom Benutzermodus bereitgestellte Kernel-Adresse (0xffffffdeadbeef01)

Der Treiber versucht, von dieser ungültigen Speicheradresse zu lesen, was zu einem BSOD führt:

Der an den dst-Zeiger in der memcpy-Operation kopierte Wert wird später an den Treiber tcpip.sys übergeben. Ich habe nicht untersucht, welche internen Objekte betroffen sind und ob es möglich ist, Speicher aus dem Benutzermodus durch Aufrufe von APIs zu lesen, die Daten aus diesen potenziellen internen Objekten abrufen könnten.
Microsoft veröffentlichte einige Monate später einen Forschungsartikel, der die potenziellen EoP-Auswirkungen dieser Art von Schwachstellen (beliebiger Speicherlesevorgang) thematisiert:
https://msrc-blog.microsoft.com/2022/03/22/exploring-a-new-class-of-kernel-exploit-primitive/