Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
ENLBufferPwn — Informazioni e PoC sulla vulnerabilità ENLBufferPwn | Kitploit
Strumenti/GitHubGitHub/pablomk7/enlbufferpwn
Sicurezza Sistemi EmbeddedAnalisi delle VulnerabilitàExploitApprendimento e FormazioneBinary Exploitation
GitHubpablomk7/enlbufferpwn

ENLBufferPwn

Informazioni e PoC sulla vulnerabilità ENLBufferPwn

Vedi Repository
2981133 anni faRevisionato da Kitploit

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

ENLBufferPwn (CVE-2022-47949)

CVE:CVE-2022-47949
CVSS v3.1:9.8/10 (Critica)
Autori:PabloMK7, Rambo6Glaz, Fishguy6564
Segnalato:8 agosto 2021 (Mario Kart 7)
14 aprile 2022 (per i giochi WiiU e Switch interessati)
Divulgato:22 dicembre 2022

Indice dei contenuti

  • Descrizione
  • Dettagli della vulnerabilità
  • ENLBufferPwn in Mario Kart 7 (3DS)
    • Dettagli tecnici
  • ENLBufferPwn in Mario Kart 8
  • Crediti
  • Licenza

Descrizione

ENLBufferPwn è una vulnerabilità nel codice di rete comune di diversi giochi Nintendo first-party a partire dal Nintendo 3DS che consente a un attaccante di eseguire codice da remoto sulla console della vittima semplicemente giocando una partita online con la vittima (esecuzione remota di codice). È stata scoperta in modo indipendente da più persone durante il 2021 e segnalata a Nintendo nel corso del 2021 e del 2022. Dalla segnalazione iniziale, Nintendo ha corretto la vulnerabilità in molti giochi vulnerabili. Le informazioni in questo repository sono state divulgate in modo sicuro dopo aver ottenuto il permesso da Nintendo.

La vulnerabilità ha ottenuto un punteggio di 9.8/10 (Critica) nel calcolatore CVSS 3.1.

Ecco un elenco di giochi noti per aver avuto la vulnerabilità a un certo punto (tutti i giochi Switch e 3DS elencati hanno ricevuto aggiornamenti che correggono la vulnerabilità, quindi non sono più interessati):

  • Mario Kart 7 (corretto nella v1.2)
  • Mario Kart 8 (corretto nella v4.2.0)
  • Mario Kart 8 Deluxe (corretto nella v2.1.0)
  • Animal Crossing: New Horizons (corretto nella v2.0.6)
  • ARMS (corretto nella v5.4.1)
  • Splatoon (corretto nella v2.12.1)
  • Splatoon 2 (corretto nella v5.5.1)
  • Splatoon 3 (corretto a fine 2022, versione esatta sconosciuta)
  • Super Mario Maker 2 (corretto nella v3.0.2)
  • Nintendo Switch Sports (corretto a fine 2022, versione esatta sconosciuta)
  • Probabilmente altri...

Dettagli della vulnerabilità

La vulnerabilità ENLBufferPwn sfrutta un buffer overflow nella classe C++ NetworkBuffer presente nella libreria di rete enl (Net in Mario Kart 7) usata da molti giochi Nintendo first-party. Questa classe contiene due metodi, Add e Set, che riempiono un buffer di rete con i dati provenienti dagli altri giocatori. Tuttavia, nessuno di questi metodi verifica che i dati di input rientrino effettivamente nel buffer di rete. Poiché i dati di input sono controllabili, un buffer overflow può essere innescato su una console remota semplicemente avviando una sessione di gioco online con l'attaccante. Se eseguito correttamente, la vittima potrebbe anche non accorgersi che una vulnerabilità è stata innescata sulla propria console. Le conseguenze di questo buffer overflow variano a seconda del gioco, da semplici modifiche inoffensive alla memoria del gioco (come aprire e chiudere ripetutamente il menu home sul 3DS) ad azioni più gravi come prendere il pieno controllo della console, come mostrato di seguito.

Il resto del rapporto si concentrerà su Mario Kart 7, poiché, a causa della mancanza di misure di sicurezza (come l'ASLR, per esempio) del 3DS, è il caso più grave della vulnerabilità. Tuttavia, potrebbe essere possibile aggirare l'ASLR sui giochi Switch dirottando il NetworkBuffer usato per inviare dati all'attaccante (e facendo sì che riveli puntatori all'heap e al codice).

ENLBufferPwn in Mario Kart 7 (3DS)

Il seguente video mostra un caso grave della vulnerabilità in Mario Kart 7, in cui una console controllata da un attaccante (lato sinistro) prende completamente il controllo di una console non modificata (lato destro). L'unica interazione dell'utente è unirsi a una sessione di gioco online con l'attaccante, in questo caso utilizzando la funzione "communities" (si noti che è stata usata una "community" per testare in sicurezza la vulnerabilità in modo isolato e non coinvolgere altri utenti che giocavano in lobby pubbliche). La presa di controllo viene effettuata copiando un payload ROP sulla console remota ed eseguendolo. Questo payload ROP sfrutta poi altre vulnerabilità del sistema operativo per elevare i privilegi e ottenere il controllo totale. Nel video, la console remota viene costretta a eseguire un installer CFW (SafeB9SInstaller). Usando le stesse tecniche, sarebbe teoricamente possibile rubare informazioni di account/carte di credito o effettuare registrazioni audio/video non autorizzate usando il microfono/le fotocamere integrate della console.

