Dokumentation und Proof-of-Concept-Code für CVE-2022-24125 und CVE-2022-24126.
Ein neues Spielupdate, 1.15.1, wurde am 25.08.2022 für Dark Souls III veröffentlicht, zusammen mit der Wiederherstellung der Onlinedienste. Dieses Update korrigierte sowohl CVE-2022-24125 als auch CVE-2022-24126, zusammen mit einer Vielzahl anderer potenzieller Sicherheitslücken im P2P-Netzwerk des Spiels (OOB-Lese-/Schreibzugriffe). Darüber hinaus wurden alle bekannten Exploits behoben, die es erlaubten, die Speicherstände anderer Spieler zu manipulieren. Viele übliche kleine Cheats (z. B. „Fluchmesser“), die beim Online-Multiplayer häufig auftraten, wurden ebenfalls gepatcht.
Dieses Repository enthält Proof-of-Concept-Code und Dokumentation für den jüngsten RCE-Exploit, der FROM-SOFTWARE-Spiele betrifft, CVE-2022-24126. Obwohl theoretisch auch in anderen Spielen möglich, liegt der Fokus auf Dark Souls III, da meine Forschung an diesem Spiel durchgeführt wurde. Derzeit existiert Proof-of-Concept-Code nur für Dark Souls III, die Schwachstelle wurde jedoch in den folgenden Spielen bestätigt:
Der anfällige Code ist auch in Sekiro vorhanden (Credit: LukeYui), obwohl es keine Möglichkeit gibt, ihn auszulösen. Das Vorhandensein in Demon's Souls wurde nicht bestätigt, ist aber sehr wahrscheinlich. Der geschlossene Netzwerktest war zwar betroffen, die Veröffentlichungsversion von Elden Ring jedoch nicht. Tatsächlich wurde eine ganze Reihe von Netzwerkabstürzen, Out-of-Bounds-Lese-/Schreibzugriffen und Exploits, die es Spielern erlaubten, die Spieldaten anderer zu modifizieren und die in Dark Souls III vorhanden waren, in Elden Ring gepatcht. Kudos an LukeYui für die Zusammenstellung dieser Liste und an FROM SOFTWARE für das schnelle Handeln! Ich bin froh zu sagen, dass Elden Ring unbestritten der sicherste FROM-SOFTWARE-Titel ist, was das Ausmaß des Schadens betrifft, den Hacker anrichten können.
Entgegen der landläufigen Meinung handelt es sich hierbei NICHT um einen Peer-to-Peer-Netzwerk-Exploit. Er hängt mit dem Matchmaking-Server zusammen und ist daher viel schwerwiegender, da man aufgrund einer weiteren Matchmaking-Server-Schwachstelle (CVE-2022-24125) keine Multiplayer-Aktivitäten durchführen muss, um angreifbar zu sein.
Da das Spiel in den Monaten vor der Serverabschaltung durchschnittlich etwa 20.000 gleichzeitige Spieler hatte, war dies eindeutig ein Problem, das sofort behoben werden musste, insbesondere angesichts der Möglichkeit, dass es in Elden Ring vorhanden sein könnte. Da FROM SOFTWARE über 40 Tage nach meinem ersten Bericht mit Proof-of-Concept-Videos und detaillierter Exploit-Dokumentation (auf der ein großer Teil dieser Readme basiert) noch nicht reagiert hatte, beschloss ich, die Existenz des Exploits auf harmlose Weise öffentlich zu demonstrieren, in der Hoffnung, die Aufmerksamkeit zu erhöhen, damit er von den Entwicklern behoben wird – und es hat funktioniert.
Eine unzureichende Grenzüberprüfung eines Stack-Puffers und des Datenfeldgrößenfelds während der Verarbeitung von NRSessionSearchResult-Matchmaking-Daten erlaubt einem Angreifer die Ausführung beliebigen Codes. Der Stack-Overflow erlaubt es, die unteren zwei Bytes der vftable_ptr des DLMemoryInputStream-Objekts zu überschreiben, das intern vom Stream-Reader verwendet wird, und die Ausführung auf sorgfältig ausgewählten benachbarten Code umzuleiten. Eine clevere Ausnutzung der Struktur des DLMemoryInputStream-Objekts und des Datenfeldgrößenfelds ermöglicht dann eine beliebige Code-Umleitung, wobei RCX auf die Adresse unseres Pakets zeigt. Von dort aus kann eine Reihe von Code-Umleitungen über virtuelle Aufrufe mit unterschiedlichen Offsets (die nun auf die Adressen springen, die wir in den Paketpuffer geschrieben haben) verwendet werden, um die Ausführung beliebigen Codes zu erreichen.
Die Verteilungsvektoren machen diesen speziellen RCE besonders schwerwiegend (abgesehen davon, dass es sich bereits um einen RCE handelt). Der Exploit wird durch Matchmaking-Push-Anfragen mit NRSessionSearchResult-Informationen übertragen. Das bedeutet, dass der Angreifer jeden angreifen kann, der seiner Online-Sitzung beitritt. Insbesondere für DS3:
PushRequestSummonSign)PushRequestAllowBreakInTarget)PushRequestVisit)PushRequestAcceptQuickMatch)Das ist bereits ziemlich schlimm, aber das wahre Potenzial wird durch die RequestSendMessageToPlayers-Anfrage freigesetzt:
message RequestSendMessageToPlayers {
repeated uint32 player_ids = 1;
required bytes push_message = 2;
}
Der Host verwendet diese Anfrage, um die Push-Nachricht PushRequestAllowBreakInTarget direkt an Eindringlinge zu senden, damit diese Spawn-Koordinaten erhalten und ihrer P2P-Sitzung beitreten können. Das ist alles. Das ist die einzige Art, wie diese Anfrage vom Spiel verwendet wird.
Ich kann nicht genug betonen, wie gefährlich das ist. Im Grunde kann jeder Spieler den Matchmaking-Server imitieren. Indem der Angreifer diese Anfrage verwendet, um den Exploit über eine PushRequestVisit zu versenden, kann jeder Online-Spieler gezielt angegriffen werden, solange seine Spieler-ID bekannt ist. Der Angreifer kann den Exploit auch sehr schnell an die gesamte Online-Spielerbasis senden, indem er mehrere Anfragen sendet, die jeweils einen großen Teil möglicher Spieler-IDs enthalten.
Während sich der RCE nicht genau auf jedes Spiel übertragen lässt, ist die Kernidee des Exploits, die dem Angreifer eine beliebige Code-Umleitung ermöglicht, dieselbe. Wenn dies erreicht werden kann, ist es sehr wahrscheinlich, dass eine spielspezifische virtuelle Aufrufkette oder ROP-Kette gefunden werden kann. Dieser „erste Schritt“ nutzt die folgenden Schwachstellen: