RPC ist in Windows der Mechanismus, über den Prozesse miteinander kommunizieren und Funktionen aufrufen, die in anderen Prozessen implementiert sind — unabhängig vom jeweiligen Ausführungskontext. Das System arbeitet nach einem Client-Server-Modell, bei dem der aufrufende Prozess der Client ist. Parallel erlaubt Windows Diensten, Nutzer oder andere Dienste zu imitieren, um vorübergehend in deren Sicherheitskontext zu agieren. Reguliert wird das über Impersonation-Stufen, die von Anonymous über Impersonate bis Delegate reichen. Das dafür nötige Privileg ist bestimmten Diensten standardmäßig zugewiesen, etwa solchen, die unter den Konten Local Service und Network Service laufen.
Entscheidend ist laut Kabibo, dass die RPC-Laufzeitumgebung die Legitimität von RPC-Servern nicht überprüft. Prozesse dürfen damit eigene RPC-Server bereitstellen, die dieselben Endpunkte offenlegen wie echte Dienste. Für einen Angriff muss ein Angreifer demnach einen privilegierten Dienst kompromittieren, einen gefälschten RPC-Server aufsetzen, auf bestimmte Anfragen lauschen und anschließend den anvisierten Dienst imitieren.
In einem Beispielszenario kompromittiert der Angreifer einen unter Network Service laufenden Dienst und stellt einen gefälschten RPC-Server bereit, der sich mit der Schnittstellen-UUID und dem Endpunktnamen TermService — dem standardmäßigen Remotedesktop-Dienst — ausgibt. Erzwingt der Angreifer dann eine Richtlinienaktualisierung, ruft der mit System-Rechten laufende Gruppenrichtliniendienst TermService per RPC auf. Da TermService standardmäßig deaktiviert ist, schlägt die Anfrage fehl — sie erreicht jedoch zugleich den RPC-Server des Angreifers, der nun den Sicherheitskontext des Gruppenrichtliniendienstes übernehmen und sich auf System-Rechte ausweiten kann.
Kabibo identifizierte vier weitere Angriffswege und weist darauf hin, dass die Schwäche eine große Angriffsfläche eröffnet, weil zahlreiche System-DLLs in Windows auf RPC setzen. „Anwendungen, die scheinbar harmlose APIs aufrufen, können unbeabsichtigt privilegierte RPC-Interaktionen auslösen. Unter bestimmten Bedingungen lassen sich diese Interaktionen missbrauchen, um ohne Wissen des Nutzers eine lokale Rechteausweitung zu erreichen", so der Forscher.
So kann ein gefälschter Server darauf warten, dass ein hoch privilegierter Nutzer Microsoft Edge startet, das beim Start einen RPC-Aufruf an TermService absetzt. Ein weiterer Weg nutzt die periodischen Hintergrundaufrufe des Diagnostic System Host Service (WDI) an TermService, die mit hoher Impersonation-Stufe alle fünf bis 15 Minuten und damit ohne Nutzerinteraktion erfolgen.
Zwei weitere Wege missbrauchen das Local-Service-Konto: Beim standardmäßig aktiven DHCP-Client-Dienst imitiert der gefälschte Server die legitime RPC-Schnittstelle und lauscht auf die Aufrufe, die ipconfig in administrativem Kontext absetzt — vorausgesetzt, der DHCP-Client ist deaktiviert. Beim ebenfalls standardmäßig aktiven Windows-Zeitdienst, mit dem w32tm.exe per RPC kommuniziert, ist das nicht nötig: Da das Programm eine nicht existierende, vom legitimen Dienst nicht bereitgestellte Named Pipe anspricht, genügt es laut Kabibo, dass der Angreifer genau diesen Endpunkt über seinen RPC-Server offenlegt.
Microsoft begründete die Einstufung als mittelschwer mit dem erforderlichen Impersonation-Privileg. SecurityWeek hat Microsoft um eine Stellungnahme gebeten.
