安全與隱私 · Clash 技術部落格

Clash Party 內建 Sub-Store 風險怎麼處理?

使用 Clash Party 內建 Sub-Store 時,應核對後端版本。公開報告涉及 2.11.4–2.37.1;本文說明停用、更新至 2.38.0 以上和限制本機存取的方法,並提供證據保留與安全復原步驟。

  • Clash Party
  • Sub-Store
  • 安全更新
  • 本機 API
  • CORS
本文目錄

先確認公開報告涵蓋的範圍

Sub-Store issue #634 的公開報告把受影響範圍寫為 Node 後端 2.11.4 至 2.37.1,並描述了過寬的跨來源存取與指令碼處理能力組合後的風險。上游隨後用提交 038745f 收緊預設 CORS、限制部分 Node 指令碼操作並增加拒絕測試,2.38.0 的發布說明明確關閉該 issue。

截至 2026 年 9 月 12 日,Sub-Store 目前穩定版是 2.39.6。本文把 2.38.0 作為上游明確關閉 #634 的最低版本邊界,並建議更新到目前穩定版;這不等於 2.38.0 為所有網路暴露增加了認證,也不能據版本號判斷裝置是否已經受到影響。

Clash Party issue #2134 是一條針對 v2.0.2 環境的使用者報告,隨後按專案安全報告流程由機器人關閉,貢獻者建議更新 Sub-Store。Clash Party 可以獨立更新內建後端,所以只看用戶端版本無法確定正在執行的 Sub-Store 版本。

v2.0.2 原始碼把內建 Sub-Store 設為預設啟用,但實際狀態仍以本機設定和監聽結果為準。沒有開啟過頁面、隱藏入口或刪除一條訂閱,都不等於後端已經停用。

先把事實分開

看到的資訊能得出的結論不能據此斷言
Sub-Store 版本為 2.11.4 至 2.37.1落在公開報告範圍,應停止暴露並更新裝置已經被利用或感染
Clash Party 顯示 v2.0.2需要繼續核對內建後端所有 v2.0.2 安裝使用同一後端版本
Sub-Store 已到 2.38.0 以上包含上游關閉 #634 的緩解任何網路來源都已受到身分驗證與存取控制保護
沒有異常處理程式或彈窗暫未觀察到明顯症狀舊後端繼續執行沒有風險
公開報告所描述的本機 Sub-Store 請求路徑
  1. 不受信任的網頁瀏覽器中開啟的外部頁面發起跨來源請求
  2. 瀏覽器來源檢查舊版 Node 後端預設允許過寬的來源
  3. 本機 Sub-Store APIClash Party 啟動的獨立前後端服務
  4. 指令碼處理能力訂閱處理上下文可能執行指令碼操作

2.38.0 收緊了預設來源範圍並限制部分指令碼操作,但 CORS 不是 API 身分驗證或存取控制;還應關閉區域網路存取,無法確認版本時直接停用 Sub-Store。

核對前先停用 Sub-Store

如果 Clash Party 正在執行 Sub-Store,但你還不知道後端版本,先關閉不受信任的網頁,不要尋找或執行公開利用程式碼。開啟 Clash Party 的“設定 > Sub-Store”,關閉“啟用 Sub-Store”;官方原始碼顯示,這個動作會停止內建前端和後端服務。

同時確認“允許區域網路存取”保持關閉。該選項開啟時服務會綁定 0.0.0.0,區域網路裝置可直接存取;關閉時使用 127.0.0.1。公開報告包含瀏覽器頁面存取回環位址的路徑,所以只關區域網路存取不能代替更新,但它能避免繼續擴大網路暴露面。

Sub-Store 是訂閱編輯、轉換和管理工具,不是 Mihomo 核心本身。停用後,已經匯入 Clash Party 的 Profile、策略群組、系統代理和 TUN 通常仍可繼續工作,只是不能繼續使用 Sub-Store 頁面處理訂閱。

先形成可還原的安全狀態

  1. 關閉不受信任的網頁

    保留本文和專案官方頁面即可,不測試任何來源不明的請求、指令碼或所謂檢測站。

  2. 關閉啟用開關

    進入設定的 Sub-Store 區域,關閉“啟用 Sub-Store”,等待前後端停止。

  3. 關閉區域網路存取

    確認“允許區域網路存取”未開啟,後續重新啟用時也只綁定 127.0.0.1。

  4. 重啟並驗證普通代理

    重新開啟 Clash Party,使用現有 Profile 完成一次實際 HTTPS 請求,確認停用 Sub-Store 沒有破壞日常代理。

