MSDT Schwachstelle „Follina“

Wie eine Bachelorarbeit praktischen Nutzen findet und was eine norditalienische Gemeinde damit zu tun hat

Exploits über Microsoft Office Dokumente laufen üblicherweise über inkludierte Macros, die vom User manuell aktiviert werden müssen. Erst kürzlich haben wir gesehen, dass es noch schlimmer geht und Microsoft Produkte hin und wieder für Zero Day Schwachstellen anfällig sind, die sämtliche Safeguards ignorieren bzw. gar keine vorhanden sind dafür. Deshalb folgt hier eine kurze Beschreibung der aktuellen MSDT (Microsoft Support Diagnostic Tool) Schwachstelle „Follina“ (CVE-2022-30190).

Eine grobe Timeline des ExpLoits

Am späten Nachmittag des 27.5. wurde von @nao_sec ein recht unscheinbares Malware Sample auf Twitter veröffentlicht:

Es dauerte ein bis zwei Tage bis die InfoSec Community die Tragweite dieses Tweets verstanden hat. Einen großen Beitrag hierzu hat Kevin Beaumont geleistet, der am Sonntag auf seinem Blog einen Beitrag mit Erklärung des Exploits veröffentlicht hat.

Er war es auch, der den inoffiziellen Namen des Exploits – „Follina“ geprägt hat. In dem decodierten Exploit Code aus der obenstehenden Abbildung wird die Datei „05-2022-0438.rar“ referenziert und 0438 ist die regionale Telefonvorwahl der Gemeinde Follina in Venetien.

Follina
Der Exploit

Damit der Exploit funktioniert, benötigt es zwei Komponenten:

  • Eine lokale Quelle, die auf eine externe HTML Datei referenziert
  • Eine HTML Datei auf einem Webserver mit dem MSDT Kommando

In den ersten Tagen war die gängige Meinung in der Community, dass diese Quelle nur ein MS Office Dokument sein kann. In dem Exploit jedoch nutzt ein Angreifer die Remote Template Funktion von MS Office, um ein extern gehostetes HTML Dokument nachzuladen. In diesem HTML ist dann das Kommando aus der obenstehenden Abbildung eingebaut. Hierfür ist es nicht notwendig Macros zu aktivieren, da die zugrunde liegende Funktion nicht auf Macros basiert.

Zum Testen unserer Detection haben wir einen öffentlich verfügbaren „Proof of Concept“ (PoC) abgeändert und „calc.exe“ ausführen lassen:

Cide

Nach ein wenig Recherche haben wir festgestellt, dass ein paar Teile dieses Kommandos theoretisch entbehrlich sind für einen erfolgreichen Exploit und basierend darauf haben wir dann die Detection „NTSUC-xxxx – MSDT command execution“ gebaut und am Dienstagvormittag bei unseren Defense Kunden ausgerollt und aktiviert.

Diese Detection hatte noch einen Filter inkludiert für MS Office Prozesse als Parent von MSDT.exe.

Bis Dienstagnachmittag gab es dann schon einige Security Researcher, die sich eingehender mit diesem Thema beschäftigt hatten und dann kamen nach und nach weitere beunruhigende Meldungen. Zuerst konnte die HTML Referenz auch in ein RTF Dokument eingebaut werden, das mit aktivierter File Preview im Windows Explorer nicht mal geöffnet, sondern nur markiert werden muss, um den Exploit zu starten. Dies ist zwar beunruhigend, aber wurde von unserer ersten Detection abgedeckt, weil im Hintergrund dennoch Word gestartet wird und dann MSDT ausführt.

Ein paar Stunden später fand @0xBacco auf Twitter heraus, dass MSDT Kommandos auch automatisch ausgeführt und interpretiert werden, wenn man in einer Powershell Konsole mittels „wget“ eine malicious HTML Datei herunterlädt. Dies hat den Filter auf MS Office Prozesse als Parent obsolet gemacht, und wir haben am Mittwochvormittag die aktuelle Version unserer Detection ausgerollt:

Code

Grob gesagt, suchen wir hier nach Prozesse mit dem Namen „msdt.exe“ und nach ein paar Formatierungskniffen filtern wir die gefundenen Ergebnisse nochmal auf die Argumente, die unbedingt notwendig sind, damit der Exploit funktioniert – „PCWDiagnostic“ und „IT_BrowseForFile“. Dies ist notwendig, weil es auch legitime Anwendungen von MSDT.exe gibt und wir False Positives vermeiden wollen.

Ist das die einzige Möglichkeit zur Erkennung?

MSDT.exe wird genutzt, um weiteren Code auszuführen bzw. Malware nachzuladen. Im Sample aus Abbildung 1 wird Powershell Code ausgeführt. Hier gibt es aber einen Umweg und Powershell wird nicht direkt von MSDT.exe, sondern von sdiagnhost.exe ausgeführt.

Nachdem bei derartigen Exploits großteils Powershell.exe oder cmd.exe genutzt wird, haben wir unsere bestehende Detection „NTSUC-xxxx – Unusual parent process for command interpreter“ angepasst. Diese sucht nach „ungewöhnlichen“ Parent Prozessen von Powershell, CMD, usw. Somit haben wir hier einfach sdiagnhost.exe zur Liste an überwachten Parent Prozessen hinzugefügt.

Mitigation

Derzeit gibt es noch keinen Patch von Microsoft, der die Schwachstelle behebt. Sie bieten aber eine offizielle Mitigation auf ihrer Website zu der Schwachstelle. Grob gesagt unterbindet man in der Registry das File Handling von MSDT URLs.

Alternativ kann man auch die „Troubleshooting Wizards“ über Registry/GPO deaktivieren, in dem man im Key „HKLM\SOFTWARE\Policies\Microsoft\Windows\ScriptedDiagnostics“ den Value „EnableDiagnostics“ auf „0“ setzt.

Woher kommt das ganze eigentlich?

Im August 2020 hat ein Student der TU Braunschweig seine Bachelorarbeit abgegeben, in der sehr ähnliche Kommandos als Remote Code Execution (RCE) dokumentiert sind.

Wie es dazu kam, ist natürlich ungewiss, aber anscheinend hat irgendwann im letzten Jahr ein APT diese RCE gefunden und ausgenutzt.

Code
Fazit

Das ist definitiv eine der kritischeren Schwachstellen in Microsoft Produkten. Sie betrifft leider nicht nur Microsoft Office Dokumente, sondern kann über andere Vektoren ausgenutzt werden.

NTS Defense bietet die folgenden beiden Use Cases zur Erkennung von Exploit Versuchen:

  • NTSUC-xxxx – Unusual parent process for command interpreter
  • NTSUC-xxxx – MSDT command execution

NTS Defense Kunden hatten vor der großflächigen Ausnutzung der Schwachstelle Möglichkeiten zur Erkennung. Sobald ein Patch von Microsoft zur Verfügung steht, empfehlen wir diesen zu installieren – sowohl auf Clients als auch auf Server.