Vulnerability Detail Report
Vulnerability Overview
- ZDID: ZD-2025-01069
- Vendor: 闇翼科技有限公司
- Title: Fansone Stored XSS & 多個漏洞問題
- Introduction: Stored XSS & 多個漏洞問題
處理狀態
目前狀態
-
新提交
-
已審核
-
已通報
-
已修補
-
未複測
-
公開
處理歷程
- 2025/08/26 13:00:29 : 新提交 (由 CheN.. 更新此狀態)
- 2025/08/26 13:01:31 : 新提交 (由 CheN.. 更新此狀態)
- 2025/08/26 13:02:56 : 新提交 (由 CheN.. 更新此狀態)
- 2025/08/26 13:03:12 : 新提交 (由 CheN.. 更新此狀態)
- 2025/08/26 13:06:58 : 新提交 (由 CheN.. 更新此狀態)
- 2025/08/26 13:09:02 : 新提交 (由 CheN.. 更新此狀態)
- 2025/08/29 14:30:35 : 審核完成 (由 HITCON ZeroDay 服務團隊 更新此狀態)
- 2025/09/03 16:29:57 : 通報未回應 (由 HITCON ZeroDay 服務團隊 更新此狀態)
- 2025/09/03 16:29:57 : 審核完成 (由 HITCON ZeroDay 服務團隊 更新此狀態)
- 2025/09/03 16:29:57 : 通報未回應 (由 HITCON ZeroDay 服務團隊 更新此狀態)
- 2025/09/04 11:33:36 : 已修補 (由 HITCON ZeroDay 服務團隊 更新此狀態)
- 2025/09/12 03:00:21 : 公開 (由 HITCON ZeroDay 平台自動更新)
詳細資料
- ZDID:ZD-2025-01069
- 通報者:SamChen_696 (CheN..)
- 風險:高
- 類型:預存式跨站腳本攻擊 (Stored Cross-Site Scripting)
參考資料
漏洞說明: OWASP - Cross-site Scripting (XSS)
https://www.owasp.org/index.php/Cross-site_Scripting_(XSS)
防護原則:
https://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet
XSS 防禦繞過方式:
https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet
相關網址
https://static.fansone.co/chenchen/bigdick57.html
敘述
備註:已寄信至客服信箱,確保漏洞得到妥善修復,同步通報至hitcon平台
問題一:主站 "fansone.co" 文章/留言區 存在Stored XSS
概述
文章區域的 HTML Encode 機制很奇耙只有在前端 Encode,我從burp suite送出封包的時候再修改成原來沒有轉譯過的Payload "<img src="x" onerror="console.log('XSS_IMG_OK', document.domain)">" (我怕影響到其他用戶沒用alert,這裡使用console.log [可以打開 DevTools 到Console查看]),而留言區則是完全沒有做 Encode 可以直接注入Payload;兩個因素造成 Stored XSS 問題,由於留言區也存在此問題故為高風險漏洞攻擊者可以玩的點很多 (Ex: 任意呼叫API 或是竊取用戶Cookie [只是舉其二種攻擊手法])。Clickjacking也是能做到的 因為同源的關係所以會是已登入的狀態。影響涉及全站 可以在其他人文章底下隨意留言 !
重製步驟
-
已登入帳號發文或留言輸入以下Payload "<img src="x" onerror="console.log('XSS_IMG_OK', document.domain)">"
-
打開瀏覽器 DevTools Console 出現 XSS_IMG_OK fansone.co 的紀錄。
PoC
文章網址 https://fansone.co/post/1180835086
各種測試Payload截圖
影響
竊取用戶Cookie、在同源執行任意 Javascript、Clickjacking
問題二: Bucket 可任意上傳檔案並執行 Javascript 造成 XSS & Malicious File Hosting
概述
static.fansone.co 允許上傳任意檔案 可回應為 text/html 並 inline 執行。造成網域託管惡意頁面。
重製步驟
-
送出 multipart 請求建立 HTML;POST /v0/b/static.fansone.co/o?name=chenchen%2Fbigdick57.html HTTP/2 Host: firebasestorage.googleapis.com
contentType 修改為 text/html 並更改url副檔名,輸入Payload
--39887880697272167207700505427055
Content-Type: text/html<h1>CheN.. Vulnerability PoC</h1>
<img src=x onerror=alert(document.domain)> -
瀏覽https://static.fansone.co/chenchen/bigdick57.html 出現alert彈窗,且成功插入任意Html標籤。惡意檔案託管當然也是可行的
PoC
https://static.fansone.co/chenchen/bigdick57.html
上傳圖片完整封包
截圖佐證
影響
品牌釣魚:攻擊者能將假登入網頁、詐騙活動頁掛在 static.fansone.co,大幅提高可信度與點擊率。
惡意檔託管:任何可執行檔、巨集文件皆可透過官方網域散佈,使用者難以分辨。
問題三:允許載入外部圖片導致用戶 IP 洩漏
概述
PUT /api/user HTTP/2 Host: fansone.co 是可以變更個人檔案(包括頭貼 avatar)的 API 請求,發現它可接受任意外部網域的圖片 URL 作為頭貼,讓用戶瀏覽時其瀏覽器會直接向第三方伺服器發送請求,代表攻擊者可以在使用者不知情的情況下收集他們的 IP 和 User-Agent。
PoC
變更個人檔案的完整封包請求
瀏覽器向我的網站發出GET請求
我網站後台的Log紀錄
影響
可以大量收集fansone用戶的 IP 和 User-Agent。
問題四:HLS 串流未授權保護(無簽名 加密)存在外流風險
概述
付費影片以 HLS(.m3u8 + .ts)提供,但 master.m3u8 和各 segment-N.ts 在未登入、無時效 Token 的情況下可直接訪問取得,段檔不含帳號名稱浮水印。如果有心人士外流影片的 UUID 路徑其他人即可拼回完整影片 會增加外流風險。
重製步驟(僅對我已購買之影片做驗證)
-
播放影片時打開 DevTools 找尋 https://video7.fansone.co/video7.fansone.co/<UUID>/master.m3u8 與對應 video_1.m3u8、video_1/segment-0.ts。
-
使用無痕視窗(未登入)直接造訪上述 m3u8 與部分 .ts 狀態皆為 200 OK。
-
以工具重組影片 (Ex: ffmpeg)
-
確認影片繞過網站的帳號名稱浮水印限制
PoC
可以使用我撰寫的 Expolit 腳本進行測試,程式把解析 下載 合併 多個步驟整合在一起 使用方法只需提供影片的UUID並設定輸出格式 (Ex: python hls_poc_grabber.py --uuid e7f39612-3d2a-4af7-9d74-9a0ca6565ce3 --out out2.mp4)
(.py文件和影片佐證提供於EMAIL附件中)
影響
繞過帳號名稱浮水印限制:浮水印僅為播放器疊圖,對直連段檔無效。
如果有心人士外流UUID 非授權使用者可取得完整付費內容造成營收損失。
修補建議
***針對問題1***
在後端正確實施HTML encoding
僅允許安全標籤與屬性:移除所有 on* 事件。
-----------------------------------------------------------------------------------------------------
***針對問題2***
後端白名單:僅接受 image/jpeg | png;拒絕 text/html、可執行壓縮檔。
-----------------------------------------------------------------------------------------------------
***針對問題3***
API 僅允許來自 限定信任網域(Ex: static.fansone.co) 的圖片 URL 作為頭貼來源,避免使用者自行指定任意外部網址。
-----------------------------------------------------------------------------------------------------
***針對問題4***
對 m3u8 與所有 .ts 啟用 短時效簽名 URL
使用 HLS 加密(AES-128 / SAMPLE-AES),金鑰由授權 API 短時效發放定期輪換