ENLBufferPwn - Dimostrazione di Mario Kart 7 - Youtube

Dettagli tecnici

Come affermato in precedenza, la vulnerabilità deriva da una svista in due metodi della classe NetworkBuffer. Ecco un'implementazione della classe e dei metodi 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;
}

Come puoi vedere, né Set né Add verificano che il newDataSize in arrivo rientri nella dimensione del buffer (dataSize). Poiché questa classe NetworkBuffer è usata come contenitore generico per lo scambio di dati tra i giocatori online, il contenuto di newData e il valore di newDataSize possono essere controllati da un attaccante, permettendo di eseguire un buffer overflow.

Un altro dettaglio della libreria di rete è che è asincrona, così i giochi possono svolgere altre operazioni mentre i dati vengono inseriti nel buffer. Per ottenere questo risultato, viene usata una tecnica a doppio buffer. In questo modo, il gioco può accedere ai dati già ricevuti in un NetworkBuffer nello stesso momento in cui vengono ricevuti nuovi dati. Dopo che il secondo NetworkBuffer è stato riempito, i buffer vengono scambiati e il ciclo si ripete.

Per questo PoC, verrà sfruttato il doppio NetworkBuffer usato per ricevere i dati Mii (bufferType = 9). A causa dell'ordine di allocazione dell'heap, capita che l'oggetto NetworkBuffer e i suoi contenuti siano posizionati uno accanto all'altro. Inoltre, entrambi i buffer del doppio buffer sono contigui in memoria. Il seguente diagramma rappresenta come appare la memoria dopo l'allocazione del buffer:

Rappresentazione del doppio NetworBuffer dei dati Mii nell'heap del gioco

D'ora in poi, il buffer nella parte superiore dell'immagine verrà indicato come Buffer0, mentre quello nella parte inferiore sarà Buffer1. Usando queste conoscenze, un attaccante può innescare il buffer overflow in Buffer0 per sovrascrivere gli attributi di Buffer1, incluso il suo membro dataPtr. Poiché i giochi 3DS non implementano l'ASLR, tutte le posizioni di memoria della console remota sono note, quindi dataPtr può essere puntato a una posizione arbitraria. Una volta che il gioco scambia i buffer, i nuovi dati verranno copiati nella posizione arbitraria. Eseguendo i seguenti passaggi, un payload di qualsiasi dimensione può essere copiato sulla console remota:

  1. Crea un payload appositamente realizzato e invialo in Buffer0. Innescherà un overflow nella console remota sovrascrivendo dataPtr di Buffer1.
  2. Imposta il contenuto di Buffer1 con dati arbitrari. Verranno copiati all'indirizzo arbitrario puntato da dataPtr di Buffer1 della console remota.
  3. Incrementa l'indirizzo arbitrario e la dimensione, poi ricomincia dal passaggio 1.

Di seguito è mostrata un'animazione del normale funzionamento del gioco, seguita dall'esecuzione dei passaggi descritti sopra.

Animazione del normale funzionamento dei doppi buffer, seguita dallo sfruttamento della vulnerabilità

Questo repository contiene un PoC che sfrutta questa vulnerabilità per eseguire le seguenti operazioni, a seconda dei flag del compilatore:

  • Inviare un valore di 4 byte che viene scritto all'indirizzo di stato dell'applicazione della console remota, costringendola a chiudersi e a tornare al menu home.
  • Inviare un payload ROP che viene memorizzato nella memoria della console remota. Una volta inviato il ROP, lo stack viene sovrascritto in modo che il gioco lo esegua (il payload ROP stesso non è fornito nel PoC).

Tieni presente che questo PoC non implementa alcun tipo di rilevamento della perdita di pacchetti, poiché le comunicazioni tra le console avvengono tramite UDP. Per ottenere i migliori risultati, la gestione della perdita di pacchetti dovrebbe essere implementata nel codice del PoC oppure le console dovrebbero essere collegate alla stessa rete per ridurre le probabilità che i pacchetti vengano persi.

Una possibile correzione della vulnerabile classe NetworkBuffer è anche fornita.

ENLBufferPwn in Mario Kart 8

La vulnerabilità è presente anche nelle versioni WiiU e Switch di Mario Kart 8, ma è stata dimostrata solo per la versione WiiU del gioco.

  • Il POC richiede una vecchia versione di NintendoClients che implementa le comunicazioni PIA
  • Puoi fare riferimento a questo report hackerone per ulteriori informazioni: https://hackerone.com/reports/1541273
  • In futuro verrà aggiunto qui un write-up più dettagliato

Crediti

Sebbene questa vulnerabilità sia stata scoperta in modo indipendente da più utenti, molti di loro hanno deciso di mantenere private le informazioni sulla vulnerabilità. Tuttavia, le seguenti persone sono responsabili della divulgazione sicura della vulnerabilità a Nintendo:

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

Licenza

CC0
Nella misura consentita dalla legge, PabloMK7, Rambo6Glaz e Fishguy6564 hanno rinunciato a tutti i diritti d'autore e ai diritti connessi o affini su ENLBufferPwn. Questo lavoro è pubblicato da: Spagna.

Scarica lo strumento