
Avviso di responsible-disclosure per CVE-2026-79294, un XSS memorizzato nell'anteprima degli artefatti HTML di Moonshot AI Kimi tramite la vista Share pubblica che consente il furto del token di sessione e il takeover dell'account.
CVE-2026-79294 — XSS memorizzato nell'anteprima degli artefatti HTML di Moonshot AI Kimi, veicolato tramite la vista Share pubblica, che porta all'esfiltrazione del token di sessione e alla dimostrazione di account takeover. Advisory di responsible disclosure.
XSS memorizzato nell'anteprima degli artefatti HTML di Moonshot AI Kimi, raggiungibile tramite la vista Share pubblica, che porta al furto del token di sessione e all'account takeover.
| Fornitore / prodotto | Moonshot AI — Kimi |
| Componenti | Rendering dell'anteprima degli artefatti HTML; vista Share pubblica |
| Debolezza | CWE-79 — Neutralizzazione impropria dell'input durante la generazione di pagine web |
Kimi esegue il rendering degli artefatti HTML generati dal modello in un pannello di anteprima all'interno dell'origine dell'applicazione stessa, senza neutralizzare gli script. La condivisione di una conversazione pubblica quell'artefatto a un URL Share pubblico, quindi lo script creato da un account viene eseguito nel browser di chiunque apra il link.
I valori di sessione su cui Kimi fa affidamento sono conservati in localStorage e sono quindi leggibili da quello script:
access_token
refresh_token
msh_user_id
L'esecuzione dello script di conseguenza non si ferma all'esecuzione dello script. Quei tre valori possono essere letti dal browser della vittima, inviati ovunque e riprodotti per ottenere una sessione autenticata come quella vittima.
account attaccante → artefatto contenente lo script di esfiltrazione → Share pubblico
→ la vittima apre il link → lo script viene eseguito nell'origine di Kimi
→ i tre valori di localStorage raggiungono l'attaccante
→ riprodotti in un browser pulito → autenticato come la vittima
Un attaccante necessita di un account ordinario. La vittima deve solo aprire un link di condivisione mentre è autenticata — che è esattamente lo scopo dei link di condivisione.
| Osservato | Come |
|---|---|
| Lo script viene eseguito nel browser della vittima | Una richiesta ha raggiunto l'endpoint dell'attaccante, proveniente dalla sessione della vittima |
| I tre valori sono leggibili dallo script | Tutti e tre erano presenti nel corpo di quella richiesta |
| I valori autenticano da soli | Inseriti in un browser che non aveva mai effettuato l'accesso a Kimi; dopo il ricaricamento, quel browser manteneva una sessione autenticata |
| I valori sono la causa | Controllo: stesso browser, valori omessi, ricaricamento — è rimasto non autenticato |
Entrambi gli account coinvolti sono stati creati e controllati dal ricercatore. In nessun momento sono stati accessi dati di terze parti.
La catena è documentata integralmente sopra. Il payload funzionante e l'endpoint ricevente sono omessi — pubblicarli armerebbe l'attacco anziché descriverlo.
Il prompt dell'artefatto assume la forma:
Generate an HTML page that reads the three localStorage values above
and POSTs them to <attacker endpoint>.