
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 (Missing Authorization), CWE-306 |
/api/support/outLink/wechat/ 아래의 세 가지 관리 엔드포인트는
요청에 포함된 shareId만으로 크로스 테넌트 쓰기를 승인합니다. 이 shareId는
FastGPT가 모든 공유 채팅 URL, iframe 및 embed에 출력하는 식별자입니다:
logout — authOutLinkValid로 게이트되며, 이는 존재 여부 확인에 불과하고,
이후 outLink에 저장된 WeChat app.token을 삭제하고 app.status를
오프라인으로 강제합니다. 공개된 shareId를 가진 익명 호출자는 한 번의 요청으로
팀의 채널을 무력화합니다.qrcode/generate — 동일한 존재 여부 확인 게이트만 적용되며, publish:wechat:qrcode:<shareId>에
캐시된 iLink 로그인 QR을 반환합니다.qrcode/status — 인증 호출이 전혀 없음; QR이 확인되면 스캐너의
bot_token / accountId / baseUrl을 shareId로 식별된 outLink에
기록하고 폴링을 시작합니다.QR을 스캔하는 사람이 봇을 선택할 수 있습니다. 공격자의 WeChat으로 스캔하면 피해 팀의 앱이 공격자의 봇에 연결됩니다: 비공개 지식 베이스 답변이 유출되고 피해자의 AI 포인트가 그 비용을 부담합니다.
의존성 없음 — Python 3 표준 라이브러리만 사용합니다.
# 1. 안전한 핑거프린팅 (존재하지 않는 shareId 사용; 취약한 빌드에서는 code 501 linkUnInvalid,
# 패치된 빌드에서는 인증 오류가 예상됨)
python3 poc.py probe --url http://localhost:3000
# 2. 공유 채팅 링크 / iframe / embed에서 공개 shareId 수집
python3 poc.py harvest --target "https://victim.example/chat/share?shareId=XXXX"
python3 poc.py harvest --target saved-page.html
# 3. 단일 요청 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)에서
4.15 라인용 FastGPT를 배포하고, 이미지를 v4.15.1(해당 브랜치의 마지막 취약 릴리스)로
고정합니다. 앱을 만들고, 게시한 다음, 게시 설정에서 WeChat outLink를 추가하고,
probe / dos / hijack을 실행합니다. 실제 iLink 봇 등록을 완료하지 않아도
인증 결함을 관찰할 수 있습니다 — 변경 핸들러에 대한 익명 접근 가능성이 바로 버그입니다.
승인된 테스트 및 방어 검증 용도로만 사용하십시오. 수정 릴리스는 2026년 7월부터 배포되었습니다 — WeChat 채널로 FastGPT를 운영 중이라면 >= 4.15.2(또는 >= 4.14.29)로 업그레이드하고 노출 기간 동안 유지된 모든 채널을 다시 바인딩하십시오.