
Preuve de concept d'exploitation pour CVE-2026-68929, démontrant la prise de contrôle inter-locataires non authentifiée des canaux WeChat FastGPT via un shareId public, incluant le détournement de canal et le déni de service (DoS).
| CVE | CVE-2026-68929 (CVSS 4.0 9.3 Critique) |
| Avis de sécurité | GHSA-q4pr-3qpg-9q5v |
| Versions concernées | FastGPT >= 4.14.10, < 4.14.29 et >= 4.15.0, < 4.15.2 |
| Correctif | 4.14.29 et 4.15.2 (PR #7260) |
| CWE | CWE-862 (Autorisation manquante), CWE-306 |
Analyse complète : https://www.hunt-benito.com/blog/your-bot-my-inbox-cve-2026-68929-fastgpt-unauthenticated-wechat-channel-hijack/
Trois points de terminaison d'administration sous /api/support/outLink/wechat/ autorisent des écritures inter-tenant en utilisant uniquement le shareId fourni dans la requête — l'identifiant que FastGPT affiche dans chaque URL de chat partagé, iframe et embed :
logout — protégé par authOutLinkValid, un simple contrôle d'existence, puis efface le app.token WeChat stocké de l'outLink et force app.status hors ligne. Tout appelant anonyme disposant du shareId public neutralise le canal d'une équipe en une seule requête.qrcode/generate — même contrôle d'existence uniquement ; renvoie un QR de connexion iLink mis en cache sous publish:wechat:qrcode:<shareId>.qrcode/status — aucun appel d'autorisation du tout ; lorsque le QR est confirmé, il écrit le bot_token / accountId / baseUrl du scanneur dans l'outLink identifié par le shareId et commence à interroger.Celui qui scanne le QR choisit le bot. Scannez-le avec le WeChat de l'attaquant et l'application de la victime est reliée au bot de l'attaquant : les réponses de la base de connaissances privée sortent et les points IA de la victime les paient.
Zéro dépendance — uniquement la bibliothèque standard Python 3.
# 1. Empreinte en toute sécurité (shareId inexistant ; attendre le code 501 linkUnInvalid
# sur les versions vulnérables, une erreur d'authentification sur les versions corrigées)
python3 poc.py probe --url http://localhost:3000
# 2. Collecter un shareId public à partir d'un lien de chat partagé / iframe / embed
python3 poc.py harvest --target "https://victim.example/chat/share?shareId=XXXX"
python3 poc.py harvest --target saved-page.html
# 3. Déni de service en une requête — efface la liaison du canal
python3 poc.py dos --url http://localhost:3000 --share-id XXXX
# 4. Détournement de canal — génère victim-qr.png ; scannez-le avec le WeChat de l'ATTAQUANT,
# le script interroge jusqu'à ce que la liaison bascule
python3 poc.py hijack --url http://localhost:3000 --share-id XXXX
Déployez FastGPT à partir du modèle compose officiel du dépôt pour la branche 4.15 (deploy/version/v4.15/docker-compose.template.yml), en épinglant l'image à v4.15.1 (la dernière version vulnérable de cette branche). Créez une application, publiez-la, ajoutez un outLink WeChat dans les paramètres de publication, puis exécutez probe / dos / hijack contre elle. Terminer un véritable enregistrement de bot iLink n'est pas nécessaire pour observer le défaut d'autorisation — l'accessibilité anonyme des gestionnaires de mutation est le bug.
Pour les tests autorisés et la validation de défense uniquement. Les versions corrigées sont disponibles depuis juillet 2026 — si vous exécutez FastGPT avec le canal WeChat, mettez à niveau vers >= 4.15.2 (ou >= 4.14.29) et reliez tout canal qui a existé pendant la fenêtre d'exposition.