Skip to content
KitploitKITPLOIT
OutilsExploitsBlog
Log in
Soumettre
OutilsExploitsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

FluxContactConfidentialité© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
Wildfire — CVE-2026-39154, XSS stocké dans le SDK JS CometChat | Kitploit
Outils/GitHubGitHub/defineid/wildfire
Analyse des VulnérabilitésExploitationExploitation d'Applications WebSécurité WebTests d'IntrusionDéveloppement de Charges UtilesSécurité des API
GitHubdefineid/wildfire

Wildfire

CVE-2026-39154, XSS stocké dans le SDK JS CometChat

Voir le dépôt
25il y a 2 moisPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

CVE-2026-39154 · XSS stocké dans les messages de groupe CometChat (SDK JS 3.0.12)

Ce répertoire contient une reproduction honnête et autonome du sink de rendu à l'origine de CVE-2026-39154 : une faille de cross-site scripting stocké dans le SDK JavaScript CometChat 3.0.12, où le champ data.text d'un message de groupe est rendu dans les clients des autres membres sans encodage contextuel de la sortie.

Il s'exécute entièrement en local avec des données synthétiques. Il n'entre pas en contact, ne sonde pas et ne s'authentifie pas auprès du service CometChat en production ni d'aucun tiers. Il s'agit d'une démonstration locale du chemin de rendu client vulnérable uniquement.

