Dritte Steam Windows Client-Sicherheitsanfälligkeit, jedoch nicht 0day

In früheren Serien


Vor nicht allzu langer Zeit habe ich über zwei Schwachstellen von Steam gesprochen: CVE-2019-14743 und CVE-2019-15316 . Es gab eine ganze Geschichte darüber, wie ich versucht habe, sie zu registrieren, es gelang mir nicht, ich wurde verboten, und erst nach der Veröffentlichung und der Hilfe der Community gelang es mir, Ergebnisse zu erzielen. Valve gab vor, mich bei HackerOne zu entschuldigen und zu entsperren, und beschloss, die nächste Sicherheitsanfälligkeit über diesen Service zu übertragen. Beim dritten Mal ( es sollte einen offensichtlichen Witz über Half-Life 3 geben ) lief alles mehr oder weniger erfolgreich.



Beschreibung der Sicherheitsanfälligkeit


Mit dieser Sicherheitsanfälligkeit können Sie Dateien mit teilweise gesteuertem Inhalt erstellen (oder vorhandenen Dateien teilweise kontrollierten Inhalt hinzufügen). Die Version des anfälligen Dienstes ist 5.31.28.21 (Daten aus der Datei SteamService.exe). Zuerst werde ich beschreiben, wie die Sicherheitsanfälligkeit ausgenutzt werden kann, und dann werde ich die möglichen Konsequenzen beschreiben.

Schritt 1. Umgebung


Sie müssen die Steam-Anwendung beenden und den Steam-Client-Dienst beenden, wenn sie ausgeführt werden. In den meisten Fällen können Benutzer ohne Administratorrechte keine Dienste starten und stoppen. Speziell für diesen Dienst hat Valve Rechte festgelegt, mit denen alle Benutzer ihn stoppen und starten können.

Erstellen Sie einen Ordner an einem beliebigen Ort, auf den der Benutzer zugreifen kann (z. B. "C: \ test"). In diesem Ordner müssen Sie die Dateien Steam.exe und steamclient.dll aus dem Steam-Quellordner kopieren (standardmäßig ist dies "C: \ Programme (x86) \ Steam"). Erstellen Sie einen leeren Protokollunterordner ("C: \ test \ logs").

Korrigieren Sie nun die Registrierung: Ändern Sie im Zweig "HKLM \ Software \ wow6432node \ Valve \ Steam" den Wert des Parameters "InstallPath" in "C: \ test \ 1 \ ..". Für Benutzer ohne Administratorrechte sind Registrierungszweige in HKLM normalerweise nicht beschreibbar, in diesem Fall jedoch nicht. Bei der Installation von Valve legen sie solche Rechte für ihren Zweig in HKLM fest, dass darin alle Aktionen für alle Benutzer verfügbar sind („Vollzugriff“ für die Gruppe „Benutzer“).

Schritt 2. Lassen Sie uns einen kleinen Test machen


Starten Sie den Steam Client Service. Überprüfen Sie nach dem Stoppen (dies geschieht automatisch in wenigen Sekunden) den Inhalt des Ordners "C: \ test \ logs" - dort finden wir die Datei "service_log.txt". Der Inhalt des Protokolls sieht ungefähr so ​​aus:

08/27/19 13:45:01 : ERROR: SteamService: Invalid file signature C:\test\1\..\bin\SteamService.dll 

Beachten Sie, dass der Pfad "C: \ test \ 1 \ .." dem Pfad "C: \ test" entspricht, sodass Windows den zweiten zum Arbeiten verwendete und der erste in die Nachricht aufgenommen wurde. Löschen Sie die Datei "service_log.txt" und fahren Sie fort.

Schritt 3. Fügen Sie weiteren Text hinzu.


Eine interessante Tatsache: Wenn Windows mit Pfaden arbeitet, die "\ .." enthalten, werden solche Pfade automatisch vereinfacht. Keine Überprüfung für Staging-Ordner.

Beispielsweise wird der Pfad "C: \ 1 \ <Test> \ .." in "C: \ 1" konvertiert, obwohl im Ordnernamen keine spitzen Klammern verwendet werden können.

