
Prova de conceito de exploit para CVE-2026-68929, demonstrando a tomada não autenticada entre tenants de canais WeChat do FastGPT via shareId público, incluindo sequestro de canal e DoS.
| CVE | CVE-2026-68929 (CVSS 4.0 9.3 Crítico) |
| Advisory | GHSA-q4pr-3qpg-9q5v |
| Afetado | FastGPT >= 4.14.10, < 4.14.29 e >= 4.15.0, < 4.15.2 |
| Corrigido | 4.14.29 e 4.15.2 (PR #7260) |
| CWE | CWE-862 (Autorização Ausente), CWE-306 |
Três endpoints de gerenciamento sob /api/support/outLink/wechat/ autorizam
gravações entre inquilinos usando apenas o shareId fornecido na requisição —
o identificador que o FastGPT insere em toda URL, iframe e embed de chat
compartilhado:
logout — protegido por authOutLinkValid, uma verificação de existência
apenas, que em seguida apaga o app.token WeChat armazenado do outLink e
força o app.status para offline. Qualquer chamador anônimo com o shareId
público derruba o canal de uma equipe em uma única requisição.qrcode/generate — mesma proteção apenas de existência; retorna um QR de
login do iLink armazenado em cache sob publish:wechat:qrcode:<shareId>.qrcode/status — nenhuma chamada de autorização; quando o QR é
confirmado, grava o bot_token / accountId / baseUrl do leitor no
outLink identificado pelo shareId e inicia o polling.Quem escanear o QR escolhe o bot. Escaneie-o com o WeChat do atacante e o app da equipe vítima é conectado ao bot do atacante: respostas da base de conhecimento privada vazam e os pontos de IA da vítima pagam por isso.
Zero dependências — apenas biblioteca padrão do Python 3.
# 1. Fingerprint seguro (shareId inexistente; espere o código 501 linkUnInvalid
# em builds vulneráveis, um erro de autenticação nos corrigidos)
python3 poc.py probe --url http://localhost:3000
# 2. Colete um shareId público de um link / iframe / embed de chat compartilhado
python3 poc.py harvest --target "https://victim.example/chat/share?shareId=XXXX"
python3 poc.py harvest --target saved-page.html
# 3. DoS em uma requisição — apaga o vínculo do canal
python3 poc.py dos --url http://localhost:3000 --share-id XXXX
# 4. Sequestro de canal — gera victim-qr.png; escaneie-o com o WeChat do
# ATACANTE, o script faz polling até o vínculo ser trocado
python3 poc.py hijack --url http://localhost:3000 --share-id XXXX
Implante o FastGPT a partir do template compose oficial do repositório para a
linha 4.15 (deploy/version/v4.15/docker-compose.template.yml), fixando a
imagem em v4.15.1 (a última versão vulnerável desse branch). Crie um app,
publique-o, adicione um outLink WeChat nas configurações de publicação e então
execute probe / dos / hijack contra ele. Concluir um registro real de bot
iLink não é necessário para observar o defeito de autorização — a
acessibilidade anônima dos handlers de mutação é o bug.
Apenas para testes autorizados e validação de defesa. As versões corrigidas estão disponíveis desde julho de 2026 — se você executa o FastGPT com o canal WeChat, atualize para >= 4.15.2 (ou >= 4.14.29) e re-vincule qualquer canal que tenha existido durante a janela de exposição.