
Prueba de concepto del exploit para CVE-2026-68929, que demuestra la toma de control no autenticada entre inquilinos de los canales de WeChat de FastGPT mediante un shareId público, incluyendo el secuestro del canal y la denegación de servicio (DoS).
| CVE | CVE-2026-68929 (CVSS 4.0 9.3 Crítico) |
| Aviso | GHSA-q4pr-3qpg-9q5v |
| Afectado | FastGPT >= 4.14.10, < 4.14.29 y >= 4.15.0, < 4.15.2 |
| Corregido | 4.14.29 y 4.15.2 (PR #7260) |
| CWE | CWE-862 (Autorización faltante), CWE-306 |
Informe completo: https://www.hunt-benito.com/blog/your-bot-my-inbox-cve-2026-68929-fastgpt-unauthenticated-wechat-channel-hijack/
Tres endpoints de gestión bajo /api/support/outLink/wechat/ autorizan
escrituras entre inquilinos usando únicamente el shareId proporcionado en la
solicitud — el identificador que FastGPT imprime en cada URL de chat compartido,
iframe y embed:
logout — protegido por authOutLinkValid, una verificación de existencia únicamente, y luego
elimina el app.token de WeChat almacenado del outLink y fuerza app.status
a modo offline. Cualquier llamador anónimo con el shareId público elimina el
canal de un equipo en una sola solicitud.qrcode/generate — misma protección de solo existencia; devuelve un QR de inicio de sesión de iLink
almacenado en caché bajo publish:wechat:qrcode:<shareId>.qrcode/status — sin llamada de autorización en absoluto; cuando el QR es
confirmado, escribe el bot_token / accountId / baseUrl del escáner
en el outLink identificado por shareId y comienza a sondear.Quien escanee el QR decide qué bot se usa. Escanéalo con el WeChat del atacante y la aplicación del equipo víctima se conecta al bot del atacante: las respuestas de la base de conocimientos privada fluyen hacia afuera y los puntos de IA de la víctima los pagan.
Cero dependencias — solo biblioteca estándar de Python 3.
# 1. Huella digital segura (shareId inexistente; espera código 501 linkUnInvalid
# en builds vulnerables, un error de autenticación en los parcheados)
python3 poc.py probe --url http://localhost:3000
# 2. Recopila un shareId público de un enlace / iframe / embed de chat compartido
python3 poc.py harvest --target "https://victim.example/chat/share?shareId=XXXX"
python3 poc.py harvest --target saved-page.html
# 3. DoS de una sola solicitud — elimina el enlace del canal
python3 poc.py dos --url http://localhost:3000 --share-id XXXX
# 4. Secuestro del canal — genera victim-qr.png; escanéalo con el WeChat del
# ATACANTE, el script sondea hasta que el enlace cambia
python3 poc.py hijack --url http://localhost:3000 --share-id XXXX
Despliega FastGPT desde la plantilla compose oficial del repositorio para la
línea 4.15 (deploy/version/v4.15/docker-compose.template.yml), fijando la imagen
a v4.15.1 (la última versión vulnerable de esa rama). Crea una aplicación,
publícala, añade un outLink de WeChat en la configuración de publicación y luego
ejecuta probe / dos / hijack contra ella. Completar un registro real de bot
iLink no es necesario para observar el defecto de autorización — la accesibilidad
anónima de los manejadores mutantes es el fallo.
Solo para pruebas autorizadas y validación de defensa. Las versiones corregidas están disponibles desde julio de 2026 — si ejecutas FastGPT con el canal WeChat, actualiza a >= 4.15.2 (o >= 4.14.29) y vuelve a vincular cualquier canal que haya estado activo durante la ventana de exposición.