← 返回文章列表

PHP2Shell 漏洞對 Matomo 使用者的影響與因應指南

PHP2Shell 漏洞(CVE-2026-109618 與 CVE-2026-109619)爆發後,許多 PHP 應用程式生態都發布了因應聲明。如果你正在使用 Matomo——這套全球最受歡迎的自架(self-hosted)網站分析工具(前身為 Piwik)——你可能會疑惑:漏洞在 PHP 不在 Matomo,那 Matomo 到底要不要更新?本文是「什麼是 PHP2Shell 漏洞」的延伸篇,針對 Matomo 的兩種使用情境(雲端版與自架版)完整解析風險,並針對老舊安裝(Matomo 4 + PHP 7.4)提供逐步升級路線。

一、先講結論:兩種 Matomo 使用者,命運大不同

Matomo 官方在漏洞揭露當日(2026 年 10 月 21 日)就發布了公告,把使用者分成兩群:

使用情境 是否受影響 需要動作
Matomo Cloud(雲端版) ❌ 不受影響 無需任何動作
Matomo On-Premise(自架版) ⚠️ 取決於伺服器的 PHP 版本 立即更新伺服器的 PHP

關鍵認知:PHP2Shell 是 PHP 執行環境的漏洞,不是 Matomo 的漏洞。Matomo 本身沒有需要修補的程式碼——風險來自它「跑在什麼版本的 PHP 上」。官方公告寫得很直白:「更新 Matomo 本身無法修補這些漏洞,安全修正必須套用到底層的 PHP。」

二、為什麼自架 Matomo 是高風險族群?

1. 追蹤碼把分析網域暴露在公開網路

每個裝了 Matomo 的網站,都會嵌入一段類似這樣的追蹤碼:

<script src="https://analytics.example.com/matomo.js"></script>

你的 Matomo 網域(例如 analytics.example.com)是公開可見的——任何人查看網頁原始碼都能找到它。分析工具不像後台系統可以鎖 IP 或走 VPN,它的天職就是接收來自全網路的 HTTP 請求。

2. PHP2Shell 不需要登入就能利用

兩個漏洞都在 PHP 解析請求的階段就觸發——早在 Matomo 應用程式碼(含登入驗證)執行之前:

  • Matomo 後台有強密碼、兩步驟驗證?沒用
  • 設定了 IP 白名單限制後台?對追蹤端點沒用
  • 關閉了訪客註冊?沒用

攻擊者對 matomo.php 追蹤端點送出精心構造的請求就能執行程式碼——這個端點本來就是設計給匿名請求打的。

3. 洩漏的資料比你想像的嚴重

CVE-2026-109618 可以直接讀出 PHP 行程的記憶體內容,包括 Matomo 的資料庫連線字串與 config 檔案中的憑證。若你的 Matomo 與其他系統共用資料庫伺服器,憑證外洩會讓災情蔓延到 Matomo 之外。

三、Matomo Cloud 使用者:為什麼可以放心?

官方聲明:「雲端版使用者已受保護,無需任何動作。」

這是 SaaS 服務在這類事件中的結構性優勢:PHP runtime 由 Matomo 團隊管理,安全更新的套用不需要你操心。這也正好凸顯了自架 vs. 雲端的取捨本質——自架換來資料主權與掌控權,代價就是這種半夜跳起來 patch 的責任。

四、版本相容性:先弄懂各版本真正支援的 PHP

規劃升級前,先看懂 Matomo 各版本的 PHP 相容範圍。這裡有個容易混淆的點:官方需求頁以「建議的現行環境」角度列出 PHP 8,但從 Matomo 原始碼(composer.json)的相依性宣告來看,Matomo 4 與 5 的實際相容範圍更寬:

Matomo 版本 程式碼宣告的最低 PHP MySQL / MariaDB 需求
Matomo 4.x PHP 7.2.5+(官方文件建議 PHP 8) MySQL 5.5+
Matomo 5.x PHP 7.2.5+(官方文件建議 PHP 8) MySQL 5.5+
Matomo 6.0+(現行版本) PHP 8.1+(硬性需求) MySQL 8.0+ / MariaDB 10.6+

實務上的意義:許多既有的 Matomo 4 安裝正是跑在 PHP 7.4 上(官方程式碼相容),而Matomo 5 也保留了這個相容範圍——這允許我們採用一條更有效率的升級路線:先把 Matomo 從 4 升到 5(PHP 7.4 不動),再一次性把 PHP 推到有安全修補的版本。

另外注意:PHP 7.4 已於 2022 年底 EOL,這次 PHP2Shell 也不會有官方二進位修補——所以 Matomo 4 / PHP 7.4 這個組合是「雙重過期」,你需要的不只是修漏洞,而是一次完整的平台推進。

五、Matomo 4 + PHP 7.4 的正確升級路線

由於 Matomo 5 的程式碼相容 PHP 7.2.5+,推薦順序是「先升 Matomo 4 → 5,再一次升級 PHP」。這樣的好處是 PHP 可以從 7.4 直接跳到 8.2.35+(PHP2Shell 修補版),不必經過 8.1 中繼站——少一次 FPM 切換、少一輪驗證,停機時間更短。

完整升級路線圖

Matomo 4 + PHP 7.4(現況,有漏洞)
  ├─ 第 1 步:備份(不做後面全都白搭)
  ├─ 第 2 步:Matomo 4 → 5(PHP 7.4 直接過橋,相容 7.2.5+)
  ├─ 第 3 步:PHP 7.4 → 8.2.35+(一次到位,關閉 PHP2Shell)
  ▼
