Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
Tools/GitHubGitHub/pablomk7/enlbufferpwn
Embedded-System-SicherheitSchwachstellenanalyseExploitationLernen & BildungBinary-Exploitation
GitHubpablomk7/enlbufferpwn

ENLBufferPwn

Informationen und PoC zur ENLBufferPwn-Schwachstelle

Repository anzeigen
298113vor 3 JahrenVon Kitploit geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

ENLBufferPwn (CVE-2022-47949)

CVE:CVE-2022-47949
CVSS v3.1:9.8/10 (Kritisch)
Autoren:PabloMK7, Rambo6Glaz, Fishguy6564
Gemeldet:8. August 2021 (Mario Kart 7)
14. April 2022 (für die betroffenen WiiU- und Switch-Spiele)
Offengelegt:22. Dezember 2022

Inhaltsverzeichnis

  • Beschreibung
  • Details zur Sicherheitslücke
  • ENLBufferPwn in Mario Kart 7 (3DS)
    • Technische Details
  • ENLBufferPwn in Mario Kart 8
  • Danksagungen
  • Lizenz

Beschreibung

ENLBufferPwn ist eine Sicherheitslücke im gemeinsamen Netzwerkcode mehrerer Erstanbieter-Nintendo-Spiele seit dem Nintendo 3DS, die es einem Angreifer ermöglicht, durch eine Online-Spielesitzung mit dem Opfer Code aus der Ferne auf der Konsole des Opfers auszuführen (Remote Code Execution). Sie wurde im Laufe des Jahres 2021 von mehreren Personen unabhängig voneinander entdeckt und Nintendo in den Jahren 2021 und 2022 gemeldet. Seit der ersten Meldung hat Nintendo die Sicherheitslücke in vielen betroffenen Spielen behoben. Die Informationen in diesem Repository wurden nach Erhalt der Erlaubnis von Nintendo sicher offengelegt.

Die Sicherheitslücke erreicht eine Bewertung von 9.8/10 (Kritisch) im CVSS-3.1-Rechner.

Hier ist eine Liste von Spielen, von denen bekannt ist, dass sie die Sicherheitslücke zu einem bestimmten Zeitpunkt hatten (alle aufgeführten Switch- und 3DS-Spiele haben Updates erhalten, die die Sicherheitslücke beheben, sodass sie nicht mehr betroffen sind):

  • Mario Kart 7 (behoben in v1.2)
  • Mario Kart 8 (behoben in v4.2.0)
  • Mario Kart 8 Deluxe (behoben in v2.1.0)
  • Animal Crossing: New Horizons (behoben in v2.0.6)
  • ARMS (behoben in v5.4.1)
  • Splatoon (behoben in v2.12.1)
  • Splatoon 2 (behoben in v5.5.1)
  • Splatoon 3 (behoben Ende 2022, genaue Version unbekannt)
  • Super Mario Maker 2 (behoben in v3.0.2)
  • Nintendo Switch Sports (behoben Ende 2022, genaue Version unbekannt)
  • Wahrscheinlich mehr...

Details zur Sicherheitslücke

Die ENLBufferPwn-Sicherheitslücke nutzt einen Pufferüberlauf in der C++-Klasse NetworkBuffer aus, die in der Netzwerkbibliothek enl (Net in Mario Kart 7) enthalten ist und von vielen Erstanbieter-Nintendo-Spielen verwendet wird. Diese Klasse enthält zwei Methoden, Add und Set, die einen Netzwerkpuffer mit Daten von anderen Spielern füllen. Keine dieser Methoden prüft jedoch, ob die Eingabedaten tatsächlich in den Netzwerkpuffer passen. Da die Eingabedaten kontrollierbar sind, kann ein Pufferüberlauf auf einer entfernten Konsole ausgelöst werden, indem man einfach eine Online-Spielesitzung mit dem Angreifer führt. Wenn es richtig gemacht wird, bemerkt das Opfer möglicherweise nicht einmal, dass eine Sicherheitslücke auf seiner Konsole ausgenutzt wurde. Die Folgen dieses Pufferüberlaufs variieren je nach Spiel, von einfachen, harmlosen Änderungen am Speicher des Spiels (wie dem wiederholten Öffnen und Schließen des Home-Menüs auf dem 3DS) bis hin zu schwerwiegenderen Aktionen wie der vollständigen Übernahme der Konsole, wie unten gezeigt.

Der Rest des Berichts konzentriert sich auf Mario Kart 7, da es aufgrund der fehlenden Sicherheitsmaßnahmen (z. B. ASLR) des 3DS der schwerwiegendste Fall der Sicherheitslücke ist. Es könnte jedoch möglich sein, ASLR bei Switch-Spielen zu umgehen, indem man den NetworkBuffer kapert, der zum Zurücksenden von Daten an den Angreifer verwendet wird (und ihn so dazu bringt, Pointer auf den Heap und Code preiszugeben).

ENLBufferPwn in Mario Kart 7 (3DS)

Im folgenden Video wird ein schwerwiegender Fall der Sicherheitslücke in Mario Kart 7 gezeigt, bei dem eine von einem Angreifer kontrollierte Konsole (linke Seite) eine nicht modifizierte Konsole (rechte Seite) vollständig übernimmt. Die einzige Interaktion des Benutzers besteht darin, einer Online-Spielesitzung mit dem Angreifer beizutreten, in diesem Fall über die Funktion „Communities“ (beachte, dass eine „Community“ verwendet wurde, um die Sicherheitslücke sicher und isoliert zu testen und keine anderen Benutzer zu beeinträchtigen, die in öffentlichen Lobbys spielen). Die Übernahme erfolgt durch das Kopieren einer ROP-Payload auf die entfernte Konsole und deren anschließende Ausführung. Diese ROP-Payload nutzt dann weitere Sicherheitslücken im Betriebssystem aus, um Privilegien zu erweitern und die volle Kontrolle zu erlangen. Im Video wird die entfernte Konsole gezwungen, einen CFW-Installer (SafeB9SInstaller) auszuführen. Mit denselben Techniken wäre es theoretisch möglich, Konto- oder Kreditkarteninformationen zu stehlen oder unerlaubte Audio-/Videoaufnahmen mit dem eingebauten Mikrofon/den Kameras der Konsole zu machen.

ENLBufferPwn - Mario Kart 7 Demonstration - Youtube

Technische Details

Wie bereits erwähnt, rührt die Sicherheitslücke von einem Versehen in zwei Methoden der Klasse NetworkBuffer her. Hier ist eine Implementierung der Klasse und der Methoden in C++:

root@kitploit:~
class NetworkBuffer
{
public:
    u8	bufferType;
    u8* dataPtr;
    u32 dataSize;
    u32 currentSize;

    void Set(u8* newData, u32 newDataSize);
    void Add(u8* newData, u32 newDataSize);
}

void NetworkBuffer::Set(u8* newData, u32 newDataSize)
{
    memcpy(this->dataPtr, newData, newDataSize);
    this->currentSize = newDataSize;
}

void NetworkBuffer::Add(u8* newData, u32 newDataSize)
{
    memcpy(this->dataPtr + this->currentSize, newData, newDataSize);
    this->currentSize += newDataSize;
}

Wie du sehen kannst, prüfen weder Set noch Add, ob der eingehende newDataSize in die Puffergröße (dataSize) passt. Da diese NetworkBuffer-Klasse als generischer Container zum Austausch von Daten zwischen Spielern online verwendet wird, können der Inhalt von newData und der Wert von newDataSize von einem Angreifer kontrolliert werden, und ein Pufferüberlauf kann durchgeführt werden.

Ein weiteres Detail der Netzwerkbibliothek ist, dass sie asynchron ist, sodass Spiele andere Operationen ausführen können, während Daten in den Puffer gefüllt werden. Um dies zu erreichen, wird eine Doppelpuffer-Technik verwendet. Auf diese Weise kann das Spiel auf bereits empfangene Daten in einem NetworkBuffer zugreifen, während gleichzeitig neue Daten empfangen werden. Nachdem der zweite NetworkBuffer gefüllt ist, werden die Puffer getauscht und der Zyklus wiederholt sich.

Für diesen PoC wird der doppelte NetworkBuffer, der zum Empfangen von Mii-Daten verwendet wird (bufferType = 9), ausgenutzt. Aufgrund der Reihenfolge der Heap-Zuweisung kommt es dazu, dass das NetworkBuffer-Objekt und sein Inhalt nebeneinander platziert werden. Außerdem sind beide Puffer des Doppelpuffers im Speicher zusammenhängend. Das folgende Diagramm zeigt, wie der Speicher nach der Pufferzuweisung aussieht:

Darstellung des doppelten Mii-Daten-NetworkBuffers im Heap des Spiels

Ab jetzt wird der Puffer oben im Bild als Buffer0 bezeichnet, während der Puffer unten Buffer1 ist. Mit diesem Wissen kann ein Angreifer den Pufferüberlauf in Buffer0 auslösen, um die Attribute von Buffer1 zu überschreiben, einschließlich des Members dataPtr. Da 3DS-Spiele kein ASLR implementieren, sind alle Speicherorte in der entfernten Konsole bekannt, sodass dataPtr auf einen beliebigen Ort zeigen kann. Sobald das Spiel die Puffer tauscht, werden die neuen Daten an den beliebigen Ort kopiert. Mit den folgenden Schritten kann eine Payload beliebiger Größe auf die entfernte Konsole kopiert werden:

  1. Erstelle eine speziell präparierte Payload und sende sie in Buffer0. Sie löst auf der entfernten Konsole einen Überlauf aus, der dataPtr von Buffer1 überschreibt.
  2. Setze den Inhalt von Buffer1 auf beliebige Daten. Sie werden an die beliebige Adresse kopiert, auf die dataPtr von Buffer1 der entfernten Konsole zeigt.
  3. Erhöhe die beliebige Adresse und Größe und beginne erneut bei Schritt 1.

Unten ist eine Animation des normalen Betriebs des Spiels zu sehen, gefolgt von der Durchführung der oben beschriebenen Schritte.

Animation des normalen Betriebs der Doppelpuffer, gefolgt vom Ausnutzen der Sicherheitslücke

Dieses Repository enthält einen PoC, der diese Sicherheitslücke ausnutzt, um je nach Compiler-Flags die folgenden Operationen durchzuführen:

  • Sende einen 4-Byte-Wert, der an die Anwendungsstatusadresse der entfernten Konsole geschrieben wird, wodurch diese gezwungen wird, sich zu schließen und zum Home-Menü zurückzukehren.
  • Sende eine ROP-Payload, die im Speicher der entfernten Konsole gespeichert wird. Sobald die ROP gesendet ist, wird der Stack überschrieben, sodass das Spiel sie ausführt (die ROP-Payload selbst ist im PoC nicht enthalten).

Beachte, dass dieser PoC keine Art von Paketverlusterkennung implementiert, da die Kommunikation zwischen den Konsolen über UDP erfolgt. Um die besten Ergebnisse zu erzielen, sollte eine Behandlung von Paketverlusten im PoC-Code implementiert werden oder die Konsolen sollten sich im selben Netzwerk befinden, um die Wahrscheinlichkeit von Paketverlusten zu verringern.

Eine mögliche Korrektur der anfälligen NetworkBuffer-Klasse ist ebenfalls enthalten.

ENLBufferPwn in Mario Kart 8

Die Sicherheitslücke ist auch in der WiiU- und Switch-Version von Mario Kart 8 vorhanden, wurde jedoch nur für die WiiU-Version des Spiels demonstriert.

  • Der POC erfordert eine alte Version von NintendoClients, die PIA-Kommunikation implementiert
  • Weitere Informationen findest du in diesem HackerOne-Bericht: https://hackerone.com/reports/1541273
  • Ein ausführlicherer Artikel wird in Zukunft hier hinzugefügt

Danksagungen

Während diese Sicherheitslücke von mehreren Benutzern unabhängig voneinander entdeckt wurde, beschlossen viele von ihnen, die Informationen über die Sicherheitslücke privat zu halten. Die folgenden Personen sind jedoch für die sichere Offenlegung der Sicherheitslücke gegenüber Nintendo verantwortlich:

  • PabloMK7 (GitHub, Twitter)
  • Rambo6Glaz (GitHub)
  • Fishguy6564 (GitHub, Twitter)

Lizenz

CC0
Soweit gesetzlich möglich, PabloMK7, Rambo6Glaz und Fishguy6564 haben auf alle Urheber- und verwandten Schutzrechte an ENLBufferPwn verzichtet. Dieses Werk wird veröffentlicht aus: Spanien.

Tool herunterladen