Test en boîte noire pour déterminer si un chatbot LLM est vulnérable à une exfiltration markdown/HTML (classe CVE-2025-32711). Met en place un sink, envoie des payloads, affiche dans Chromium headless, corrèle via le réseau.
Testeur en boîte noire pour l'injection indirecte d'invites menant à l'exfiltration de markdown / HTML dans les chatbots basés sur des LLM. Il s'agit de la classe de vulnérabilité qui a touché Microsoft 365 Copilot (CVE-2025-32711, alias EchoLeak), ChatGPT (correctif OpenAI février 2026) et Salesforce (ForcedLeak). Le motif :
 dans sa réponse.Les outils existants (Garak, Augustus, Promptfoo) sont excellents pour tester l'injection au niveau textuel mais ne ferment pas l'oracle côté rendu — « est-ce que votre frontend a effectivement récupéré l'URL de l'attaquant ? ». C'est la véritable vulnérabilité. Cet outil comble ce manque.
npx valtik-markdown-exfil-tester https://votre-chatbot.example.com
N'exécutez pas cet outil contre des chatbots que vous ne possédez pas ou pour lesquels vous n'avez pas d'autorisation écrite explicite. L'utilisation de cet outil contre un chatbot LLM tiers sans autorisation constitue très probablement une violation des conditions d'utilisation du service et peut être illégale dans votre juridiction (CFAA aux États-Unis, Computer Misuse Act au Royaume-Uni, lois similaires dans l'UE).
Cas d'utilisation légitimes :
Valtik Studios LLC décline toute responsabilité en cas d'utilisation non autorisée.
127.0.0.1 sur un port élevé aléatoire. Chaque requête entrante est enregistrée avec horodatage, chemin, requête, en-têtes, Referer, IP, User-Agent.<svg>, un fond CSS, <link rel=prefetch>, etc. pointant vers l'écouteur local.confirmed — l'écouteur a reçu une requête. Critique. L'exfiltration fonctionne.browser-tried — le navigateur a émis la requête mais elle a échoué (CSP, politique de referrer, assainisseur). Moyen. La défense a tenu mais est fragile — ne vous fiez pas uniquement au CSP.llm-emitted — la réponse du LLM contenait l'URL de l'écouteur mais le frontend ne l'a pas rendue comme une récupération. Faible.refused — la réponse du LLM ne contenait pas la charge utile. Défense tenue.inconclusive — pas de réponse du LLM.Exécutez sans installation :
npx valtik-markdown-exfil-tester https://chat.example.com
Ou installez globalement :
npm install -g valtik-markdown-exfil-tester
npx playwright install chromium
markdown-exfil-tester https://chat.example.com
Nécessite Node 20+.
Usage: valtik-markdown-exfil-tester <chatbot-url> [options]
Arguments:
chatbot-url URL de l'endpoint ou de la page du chatbot
Options:
--mode <type> direct | indirect-doc (default: direct)
--endpoint <url> Endpoint API si différent de chatbot-url
--sink-port <n> Port local de l'écouteur (default: port élevé aléatoire)
--payloads <path> Surcharger la bibliothèque de charges utiles JSON
--browser <bin> playwright | none (default: auto-detect)
--auth <cookie> Cookie d'authentification pour le chatbot, si nécessaire
--timeout <s> Attente par charge utile (default 30)
--max-payloads <n> S'arrêter après N charges utiles (default: all)
--rate-limit-ms <n> Délai entre les charges utiles (default 3000)
--out-dir <dir> Répertoire de travail pour indirect-doc (default: /tmp/...)
--user-agent <ua>
--json Sortie lisible par machine
--fail-on <level> Quitter avec code non nul sur sévérité >= niveau (critical|high|medium|low)
-v, --version
-h, --help
direct (v0.1) — Envoie la charge utile directement à l'endpoint du chatbot. Teste l'injection d'invite directe. Signal plus faible qu'indirect, mais rapide.indirect-doc (v0.1) — Écrit chaque charge utile comme un document markdown indépendant dans --out-dir. Vous téléchargez chaque fichier dans la base de connaissances / source RAG / système de tickets / wiki du chatbot, puis interrogez le chatbot. L'outil attend --timeout secondes par charge utile pour une correspondance avec l'ID de cette charge utile.indirect-pr (v0.2, pas encore implémenté) — Automatise la livraison du corps de PR GitHub pour les relecteurs de PR de type Copilot.attach (v0.2, pas encore implémenté) — Télécharge le fichier via le flux de téléchargement du chatbot.# Test rapide avec les 10 premières charges utiles
npx valtik-markdown-exfil-tester https://chat.example.com --max-payloads 10
# Sortie JSON pour CI
npx valtik-markdown-exfil-tester https://chat.example.com --json | jq .findings
# Échouer le job CI sur toute constatation de haute sévérité
npx valtik-markdown-exfil-tester https://chat.example.com --fail-on high
# Mode indirect-doc : générer les docs, les télécharger manuellement, puis relancer
npx valtik-markdown-exfil-tester https://chat.example.com \
--mode indirect-doc --out-dir ./payload-docs --timeout 60
Livré avec plus de 30 modèles couvrant :