研究報告拆解

953 個電商網站被植入會躲掃描器的 JavaScript:Magento CMS block 成為攻擊跳板

Sansec 揭露一起自 2025 年 7 月持續至今的 Magento 攻擊活動,攻擊者透過 PolyShell 和 SessionReaper 漏洞入侵 953 個線上商店,在 CMS block 中植入 JavaScript loader,只對真實訪客投放 payload、躲避安全掃描器。最新的 loader 整合瀏覽器指紋識別,並將 payload 存入 localStorage 持久化。

30 秒看懂
  • Sansec 發現一起自 2025 年 7 月持續至今的 Magento 攻擊活動,攻擊者在 953 個線上商店的 CMS block 中植入 JavaScript loader。Loader 透過外部網域(最新為 deepveindrilling.com)載入 payload,但只對真實訪客回應,安全掃描器會收到空回應或無害程式碼。攻擊者使用的網域歷經 5 次更換,每次更換都代表舊網域被偵測或失效。
  • 最新版本的 loader 整合瀏覽器指紋識別(browser fingerprinting)來過濾機器人和安全掃描器,只對真實購物者投放惡意程式碼。Payload 會被存入瀏覽器的 localStorage,讓後續訪問時即使外部網域失效仍能執行惡意程式碼。早期版本使用 Keitaro 作為流量分發系統(TDS),最新版本則整合 bot-filtering 邏輯到 loader 本身。
  • 471 個 Magento 商店透過 PolyShell(CVE-2026-48356)漏洞被植入 loader,102 個透過 PolyShell 或 SessionReaper(CVE-2025-54236)漏洞上傳檔案。其中一個運行 Magento 2.4.7-p1 的商店在 pub/media/custom_options/quote/ 目錄有偽裝成 PNG 的 PolyShell webshell,且未套用 Adobe 的 PolyShell 修補。另一個運行 Magento 2.4.7-p10 且已套用所有核心修補的商店也被入侵,攻擊者新增偽裝管理員帳號後植入程式碼。

發生了什麼

想像你在一個看起來正常的線上商店購物,挑選商品、加入購物車、進入結帳頁面。頁面載入速度正常,沒有任何異狀。你輸入信用卡號碼、有效期限、安全碼,按下「確認付款」。

你不知道的是,當頁面載入時,一段隱藏的 JavaScript 已經在背景執行。這段程式碼會在你輸入信用卡資料的瞬間攔截,然後將資料傳送到攻擊者的伺服器。整個過程不到一秒,頁面沒有任何變化,你的付款正常完成。

店家也不知道。他們的安全掃描器每天執行,但掃描器看到的頁面是乾淨的——因為攻擊者的伺服器只對真實訪客投放惡意程式碼,對掃描器回傳無害的內容。

2025 年 7 月至 2026 年 10 月,Sansec(荷蘭電商安全公司)發現一起持續超過 15 個月的 Magento 攻擊活動。攻擊者入侵 953 個線上商店,在 Magento 的 CMS block 中植入 JavaScript loader,只對真實訪客投放 payload、躲避安全掃描器。最新版本的 loader 整合瀏覽器指紋識別,並將 payload 存入 localStorage 持久化。

來源:本文整理自 The Hacker News 於 2026 年 10 月 26 日發布的報導,原始研究為 Sansec 的安全研究報告。原文連結

攻擊流程:CMS block → loader → payload

CMS block:Magento 的內容渲染機制

CMS block 是 Magento 用來在店面頁面渲染靜態內容的機制。這些 block 儲存在 cms_block 資料庫表中,可以被插入到頁面的任何位置,例如:

  • Header(頁首)
  • Footer(頁尾)
  • 促銷橫幅
  • 側邊欄

當訪客開啟包含這些 block 的頁面時,Magento 會從資料庫讀取 block 的內容並渲染到 HTML 中。如果 block 的內容包含 JavaScript,這段程式碼就會在訪客的瀏覽器中執行。

攻擊者只需要在一個 CMS block 中植入一小段 JavaScript loader,這段程式碼就會在每個訪客開啟該頁面時執行。

Loader:只對真人投放 payload

Loader 是一小段 JavaScript 程式碼,它的作用是向攻擊者控制的外部網域發送請求,載入真正的 payload。

但攻擊者的伺服器不會對所有請求都回傳 payload。它會先檢查請求來源:

  • 如果是真實訪客:回傳竊取資料的 JavaScript payload
  • 如果是安全掃描器:回傳無害的內容(例如 QWE=123;,只是設定一個 cookie)或空回應

Sansec 在報告中指出:「當你訪問時,這段程式碼會讓你的瀏覽器向攻擊者的伺服器詢問下一步該做什麼。伺服器會先檢查你是真實購物者還是安全掃描器,掃描器會收到空回應。」

五個網域的演化

攻擊者在這 15 個月內使用了 5 個不同的網域,每次更換都代表舊網域被偵測或失效:

  1. manulfie.click(2025 年 7 月首次出現)
  2. neswnsssn.click(2025 年 12 月首次出現)
  3. lanhd6549tdhse.top(2026 年 3 月首次出現)
  4. additionalver.com(2026 年 6 月首次出現)
  5. deepveindrilling.com(2026 年 10 月首次出現,註冊於 2026 年 10 月 6 日)

最新的 deepveindrilling.com 被 Sansec 在 83 個線上商店的 CMS block 中發現。這個網域託管在 Cloudflare 後方,只對來自被入侵商店的真實訪客的 script 請求回應。

兩種版本的 loader

Sansec 發現了 兩種不同版本的 loader,顯示攻擊者持續改進技術。

第一版:localStorage 持久化

第一版 loader 會將從外部網域載入的 payload 存入瀏覽器的 localStorage。

這個設計的目的是持久化:即使攻擊者的外部網域被查封或失效,儲存在 localStorage 中的惡意程式碼仍會在訪客後續訪問時執行。

第二版:整合瀏覽器指紋識別

第二版 loader 在第一版的基礎上增加了瀏覽器指紋識別(browser fingerprinting)檢查,用來過濾機器人和安全掃描器,確保只有真實購物者會收到惡意程式碼。

這代表即使安全研究員或自動化掃描器訪問被入侵的商店,他們也看不到惡意程式碼——攻擊者的伺服器會根據瀏覽器特徵判斷來源,只對真實訪客回應。

Keitaro:早期的流量分發系統

在活動的早期階段,攻擊者使用 Keitaro 作為 流量分發系統(TDS, Traffic Distribution System)。

Keitaro 是一個廣告追蹤與分析平台,但也被濫用於惡意活動。攻擊者使用它來根據訪客的特徵(例如作業系統、瀏覽器、IP 位址)決定要回傳什麼回應:

  • 真實訪客:回傳 payload
  • 可疑來源:回傳重新導向或空回應

Sansec 測試時,以 Windows 桌面訪客的身分請求 additionalver.com 的 script,收到的回應是 QWE=123;——這段程式碼除了設定一個 cookie(將訪客標記 24 小時)之外什麼也不做。

最新的 deepveindrilling.com 網域不再使用 Keitaro,而是將 bot-filtering 邏輯整合到 loader 本身。

入侵途徑:PolyShell、SessionReaper、管理員帳號

Sansec 追蹤到三種主要的入侵途徑。

PolyShell(CVE-2026-48356):471 個商店

PolyShell(CVE-2026-48356)是 Magento 的一個漏洞,允許攻擊者上傳 webshell 並執行任意程式碼。

Sansec 估計有 471 個 Magento 商店透過 PolyShell 漏洞被植入 loader。

在其中一個案例中,一個運行 Magento 2.4.7-p1 的商店在 pub/media/custom_options/quote/ 目錄中有偽裝成 PNG 圖片的 PolyShell webshell,旁邊就是植入了 additionalver.com loader 的 CMS block。這個 block 在 10 月 7 日更換成 deepveindrilling.com。

關鍵的是:這個商店還沒有套用 Adobe 的 PolyShell 修補(APSB26-73,針對支援的版本線釋出的修補)。

SessionReaper(CVE-2025-54236):102 個商店

SessionReaper(CVE-2025-54236)是另一個 Magento 漏洞,允許攻擊者上傳檔案。

Sansec 發現 102 個商店透過 PolyShell 或 SessionReaper 漏洞上傳檔案後被植入 loader。

偽裝管理員帳號

在另一個案例中,一個運行 Magento 2.4.7-p10、且已套用所有核心修補的商店仍然被入侵。

攻擊者在這個商店中新增了一個偽裝的管理員帳號,然後使用這個帳號植入程式碼。

這代表即使修補了所有已知漏洞,弱密碼或竊取的憑證仍可能讓攻擊者取得管理員存取權限。

不只 Magento:其他 380 個商店

Sansec 發現的 953 個商店中,471 個透過 PolyShell 入侵,102 個透過 PolyShell 或 SessionReaper 上傳檔案。這代表還有約 380 個商店的入侵途徑尚未確認。

可能的途徑包括:

  • 其他 Magento 漏洞
  • 第三方擴充套件的漏洞
  • 竊取的管理員憑證
  • 弱密碼
  • 其他電商平台的漏洞

PHP2Shell:新的威脅

報導末尾提到,這個揭露是在 PHP2Shell 漏洞被廣泛利用的背景下發生的。

PHP2Shell 是 PHP 的兩個關鍵漏洞(CVE-2026-109618 和 CVE-2026-109619),在上週揭露後就看到廣泛的利用嘗試。

安全研究員 Adel Karimi(Perplexity)記錄到第一起在野成功利用的案例:攻擊者在 honeypot 伺服器上執行 shell 指令,使用 wget、curl 或 PHP CLI 從遠端伺服器(162.35.99.94:80)下載額外的 payload。

不過,目前還沒有觀察到被下載的第二階段 artifact。

如何偵測與防禦

稽核 CMS block 與 CMS page

最直接的偵測方法是直接查詢資料庫,尋找包含外部 script 的 CMS block 或 page。

Sansec 建議檢查 cms_block 和 cms_page 表,尋找:

  • 包含 <script src="https://外部網域/"> 的內容
  • 包含可疑網域(如 .click、.top、陌生的 .com)的內容
  • 最近新增或修改的 block

更新到最新版本

確保 Magento 已更新到最新版本,修補 PolyShell(CVE-2026-48356)和 SessionReaper(CVE-2025-54236)漏洞。

Adobe 已在 APSB26-73 公告中釋出 PolyShell 的修補,針對支援的版本線。

強制強密碼

即使修補了所有已知漏洞,弱密碼或竊取的管理員憑證仍可能讓攻擊者建立偽裝帳號。

強制所有管理員帳號使用強密碼,並定期稽核帳號清單。

檢查 pub/media 目錄

檢查 pub/media 目錄(特別是 custom_options/quote/ 等子目錄)是否有:

  • 不該存在的 PHP 檔案
  • 偽裝成圖片(如 .png)的 webshell

實施內容安全政策(CSP)

部署 Content Security Policy(CSP),限制頁面只能載入來自信任網域的 script。

這能阻止 loader 向攻擊者的外部網域發送請求。

不要只依賴掃描器

最重要的是:不要以為掃描器沒發現就代表安全。

攻擊者專門設計 loader 來躲避掃描器,只對真實訪客投放 payload。你需要:

  • 直接查詢資料庫
  • 檢查檔案系統
  • 監控網路流量
  • 測試真實訪客的瀏覽器行為

你可以學到什麼

站在攻擊者的角度:電商網站是完美的目標——大量訪客、輸入信用卡資料、通常沒有專職資安團隊。Magento 的 CMS block 提供了一個完美的植入點:只需要在資料庫中改一個欄位,惡意程式碼就會在每個訪客的瀏覽器中執行。為了躲避偵測,他設計了只對真人投放 payload 的 loader——掃描器看到的永遠是乾淨的頁面。即使外部網域被查封,payload 仍存在訪客的 localStorage 中繼續執行。15 個月內更換 5 個網域、入侵 953 個商店,而大部分店家可能到現在還不知道。

lessons本案的 8 個教訓
  1. 01
    CMS block 是攻擊跳板:Magento 的 cms_block 表用於渲染靜態內容,攻擊者只需在這裡植入一小段程式碼,就能在所有訪客的瀏覽器中執行。
  2. 02
    Loader 模式躲避掃描器:不直接植入完整 payload,而是植入一個向外部網域請求的 loader,讓攻擊者能動態控制要投放什麼內容。
  3. 03
    只對真人投放 payload:攻擊者的伺服器會檢查請求來源,只對真實訪客回傳惡意程式碼,掃描器會收到無害的回應。
  4. 04
    localStorage 持久化:將 payload 存入瀏覽器的 localStorage,即使外部網域失效仍能繼續執行。
  5. 05
    瀏覽器指紋識別過濾機器人:整合 browser fingerprinting 檢查,進一步過濾掉自動化工具和安全研究員。
  6. 06
    多個入侵途徑並行:PolyShell、SessionReaper、偽裝管理員帳號,攻擊者不依賴單一漏洞。
  7. 07
    網域輪替對抗封鎖:15 個月內使用 5 個網域,每次被偵測就更換,讓防禦者難以追蹤。
  8. 08
    即使修補所有漏洞仍可能被入侵:弱密碼、竊取的憑證、第三方擴充套件的漏洞都可能成為入口。