記錄實際後端版本與監聽位址

準備更新時,先在「設定 > Sub-Store」確認使用的是內建後端還是自訂後端。內建模式由 Clash Party 啟動本機 bundle;自訂模式會停止內建後端並連線使用者填寫的 URL,應用內更新不能替代外部部署端自己的升級、監聽限制、身分驗證與存取控制。

使用內建後端時,確保不受信任的網頁已經關閉,再臨時啟用 Sub-Store,並保持該設定區的“允許區域網路存取”關閉。進入 Sub-Store 頁面使用“在瀏覽器中開啟”,以介面給出的實際位址為準,不要假設每台裝置都固定使用同一個連接埠。

Clash Party v2.0.2 原始碼顯示,後端預設從 127.0.0.1:38324 開始尋找可用連接埠,若連接埠已佔用會繼續遞增。開啟後端根位址時,Sub-Store 的回應會在 data.version 中給出實際版本;只記錄版本和位址,不提交指令碼參數或進行利用測試。

若版本落在 2.11.4 至 2.37.1,應立即更新;若版本低於 2.11.4,雖不在該報告範圍,也已經明顯落後,應更新到目前穩定版;若頁面打不開或版本無法確認,則回到停用狀態,不要把“未知”當成安全。

先區分後端模式

目前模式誰負責執行正確處理
內建後端Clash Party 本機服務應用內更新、關閉 Sub-Store Allow LAN、核對本機版本
自訂後端使用者填寫的外部部署在部署端獨立更新、限制監聽並設定身分驗證與存取控制
不使用 Sub-Store不應有前後端服務關閉啟用開關並在重啟後驗證停止

後端顯示 2.11.4 至 2.37.1

屬於公開報告範圍,保持僅限本機並立即執行上游更新。

後端顯示 2.38.0 或以上

已越過 #634 的官方關閉下限,繼續核對目前穩定版和監聽範圍。

只知道 Clash Party v2.0.2

資訊不足;同一用戶端版本可能執行不同的 Sub-Store 後端。

瀏覽器位址不是 127.0.0.1

先停用服務,關閉 Allow LAN,再檢查設定或其他監聽者。

頁面或版本回應無法開啟

不要反覆暴露服務,保持停用並從官方更新路徑重試。

在 Clash Party 內更新 Sub-Store

下面的步驟只適用於 Clash Party 內建後端。Sub-Store 頁面右上角有雲形“檢查更新”按鈕;v2.0.2 原始碼顯示,該入口會從 sub-store-org/Sub-Store 官方 Release 的 latest 下載後端與前端檔案,完成後重啟兩項服務。

按一下更新後等待完成提示,不在中途退出用戶端,也不要同時手動覆蓋應用目錄中的 bundle。最低目標是 2.38.0,目前目標是 2026 年 9 月 11 日發布的 2.39.6;若未來已有更新穩定版,應以官方 Releases 為準。

更新 Mihomo 核心、重新整理訂閱或重新安裝相同的 Clash Party 用戶端,都不能替代核對 Sub-Store 後端。它是獨立下載和執行的元件,必須在自己的頁面完成更新並讀取自己的版本號。

只走應用內的官方更新路徑

  1. 保持本機監聽

    確認 Allow LAN 關閉,並關閉其他不受信任的瀏覽器頁面。

  2. 按一下檢查更新

    在 Sub-Store 頁面按一下右上雲形按鈕,等待下載、重啟和完成提示。

  3. 重新讀取版本

    再次使用頁面給出的實際後端位址,確認 data.version 不低於 2.38.0。

  4. 更新失敗就停用

    若下載、重啟或版本核對失敗,關閉“啟用 Sub-Store”,不要降級或從第三方複製檔案。

更新後驗證版本、監聽與停用開關

更新提示成功只是第一層驗證。重啟 Clash Party 後,再從 Sub-Store 頁面讀取實際後端位址和 data.version,確認版本沒有回到舊值;同時確認位址使用 127.0.0.1,而不是區域網路位址或 0.0.0.0。

然後關閉“啟用 Sub-Store”,確認前端和後端頁面不再可用,再用現有 Profile 完成一次實際 HTTPS 請求。這樣可以同時證明停用開關確實停止獨立服務,也證明普通代理並不依賴 Sub-Store 持續執行。