Dépôt PoC correspondant (cité dans l'analyse) : https://github.com/defineid/Wildfire Analyse : writeup-cometchat-xss.html dans ce portfolio.

Faits (tels qu'énoncés dans l'analyse / l'avis)

ChampValeur
CVECVE-2026-39154
Éditeur / ProduitCometChat · JavaScript SDK 3.0.12
ClasseCross-Site Scripting stocké (CWE-79)
Point de terminaisonPOST /v3.0/messages · champ d'injection data.text
DestinatairereceiverType: group
InteractionAucune ; la charge utile stockée s'exécute automatiquement lorsqu'un membre ouvre le groupe
DivulgationSignalé à CometChat en février 2026 (demande 42660) ; l'éditeur a marqué Solved ; CVE attribué par MITRE
Référencehttps://www.cve.org/CVERecord?id=CVE-2026-39154

Remarque sur la version corrigée : l'analyse publiée indique que l'éditeur a résolu le problème (« VENDOR: SOLVED ») mais ne nomme pas de numéro spécifique de SDK/build corrigé, et aucune URL d'avis éditeur distincte n'est fournie au-delà de l'enregistrement CVE ci-dessus. Aucun numéro de version corrigée n'est affirmé ici car l'analyse n'en fournit pas.

Mécanisme (le champ et le sink spécifiques)

Un TextMessage CometChat transporte son texte dans data.text, exposé au code de l'interface sous la forme message.getText(). Un membre authentifié peut envoyer, à un groupe, un message dont le data.text contient du balisage HTML, par exemple :

POST /v3.0/messages
{
  "receiverType": "group",
  "receiver": "<groupId>",
  "category": "message",
  "type": "text",
  "data": { "text": "" }
}

La plateforme stocke cette chaîne telle quelle. Lorsqu'un membre du groupe ouvre la conversation, le chemin de rendu de la liste des messages du client prend data.text et l'insère dans le DOM en tant que HTML, sans encodage contextuel de sortie (une écriture de type innerHTML plutôt qu'une écriture textContent). Le balisage `` est donc analysé ; son src=x échoue à se charger, ce qui déclenche le gestionnaire onerror, et le script de l'attaquant s'exécute dans la session de la victime. Comme le message est stocké, il s'agit d'une attaque persistante qui ne nécessite aucune interaction de la victime au-delà de la consultation du groupe.

Le correctif divulgué assainit / encode contextuellement ce champ, de sorte que la même entrée s'affiche comme du texte inerte au lieu de s'exécuter.

Modèle de menace

Un membre authentifié du groupe est l'attaquant ; les victimes sont les autres membres de ce groupe. La charge utile est livrée une fois, stockée côté serveur, et s'exécute automatiquement dans le navigateur de chaque membre lorsqu'il consulte la conversation. Aucun clic, aucune autorisation, ni aucune interaction supplémentaire n'est requise. Impact dans le rapport d'origine : exécution de script arbitraire dans la session de chaque membre (vol de session/jeton, actions au nom de la victime, divulgation des données de la conversation).

Contenu de ce répertoire

  • repro.html — une page locale brute (fond blanc uni, CSS minimal, une simple zone de liste de messages) qui représente uniquement le chemin de rendu vulnérable du SDK 3.0.12. Elle contient une copie locale fidèle du puits non assaini :

    function getText(message){ return message.data.text; }   // mirrors TextMessage#getText()
    ...
    body.innerHTML = getText(message);   // *** the SDK 3.0.12 sink, reproduced ***
    

    Il rend un objet de message stocké synthétique via ce sink afin que le script injecté s'exécute localement. Une note honnête intégrée à la page indique qu'il s'agit d'une reproduction locale du sink du SDK 3.0.12, que le SDK corrigé assainit le champ, et qu'aucun service CometChat en direct n'est impliqué.

  • payload.json — l'objet TextMessage stocké synthétique. Son champ data.text est le point d'injection (annoté avec les clés _injection_point / _note, puisque JSON ne prend pas en charge les commentaires). Le vecteur d'injection (``) est identique à celui du rapport divulgué ; l'action est remplacée par un marqueur inoffensif dans la page.

  • payload.txt — la même injection documentée en texte brut, incluant la requête forgée d'origine, avec une note explicite indiquant qu'elle n'est envoyée nulle part.

Ce repro.html est un substitut minimal écrit à partir du mécanisme décrit dans l'analyse. Il ne s'agit pas d'un extrait du code source de l'éditeur ; le SDK réel n'a pas été obtenu ni désassemblé pour cette reproduction.

Comment fonctionne la repro locale et comment l'exécuter

La charge utile de cette repro est bénigne : au lieu de alert(document.domain), le gestionnaire onerror définit window.__xss_fired = true, écrit RESULT: XSS-FIRED dans la page et définit le titre du document. Rien n'est exfiltré.

cd poc/CVE-2026-39154
python3 -m http.server 5599
# then open http://localhost:5599/repro.html in a browser

repro.html effectue le rendu synchrone d'une copie embarquée du message stocké (afin que le sink se déclenche de manière déterministe, même en capture headless) et récupère en outre payload.json pour confirmer que l'artefact sur disque se charge et porte le même champ.

Résultat attendu

  • La ligne du message affiche une icône d'image cassée (le `` a été interprété comme du HTML, et non affiché comme du texte), et la page affiche RESULT: XSS-FIRED en rouge — preuve que le script onerror injecté s'est exécuté via le sink innerHTML non assaini.
  • Face au SDK corrigé, le même data.text serait encodé et apparaîtrait comme le texte littéral `` sans exécution de script.

État de la vérification

  • Réalisé dans cet environnement : la repro locale a effectivement été exécutée. payload.json a été validé comme JSON bien formé et confirmé comme portant l'injection dans data.text (un vecteur ). Le répertoire a été servi avec `python3 -m http.server 5599`, et `repro.html` a été chargé dans **Firefox 140.11.0esr headless** via `--screenshot` (enregistré ici sous `repro-screenshot.png`). La capture d'écran obtenue montre le rendu comme un élément d'image cassée (c'est-à-dire que data.text a été interprété comme du HTML, et non affiché comme du texte) et RESULT: XSS-FIRED écrit dans le DOM. Cela confirme que le sink innerHTML non assaini exécute le script injecté depuis le champ du message.
  • NON réalisé dans cet environnement : aucune interaction avec le service CometChat en production ni avec un quelconque tiers n'a eu lieu — rien n'a été envoyé à /v3.0/messages, aucun compte ni groupe n'a été utilisé, et aucune version réelle du SDK n'a été téléchargée, exécutée ou désassemblée. Le sink présent ici est un substitut fidèle écrit à la main, fondé sur le mécanisme décrit dans l'analyse, et non sur le code livré par l'éditeur. La version exacte du SDK corrigé n'a pas été confirmée, car l'analyse n'en indique aucune.

Périmètre et éthique

Télécharger l’outil