keywords重點學習:最需要學習的 10 個關鍵字8 個
  1. 01
    CMS block
    Magento 用來在店面頁面渲染靜態內容的機制,攻擊者在此植入 JavaScript loader。
  2. 02
    JavaScript loader
    一小段程式碼,向攻擊者的外部網域請求真正的 payload,讓攻擊者能動態控制要投放什麼內容。
  3. 03
    PolyShell(CVE-2026-48356)
    Magento 漏洞,允許攻擊者上傳 webshell 並執行任意程式碼,471 個商店透過此漏洞被入侵。
  4. 04
    SessionReaper(CVE-2025-54236)
    Magento 漏洞,允許攻擊者上傳檔案,102 個商店透過此漏洞或 PolyShell 上傳檔案後被入侵。
  5. 05
    Browser fingerprinting(瀏覽器指紋識別)
    收集瀏覽器特徵來識別訪客身分,攻擊者用來過濾掉機器人和安全掃描器。
  6. 06
    localStorage
    瀏覽器的本地儲存空間,攻擊者將 payload 存入其中以持久化,即使外部網域失效仍能執行。
  7. 07
    Keitaro
    廣告追蹤與分析平台,被攻擊者早期用作流量分發系統(TDS),根據訪客特徵決定要回傳什麼內容。
  8. 08
    Web skimmer
    竊取線上商店顧客信用卡資料的惡意程式碼,通常透過 JavaScript 注入到結帳頁面。
try today今天就可以來試試約 15 分鐘

全部唯讀,不改任何設定;做完你會知道自己有沒有同樣的破口。

  1. 查詢 cms_block 表尋找可疑的外部 script
    SELECT * FROM cms_block WHERE content LIKE '%<script%src=%'
    看到什麼代表什麼:找出所有包含外部 script 的 CMS block,檢查網域是否為信任的網域(例如 Google Analytics、CDN)。任何陌生的 .click、.top、或可疑的 .com 網域都應立即調查。
  2. 檢查 Magento 版本與修補狀態
    php bin/magento --version
    看到什麼代表什麼:確認版本號,然後對照 Adobe 的安全公告,確認是否已修補 PolyShell(APSB26-73)和 SessionReaper。
  3. 檢查 pub/media 目錄是否有 webshell
    find pub/media -type f -name '*.php' -o -name '*.png' -exec file {} \; | grep 'PHP'
    看到什麼代表什麼:找出所有 PHP 檔案或偽裝成圖片的 webshell。pub/media 目錄不應該有任何可執行的 PHP 檔案。
  4. 稽核管理員帳號清單
    SELECT * FROM admin_user WHERE is_active = 1
    看到什麼代表什麼:列出所有啟用的管理員帳號,確認每個帳號都是已知且授權的。移除任何可疑或不認識的帳號。
  5. 測試真實訪客的瀏覽器行為
    看到什麼代表什麼:用真實的瀏覽器(不是掃描器)開啟商店的結帳頁面,打開開發者工具的 Network 面板,檢查是否有向陌生網域發送的請求。
  6. 檢查最近修改的 CMS block
    SELECT * FROM cms_block WHERE update_time > DATE_SUB(NOW(), INTERVAL 30 DAY) ORDER BY update_time DESC
    看到什麼代表什麼:列出最近 30 天內修改過的 CMS block,檢查修改內容是否合理。

如果你管理 Magento 商店

  1. 立即查詢 cms_block 表:尋找包含外部 script 的 block,特別是指向 .click、.top 等可疑網域的 script。
  2. 更新到最新版本:修補 PolyShell 和 SessionReaper 漏洞。
  3. 檢查 pub/media 目錄:移除所有不該存在的 PHP 檔案或偽裝成圖片的 webshell。
  4. 稽核管理員帳號:移除任何未經授權的帳號,強制所有帳號使用強密碼。
  5. 部署 CSP:限制頁面只能載入來自信任網域的 script。
  6. 不要只依賴掃描器:攻擊者專門躲掃描器,你需要直接查詢資料庫與檢查檔案系統。
  7. 監控網路流量:設定告警偵測向陌生網域發送的請求。

這個攻擊證明:掃描器看到的不一定是真相。攻擊者會設計專門躲避掃描器的機制,只對真實訪客投放惡意程式碼。你需要更深入的偵測手段。

來源

分享
精選拆解直送信箱

每篇新文章一封:三點摘要、關鍵字定義、今天能做的一件事。

延伸閱讀

威脅情報報告

Cloudflare Q3 DDoS 報告:每小時 8226 起攻擊,短時低頻攻擊暴增 208%

Cloudflare 於 2026 年 Q3 自動緩解 1820 萬起網路層 DDoS 攻擊與 14.4 兆個 HTTP DDoS 請求,相當於每 0.44 秒一起攻擊。網路層攻擊較 Q2 增加 38%,短時低頻攻擊(10 分鐘內、1 Gbps 以下)暴增 208%。超大型攻擊(1 Tbps 以上)則減少 69%,可能與執法行動打擊 DDoS 服務有關。美國、中國、印尼、英國、土耳其是最常被攻擊的國家。

  • 2026/11/01
  • 每日拆解