安全驗證清單

  • 實際 Sub-Store 後端版本不低於 2.38.0,並已與目前官方穩定版核對
  • 重啟 Clash Party 後版本仍保持新值
  • “允許區域網路存取”關閉,介面給出的後端主機為 127.0.0.1
  • 關閉“啟用 Sub-Store”後,前端與後端服務不再可存取
  • Sub-Store 停用時,現有 Profile、系統代理或 TUN 仍能完成實際請求
  • 使用自訂後端時,已在外部部署端分別核對版本、監聽、身分驗證與存取控制
  • 沒有執行 PoC、未知指令碼或第三方安全檢測頁面

懷疑受影響時先保留證據

版本落在報告範圍不等於已經被利用。只有出現未知處理程式、異常網路連線、系統安全軟體告警、設定或認證資訊被異常改動等證據時,才應把事件升級為可能的裝置入侵;此時更新只能封堵後續入口,不能刪除已經存在的程式或恢復洩露的認證資訊。

先停用 Sub-Store 並斷開裝置網路,記錄 Clash Party 與 Sub-Store 版本、監聽位址、告警時間和可疑現象。不要為了“清理”而立即刪除日誌、設定或未知檔案,它們可能是判斷影響範圍的重要證據。

使用作業系統或企業已批准的安全工具做完整掃描。若訂閱 URL、節點認證資訊、WebDAV、GitHub Token 或其他金鑰曾進入該裝置,應從一台可信裝置讓舊認證資訊失效並重新簽發;分享日誌前先製作脫敏副本。完整性無法確認時,從官方來源重新安裝系統或用戶端,並只恢復確認乾淨的設定。

事件回應最低動作

  • 已停用 Sub-Store 並限制受影響裝置繼續聯網
  • 已記錄版本、監聽位址、時間線、告警與可疑連線
  • 原始日誌和設定已保留,公開副本已脫敏
  • 已用可信的系統安全工具完成掃描
  • 可能暴露的訂閱 Token 與雲端認證資訊已在可信裝置上輪換
  • 不能確認完整性時,沒有把舊應用目錄直接複製回新環境

更新失敗時停用,不恢復舊後端

如果 2.38.0 以上版本導致某項訂閱轉換或指令碼不再工作,不要為了恢復功能降級到 2.37.1 或更早版本。先關閉 Sub-Store,繼續使用已經驗證可用的 Clash Party Profile;需要恢復訂閱時,從可信服務供應商重新取得原始連結或匯入升級前的乾淨備份。

只有在新版本、Allow LAN 關閉且監聽限於 127.0.0.1 的條件下,才重新開啟 Sub-Store 重新測試。若某個第三方指令碼仍必須依賴被限制的舊行為,應停止使用該指令碼並聯絡維護者更新,而不是放寬整個本機 API。

可還原但不回到風險版本

  1. 關閉獨立服務

    停用 Sub-Store,確認前後端已經停止。

  2. 恢復可用 Profile

    使用應用內仍可工作的設定,或匯入升級前儲存的乾淨副本。

  3. 驗證日常代理

    固定一條已知可用節點,分別驗證系統代理或 TUN 與實際請求。

  4. 等待相容修復

    關注 Sub-Store 和相關指令碼的官方更新,不恢復 2.37.1 或更早的 bundle。

以後按元件版本復核,不看用戶端名稱猜測

這次風險的核心對象是 Clash Party 啟動的 Sub-Store Node 後端,不是 Mihomo 核心,也不是所有名為 Clash 的用戶端。後續復核應同時記錄 Clash Party 版本、Sub-Store data.version、Allow LAN 狀態和實際監聽位址。

官方 2.38.0 發布關閉了 #634,2.39.6 是本次檢查時的目前穩定版;Clash Party #2134 仍只是使用者報告。若上游日後發布新的安全公告、身分驗證或存取控制機制,或推出新的 Clash Party 整合版本,應以新的官方 Release、提交和說明更新結論。

長期維護記錄

記錄項為什麼需要何時復核
Sub-Store data.version判斷獨立後端是否達到修復下限每次應用內更新後
Allow LAN 與監聽位址確認 API 沒有擴大到區域網路網路或設定變化後
Clash Party 版本理解介面和更新路徑用戶端升級後
官方 Release 與安全說明避免把使用者報告寫成官方結論看到新版本或新告警時

參考資料