觀點 · 資訊分享

Postiz 上傳漏洞:登入者就能傳 HTML 攻擊同團隊,請升級 2.21.6(專案 4/12 已公告)

自架社群排程工具 Postiz 2.21.6 修補了 CVE-2026-40487:登入的使用者可偽造檔案類型上傳 HTML 或 SVG,造成儲存型 XSS。專案早在 4 月 12 日就已發布安全公告與修補版,NVD 到 4 月 18 日才收錄這筆 CVE。

發布
2026-04-19
篇幅
約 4 分鐘 · 1,818 字
結構
9 節 + 4 題常見問題
標籤
#Postiz#CVE-2026-40487#XSS#自架服務
Postiz 上傳漏洞:登入者就能傳 HTML 攻擊同團隊,請升級 2.21.6(專案 4/12 已公告)

一句話看懂:自架的社群排程工具 Postiz 有個上傳漏洞,任何登入的人都能偽造檔案類型,傳上惡意的 HTML,攻擊同團隊的其他人;專案早在 4 月 12 日就修好了,但 CVE 資料到 4 月 18 日才出現。

Postiz 檔案上傳 XSS 漏洞資訊圖卡:偽造檔案類型就能傳 HTML,造成儲存型 XSS,可能奪取他人帳號

先用白話講:儲存型 XSS 是什麼?

想像一間公司有個公布欄,任何員工都可以貼東西。有人貼了一張看起來正常的紙,背面卻藏了機關,誰把它翻過來看,就會被偷偷拿走身上的通行證。更糟的是,這張紙會一直貼在那裡,之後每個看到的人都可能中招。

這就是儲存型 XSS:攻擊者把惡意內容放進網站,之後每個打開它的人,瀏覽器都會替攻擊者執行惡意程式碼。

發生什麼事(先看時間軸)

這則新聞有個容易誤會的地方:它不是 4 月 18 日才發現的。

日期 事件
4 月 10 日 Postiz 收到漏洞通報
4 月 12 日 Postiz 完成修補、發布 2.21.6,並公開安全公告
4 月 14 日 GitHub 核發 CVE-2026-40487
4 月 18 日 NVD 收錄這筆 CVE

所以如果你是在 4 月 12 日之後才更新的,其實早就修好了;如果你還沒更新,現在就是最好的時機。

漏洞是怎麼回事?

  • 前提:只要是登入的使用者,不需要管理員權限。
  • 做法:偽造上傳檔案的 Content-Type 標頭,就能上傳 HTML、SVG 等本來不該收的檔案。
  • 後果:伺服器(nginx)會依照原本的副檔名回應,例如 text/html,瀏覽器就會把它當網頁執行,形成儲存型 XSS。
  • 影響:官方說可能造成工作階段被劫持(session riding)、帳號被接管,甚至完全控制其他使用者的帳號。

公告提到的實際危害

  • 受害者點開上傳連結後,攻擊者可以把自己邀請成團隊管理員。
  • 刪除團隊所有貼文與整合。
  • 取得完整 API 權限並冒用受害者。
  • 公告也提到:登入用的 JWT 沒有到期時間(永不過期),上傳的檔案也永久保存且不用登入就能存取,所以任何人都可能隨時被鎖定為目標。

該怎麼辦?

做法 說明
升級到 2.21.6 以上 官方的修補方式
暫時停用檔案上傳 官方列的部分緩解做法
讓 /uploads/ 以下載方式回應 加上 Content-Disposition: attachment 與嚴格的 CSP,避免瀏覽器直接顯示

官方明說:2.21.6 之前沒有可靠的替代方案,上面兩項只是部分緩解。

給開發者的技術細節

  • 弱點類型:檔案上傳驗證不足(信任客戶端傳來的 Content-Type)。
  • 嚴重度:GitHub 公告列為 Critical、CVSS 9.0;NVD 收錄的 GitHub 評分為 8.9(CVSS 3.1,需要使用者互動)。
  • 啟示:檢查上傳檔案時,不要只看客戶端宣告的類型,要看副檔名與實際內容,並且上傳目錄的回應標頭要設成不會被當成網頁執行。

我的看法

我自己做網站時也常寫上傳功能,這類漏洞特別眼熟:只檢查 Content-Type 就放行,看似合理,卻很容易被偽造。比較穩的做法是副檔名白名單加內容檢查,而且上傳目錄一律用下載方式回應、並放在和主網站不同的網域,這樣就算有人傳了 HTML,也不會在主站的身分下執行。

另外,如果你有自架服務,這則新聞也提醒一件事:安全公告不一定同步出現在 CVE 資料庫,等 CVE 才更新就慢了。訂閱專案的 GitHub Release 與 Security Advisories 比較實際。

名詞小辭典

  • XSS(跨站腳本):讓網站在受害者的瀏覽器裡執行攻擊者寫的程式碼。
  • Content-Type:告訴瀏覽器或伺服器「這個檔案是什麼類型」的標頭,可以被客戶端偽造。
  • CSP(內容安全政策):網站用來限制瀏覽器能載入或執行哪些內容的規則。
  • GHSA:GitHub Security Advisory,專案在 GitHub 上發布的安全公告編號。

資料來源

常見問題

Postiz 是什麼?
它是一套 AI 社群貼文排程工具,可以自己架在伺服器上,用來規劃與發布社群平台的貼文。
XSS 是什麼?為什麼是「儲存型」?
XSS 是讓網站在受害者的瀏覽器裡執行攻擊者的程式碼。「儲存型」指惡意內容被存在伺服器上,之後每個點開的人都會中。
這個漏洞什麼時候公開的?
專案在 2026 年 4 月 12 日就公開了安全公告並發布 2.21.6,GitHub 4 月 14 日核發 CVE 編號,NVD 到 4 月 18 日才收錄。所以這不是 4 月 18 日才被發現的新漏洞。
升級之前可以怎麼降低風險?
官方說沒有可靠的替代方案。可部分緩解的做法是停用檔案上傳,或讓 /uploads/ 的回應加上 Content-Disposition: attachment 與嚴格的內容安全政策(CSP),避免瀏覽器直接顯示上傳的檔案。
LINE