
CVE-2026-68929の概念実証エクスプロイト。公開されたshareIdを介したFastGPT WeChatチャネルの未認証クロステナント乗っ取りを実証し、チャネルハイジャックとDoSを含みます。
| CVE | CVE-2026-68929(CVSS 4.0 9.3 Critical) |
| Advisory | GHSA-q4pr-3qpg-9q5v |
| 影響を受けるバージョン | FastGPT >= 4.14.10, < 4.14.29 および >= 4.15.0, < 4.15.2 |
| 修正済みバージョン | 4.14.29 および 4.15.2(PR #7260) |
| CWE | CWE-862(認可の欠如)、CWE-306 |
/api/support/outLink/wechat/ 配下の3つの管理エンドポイントは、リクエストで提供されたshareIdのみを使用してクロステナントでの書き込みを認可します。このshareIdは、FastGPTがすべての共有チャットURL、iframe、埋め込みに出力する識別子です。
logout — authOutLinkValidによって保護されていますが、これは存在確認のみであり、その後outLinkに保存されたWeChatのapp.tokenを消去し、app.statusを強制的にオフラインにします。公開されたshareIdを持つ匿名の呼び出し元は、1回のリクエストでチームのチャネルを停止させることができます。qrcode/generate — 同じく存在確認のみのゲート。publish:wechat:qrcode:<shareId>の下にキャッシュされたiLink ログインQRコードを返します。qrcode/status — 認可呼び出しがまったくありません。QRコードが確認されると、スキャナーのbot_token / accountId / baseUrlをshareIdで識別されるoutLinkに書き込み、ポーリングを開始します。QRコードをスキャンした人は誰でもボットを選択できます。攻撃者のWeChatでスキャンすると、被害者チームのアプリが攻撃者のボットにブリッジされます。プライベートなナレッジベースの回答が外部に流出し、被害者のAIポイントがその費用を負担することになります。
依存関係ゼロ — Python 3標準ライブラリのみ。
# 1. 安全にフィンガープリント(存在しないshareIdを使用。脆弱なビルドではコード501 linkUnInvalid、
# 修正済みビルドでは認証エラーが期待されます)
python3 poc.py probe --url http://localhost:3000
# 2. 共有チャットリンク / iframe / 埋め込みから公開shareIdを収集
python3 poc.py harvest --target "https://victim.example/chat/share?shareId=XXXX"
python3 poc.py harvest --target saved-page.html
# 3. 1リクエストでのDoS — チャネルバインディングを消去
python3 poc.py dos --url http://localhost:3000 --share-id XXXX
# 4. チャネル乗っ取り — victim-qr.pngを生成。攻撃者のWeChatでスキャンすると、
# スクリプトはバインディングが切り替わるまでポーリングします
python3 poc.py hijack --url http://localhost:3000 --share-id XXXX
リポジトリの公式composeテンプレート(deploy/version/v4.15/docker-compose.template.yml)からFastGPT 4.15系をデプロイし、イメージをv4.15.1(そのブランチの最後の脆弱なリリース)に固定します。アプリを作成して公開し、公開設定でWeChat outLinkを追加してから、probe / dos / hijackを実行します。実際のiLinkボット登録を完了する必要はありません。認可の欠陥を観察するには、変更を加えるハンドラーへの匿名での到達可能性が問題となるためです。
認可されたテストおよび防御の検証のみを目的としています。修正済みリリースは2026年7月から公開されています。WeChatチャネルでFastGPTを実行している場合は、>= 4.15.2(または>= 4.14.29)にアップグレードし、露出期間中に存在したチャネルを再バインドしてください。