Matomo 5 + PHP 8.2.35+(漏洞已修補,可先營運)
  ├─ 第 4 步(建議):Matomo 5 → 6(取得現行支援)
  ▼
Matomo 6 + PHP 8.4.27+(現行穩定組合)

第 1 步:備份(所有步驟的地基)

tar -czf matomo-backup-$(date +%F).tar.gz /var/www/matomo

mysqldump -u matomo_user -p matomo_db > matomo-db-$(date +%F).sql

官方也提醒:高流量的站台在升級期間應先開啟維護模式(maintenance mode),避免追蹤資料寫入到正在異動的資料庫。

第 2 步:Matomo 4 → Matomo 5(PHP 7.4 不動)

Matomo 5 的程式碼相容 PHP 7.2.5+,可以直接在現有 PHP 7.4 環境上過橋:

  1. 從官網下載最新 Matomo 5.x
  2. 依官方手動更新程序:刪除舊檔(保留 config/config.ini.php)→ 覆蓋新檔
  3. 開啟 Matomo UI,讓它執行資料庫結構升級(流量大的站可能需要一些時間)
  4. 到 Marketplace 重新安裝你原本使用的外掛(注意:外掛必須是 Matomo 5 相容版本,老外掛沒更新的要找替代品)
  5. 確認追蹤與報表正常運作——此時漏洞尚未修補,PHP 還是 7.4,別停在這裡

第 3 步:PHP 7.4 → 8.2.35+(真正關閉漏洞的一步)

到達 Matomo 5 後,把 PHP 一次性推進有安全修補的分支:

sudo apt install php8.2 php8.2-fpm php8.2-mysql php8.2-gd \
     php8.2-xml php8.2-mbstring php8.2-curl php8.2-cli

php8.2 -v  # 應為 8.2.35 以上(PHP2Shell 修補版)

# 切換 web server 使用新 PHP-FPM
sudo systemctl restart php8.2-fpm apache2  # 或 nginx
sudo systemctl disable --now php7.4-fpm

這一步做完,PHP2Shell 的攻擊面才算真正關閉。 之後在 Matomo UI 的系統診斷頁確認 PHP 版本正確、所有擴充模組正常。在走到這裡之前,臨時緩解是在 php.ini 設定 memory_limit = -1 並調低 post_max_size——但官方明言這只是爭取時間,不是修補。

第 4 步(建議但非必須):Matomo 5 → Matomo 6

走到 Matomo 5 + PHP 8.2,你的系統已經安全。但如果要取得現行版本的功能與長期支援,建議繼續升級到 Matomo 6(硬性要求 PHP 8.1+、MySQL 8.0+/MariaDB 10.6+):

  1. 先確認資料庫版本——Matomo 6 要求 MySQL 8.0 或 MariaDB 10.6 以上,老站常卡在這裡,需要先升級資料庫
  2. 同樣走「備份 → 換檔(保留 config)→ UI 升級」流程
  3. Matomo 6 的資料庫升級會對 log_visit 表執行 ALTER TABLE(新增 consent 欄位),訪問日誌大的站會花時間,安排維護時段
  4. 享受 Matomo 6 的內建反垃圾/機器人過濾(原為付費外掛,現為預設功能)

回滾保險

Matomo 官方提供 5 → 4 的降級程序(保留 config、換回 Matomo 4 檔案、執行版本回寫 SQL),但 Matomo 6 沒有對應的官方降級路徑。因此:Matomo 4 → 5 這段可回滾、5 → 6 要當單行道規劃——做好備份再出發。

六、常見問題

Q:更新 Matomo 版本可以解決 PHP2Shell 嗎?

不行。官方原話:「更新 Matomo 本身無法修補這些漏洞,安全修正必須套用到底層的 PHP。」更新 Matomo 4 → 5 的意義在於版本相容性橋樑(確保升級 PHP 8.2 後應用程式正常),而不是修補漏洞本身。

Q:我的 Matomo 只有內部使用,網站沒對外,有差嗎?

風險大幅降低,但若伺服器上有其他對外網站共用同一個 PHP-FPM 行程池,仍建議一併更新。

Q:有 WAF / Cloudflare 擋著還需要更新嗎?

要。Cloudflare 已觀察到攻擊者持續改寫 payload 繞過 WAF 規則。WAF 是爭取時間的手段,修補 PHP 才是關門。

Q:可以跳過 Matomo 5 直接升 6 嗎?

官方不建議。Matomo 4 → 6 之間有多次資料庫結構變更,跳版容易踩到外掛相容性與 schema 灰區。按 Matomo 5 → PHP 8.2 →(Matomo 6)的順序最穩。

結語

PHP2Shell 對 Matomo 4 + PHP 7.4 的老站來說,是一記遲到的鬧鐘:這個組合不只是「有漏洞」,而是整條技術棧都過了官方支援線。趁這次事件一次補齊(Matomo 5 過橋 → PHP 8.2.35 修補關門 → Matomo 6),比每次漏洞爆發都臨時找 7.4 的替代修補可持續得多。

雲端版使用者這次什麼都不用做;自架使用者請現在就登入伺服器跑 php -v。攻擊窗口從 10 月 17 日就已經打開——確認版本,就是現在。

📖 延伸閱讀:漏洞的完整技術解析,請見〈什麼是 PHP2Shell 漏洞?誰需要注意?〉——包含 CVE 詳細分析、六類受影響對象的風險評級、以及 AI 輔助挖洞的時代背景。