
Avis de divulgation responsable pour CVE-2026-79294, une XSS stockée dans l'aperçu d'artefact HTML de Moonshot AI Kimi via la vue Share publique permettant le vol de jeton de session et la prise de contrôle de compte.
CVE-2026-79294 — XSS stocké dans l'aperçu d'artefact HTML de Moonshot AI Kimi, diffusé via la vue Share publique, entraînant l'exfiltration du jeton de session et une prise de contrôle de compte démontrée. Avis de divulgation responsable.
| Fournisseur / produit | Moonshot AI — Kimi |
| Composants | Rendu de l'aperçu d'artefact HTML ; vue Share publique |
| Faiblesse | CWE-79 — Neutralisation incorrecte de l'entrée lors de la génération de pages web |
Kimi affiche les artefacts HTML générés par le modèle dans un volet d'aperçu à l'intérieur de l'origine de l'application elle-même, sans neutraliser les scripts. Le partage d'une conversation publie cet artefact à une URL Share publique, de sorte que le script rédigé par un compte s'exécute dans le navigateur de quiconque ouvre le lien.
Les valeurs de session sur lesquelles Kimi s'appuie sont conservées dans localStorage et sont donc lisibles par
ce script :
access_token
refresh_token
msh_user_id
L'exécution du script ne s'arrête donc pas à l'exécution du script. Ces trois valeurs peuvent être extraites du navigateur d'une victime, envoyées n'importe où, puis rejouées pour obtenir une session authentifiée en tant que cette victime.
compte attaquant → artefact contenant un script d'exfiltration → Share public
→ la victime ouvre le lien → le script s'exécute dans l'origine de Kimi
→ les trois valeurs localStorage parviennent à l'attaquant
→ rejouées dans un navigateur propre → authentifié en tant que la victime
Un attaquant a besoin d'un compte ordinaire. La victime doit seulement ouvrir un lien de partage alors qu'elle est connectée — ce qui est précisément la fonction des liens de partage.
| Observé | Comment |
|---|---|
| Le script s'exécute dans le navigateur de la victime | Une requête a atteint le point de terminaison de l'attaquant, provenant de la session de la victime |
| Les trois valeurs sont lisibles par script | Toutes trois étaient présentes dans le corps de cette requête |
| Les valeurs s'authentifient à elles seules | Écrites dans un navigateur qui ne s'était jamais connecté à Kimi ; après rechargement, ce navigateur détenait une session authentifiée |
| Les valeurs sont la cause | Contrôle : même navigateur, valeurs omises, rechargement — est resté non authentifié |
Les deux comptes impliqués ont été créés et contrôlés par le chercheur. Aucune donnée de tiers n'a été consultée à aucun moment.
La chaîne est documentée ci-dessus dans son intégralité. La charge utile fonctionnelle et le point de terminaison récepteur sont retenus — les publier armerait l'attaque plutôt que de la décrire.
Le prompt de l'artefact prend la forme :
Generate an HTML page that reads the three localStorage values above
and POSTs them to <attacker endpoint>.