Im ersten Schritt haben wir den Pfad in der Registrierung registriert. Jetzt werden wir Zeilenumbrüche hinzufügen. Dies kann durch Schreiben von einfachem Code erfolgen, aber auch über die regedit-Schnittstelle. Öffnen Sie einfach den Registrierungszweig "HKLM \ Software \ wow6432node \ Valve \ Steam" und wählen Sie im Kontextmenü des Parameters "InstallPath" die Option "Binärdaten ändern ..". Es wird so etwas wie ein Hex-Editor angezeigt, in dem Sie die erforderlichen Änderungen vornehmen können.



Wir werden einen weiteren Teststart des Dienstes durchführen und das Ergebnis unserer Aktionen überprüfen.



Nach dem Test müssen Sie die Datei "service_log.txt" erneut löschen.

Schritt 4. Leiten Sie die erstellte Datei um


Benutzer ohne Administratorrechte können keine symbolischen Links von einer Datei zur anderen erstellen. Es gibt jedoch einen Schwerpunkt: Sie können andere Arten von Links kombinieren, die Benutzern ohne Administratorrechte zur Verfügung stehen, um einen Effekt zu erzielen, der einem Symlink von Datei zu Datei nahe kommt.

Erstellen Sie zunächst einen NTFS-Analysepunkt (ein anderer Name für den NTFS-Einhängepunkt) aus dem Ordner "C: \ test \ logs" in "\ RPC Control \". "\ RPC Control \" ist kein gewöhnlicher Ordner im üblichen Sinne, er kann beispielsweise im Explorer nicht angezeigt werden. Dies ist ein Systemobjektverzeichnis, in dem sich beispielsweise Mutexe, Ereignisse und andere ähnliche Objekte befinden. Warum die Umleitung über den NTFS-Analysepunkt für sie funktioniert, ist nicht klar. Höchstwahrscheinlich besteht der Punkt darin, dieselben Abstraktionen für Ordner im Dateisystem und in den Objektverzeichnissen zu verwenden. Aus dem Objektverzeichnis können Sie einen Symlink zu einer Datei ohne Administratorrechte erstellen. Erstellen Sie einen Symlink der Form "\ RPC Control \ service_log.txt" <-> "C: \ Path \ to \ file".

Infolgedessen werden alle Aufrufe von "C: \ test \ logs \ service_log.txt" in die Datei "C: \ Path \ to \ file" umgeleitet. Um eine solche Umleitung zu erstellen, müssen zwei grundlegende Anforderungen erfüllt sein: Der Ordner, aus dem der NTFS-Analysepunkt erstellt wird, muss leer und für den Benutzer beschreibbar sein. Um die erste Bedingung zu erfüllen, haben wir nach jedem Test, bei dem wir die Datei „service_logs.txt“ gelöscht haben, die zweite Bedingung dadurch sichergestellt, dass wir den Quellordner an einem benutzergesteuerten Ort erstellt haben.

Es gibt ein spezielles Dienstprogramm, das solche Symlink-Paare erstellt - CreateSymlink und steht auf GitHub zum Download zur Verfügung . Dienstprogrammnutzung:

 CreateSymlink.exe <> <> 

In unserem Fall wird es sein:

 CreateSymlink.exe "C:\test\logs\service_log.txt" "C:\\\" 

Wenn wir alles zusammenfassen, wird beim Starten des Steam-Client-Dienstes eine Datei entlang des Pfads erstellt, der beim Erstellen des Symlinks angegeben wurde, und diese Datei enthält Inhalte, die wir steuern können (mit Ausnahme der ersten und letzten Zeile). Wenn wir den Pfad zu einer vorhandenen Datei angeben, wird der Inhalt an das Ende der Datei angehängt. All dies erfolgt im Auftrag des Steam-Client-Dienstes mit den Berechtigungen NT AUTHORITY \ SYSTEM.

Auswirkungen


