
Proof-of-Concept-Exploit für CVE-2026-68929, das die nicht authentifizierte Übernahme von FastGPT-WeChat-Kanälen über öffentliche shareId demonstriert, einschließlich Kanal-Hijacking und DoS.
| CVE | CVE-2026-68929 (CVSS 4.0 9.3 Kritisch) |
| Advisory | GHSA-q4pr-3qpg-9q5v |
| Betroffen | FastGPT >= 4.14.10, < 4.14.29 und >= 4.15.0, < 4.15.2 |
| Behoben | 4.14.29 und 4.15.2 (PR #7260) |
| CWE | CWE-862 (Fehlende Autorisierung), CWE-306 |
Drei Verwaltungs-Endpunkte unter /api/support/outLink/wechat/ autorisieren
mandantenübergreifende Schreibvorgänge ausschließlich über die anfragegelieferte shareId —
die Kennung, die FastGPT in jede Freigabe-Chat-URL, jedes Iframe und jeden Embed einfügt:
logout — geschützt durch authOutLinkValid, eine reine Existenzprüfung, die dann
das gespeicherte WeChat-app.token des outLink löscht und app.status auf
offline erzwingt. Jeder anonyme Aufrufer mit der öffentlichen shareId beendet den
Kanal eines Teams mit einer einzigen Anfrage.qrcode/generate — gleiche reine Existenzprüfung; gibt einen iLink-Login-QR zurück,
der unter publish:wechat:qrcode:<shareId> zwischengespeichert wird.qrcode/status — überhaupt kein Autorisierungsaufruf; wenn der QR
bestätigt wird, schreibt er das bot_token / accountId / baseUrl des Scanners
in den durch die shareId identifizierten outLink und beginnt mit dem Polling.Wer den QR scannt, darf den Bot wählen. Scannt man ihn mit dem WeChat des Angreifers, wird die App des Opfer-Teams mit dem Bot des Angreifers verbunden: Antworten aus der privaten Wissensdatenbank fließen nach außen und die KI-Punkte des Opfers zahlen dafür.
Null Abhängigkeiten — nur Python-3-Standardbibliothek.
# 1. Sicher fingerprinten (nicht vorhandene shareId; bei verwundbaren Builds
# Code 501 linkUnInvalid erwarten, bei gepatchten einen Auth-Fehler)
python3 poc.py probe --url http://localhost:3000
# 2. Eine öffentliche shareId aus einem Freigabe-Chat-Link / Iframe / Embed sammeln
python3 poc.py harvest --target "https://victim.example/chat/share?shareId=XXXX"
python3 poc.py harvest --target saved-page.html
# 3. DoS mit einer Anfrage — löscht die Kanalbindung
python3 poc.py dos --url http://localhost:3000 --share-id XXXX
# 4. Kanalübernahme — erzeugt victim-qr.png; mit dem WeChat des ANGREIFERS
# scannen, das Skript pollt, bis die Bindung umschlägt
python3 poc.py hijack --url http://localhost:3000 --share-id XXXX
FastGPT aus der offiziellen Compose-Vorlage des Repositorys für die 4.15-Linie
(deploy/version/v4.15/docker-compose.template.yml) bereitstellen und das Image
auf v4.15.1 pinnen (die letzte verwundbare Version dieses Zweigs). Eine App
erstellen, veröffentlichen, in den Veröffentlichungseinstellungen einen WeChat-outLink
hinzufügen und dann probe / dos / hijack dagegen ausführen. Eine vollständige
echte iLink-Bot-Registrierung ist nicht erforderlich, um den Autorisierungsfehler zu
beobachten — die anonyme Erreichbarkeit der mutierenden Handler ist der Fehler.
Nur für autorisierte Tests und Verteidigungsvalidierung. Die behobenen Versionen sind seit Juli 2026 verfügbar — wenn Sie FastGPT mit dem WeChat-Kanal betreiben, aktualisieren Sie auf >= 4.15.2 (oder >= 4.14.29) und binden Sie jeden Kanal neu, der im Expositionsfenster aktiv war.