Jetzt werde ich die möglichen Auswirkungen der am wenigsten wichtigen und aufsteigenden auflisten.

  1. Dos

    Wenn das Ziel des Symlinks darin besteht, "C: \ Windows \ System32 \ config \ SAM" oder "C: \ Windows \ System32 \ config \ SECURITY" festzulegen, ist es unwahrscheinlich, dass das Betriebssystem nach einem Neustart gestartet werden kann.
  2. Benutzerumleitung im Internet

    Legen Sie das Ziel des Symlinks "C: \ Windows \ system32 \ drivers \ etc \ hosts" fest und fügen Sie dort eine Zeile wie "127.0.0.1 google.com" hinzu.

    Ergebnis:

  3. Horizontale EoP
    Eine horizontale Erhöhung der Berechtigungen ist eine Änderung der Rechte, bei der wir nicht auf höhere Rechte zugreifen, sondern auf Rechte derselben Ebene, sondern relativ zu anderen Objekten, beispielsweise zu den Rechten anderer Benutzer.

    Legen Sie das Ziel des Symlinks "C: \ ProgramData \ Microsoft \ Windows \ Startmenü \ Programme \ StartUp \ run.bat" fest und fügen Sie dort eine Zeile wie "start C: \ test \ 1.exe" hinzu.
    Alle Dateien aus dem Ordner C: \ ProgramData \ Microsoft \ Windows \ Startmenü \ Programme \ StartUp werden von Benutzern ausgeführt, wenn sie sich anmelden. Somit kann ein Benutzer einen anderen Benutzer zwingen, Code auszuführen. Aus der Bat-Datei werden nacheinander alle Zeilen ausgeführt. Der erste und der letzte werden einfach nichts tun, aber der implementierte Befehl "start C: \ test \ 1.exe" wird funktionieren.

    Mit der Einführung eines solchen Befehls gibt es eine Feinheit: Die Zeichen "\" werden bei der Normalisierung des Pfads berücksichtigt. Für einen korrekten Betrieb müssen dem Pfad in der Registrierung einige weitere "\ .." hinzugefügt werden.
  4. Vertikale EoP
    Die vertikale Eskalation von Berechtigungen ist eine übliche Eskalation, beispielsweise von einem Benutzer ohne Administratorrechte zu NT AUTHORITY \ SYSTEM.

    Sehr oft finden Sie Software, die Textskripte mit hohen Rechten ausführt. Wir können solchen Skripten Befehle hinzufügen und unseren Code mit hohen Berechtigungen ausführen. Ich habe solche Skripte in einem sauberen Betriebssystem nicht gefunden, daher können Sie einen solchen Exploit nicht einfach demonstrieren. Als Beispiel kann ich jedoch Bat-Dateien angeben, die von NVIDIA und VmWare erstellt wurden, oder Anmeldeskripts für das Betriebssystem in der Domäne.

Zur Verbesserung können Sie außerdem überprüfen, ob XML-Dateien oder INI-Dateien mit einem fehlerhaften Format erstellt werden können. Leider gibt es zu viele Optionen - Erstellen von Aufgaben für TaskSheduler, Arbeiten mit .manifest- und anderen Bibliotheksdownloads und viele andere. Es scheint mir, dass die oben beschriebenen Ergebnisse bereits ausreichen, um die Ergebnisse der Sicherheitsanfälligkeit zu verstehen.

Zeitleiste


Um das Bild zu vervollständigen, werde ich einen langweiligen Zeitplan für diese Sicherheitsanfälligkeit geben.
26.08. - Es wurde eine Sicherheitslücke gefunden.
27. August - Unban auf h1, veröffentlichte einen Bericht.
12.09 - Eine Korrektur wurde veröffentlicht .

Schlussfolgerungen


Hier beende ich die Steam-Forschungsbeiträge - 3 Schwachstellen, die mit einer ziemlich oberflächlichen Analyse gefunden wurden, das reicht nicht aus. Um tiefer zu gehen, braucht man mehr Zeit und Lust. Leider sind die Haltung von Valve und die Inkompetenz der HackerOne-Mitarbeiter sehr starke Hindernisse.

Ich möchte mich noch einmal bei allen Lesern bedanken, die dazu beigetragen haben, Steam sicherer zu machen. Ich danke Valve, dass er die Schwachstellen behoben und meine Verschwörungstheorien widerlegt hat. Ich danke HackerOne für die Bereitstellung der Plattform, obwohl sie mich grundsätzlich daran gehindert haben, Valve die Sicherheitslücken mitzuteilen.

Dieser Artikel in Englisch.

Source: https://habr.com/ru/post/de469507/


All Articles