2025 年 8 月,一個自稱「Kris」的買家在 191 行程式碼裡埋下計時炸彈;8 個月後炸開,C2 通訊繞過封鎖。本文源自安全研究員 Austin Ginder 報告。
(前情提要:BTC衝擊7.5萬美元!ETH回升2400,範斯稱美國伊朗談判有「大量進展」,暫定16日二次協商)
(背景補充:Gate 創始人 Dr. Han 13 週年公開信:在週期更替中,釋放變革的力量)
三十款外掛、八個月潛伏期、C2 伺服器透過以太坊智能合約動態更新。2026 年 4 月初,WordPress.org 在單一工作日內關閉逾 30 款外掛,裝機數合計數百萬。且更令人震驚的是,後門早在 2025 年 8 月 8 日就已上線,距離被發現整整 243 天。
191 行,一句「相容性更新」
時間倒回 2015 年。印度團隊 WP Online Support(後改名 Essential Plugin)由 Minesh Shah 等三人創立,十年間累積出一個涵蓋 30 餘款外掛的產品線。到 2024 年底,營收已較高峰衰退 35 至 45%,團隊選擇在 Flippa 掛牌求售。
買家是一個背景橫跨 SEO、加密貨幣與線上博彩行銷的人,對外自稱「Kris」。2025 年 8 月 8 日,版本 2.6.7 上線,changelog 只寫了「相容性更新」四個字。
實際變動是:`class-anylc-admin.php` 從 473 行擴張至 664 行,新增 191 行後門程式碼。這是 Kris 在 SVN 的第一筆 commit。
後門沒有立刻啟動。它休眠至 2026 年 4 月 5~6 日,才開始執行第一階段:`wpos-analytics` 模組向 `analytics.essentialplugin.com` 發出回呼請求,下載一個命名為 `wp-comments-posts.php` 的檔案。刻意模仿 WordPress 核心的 `wp-comments-post.php`,差一個字母。
wp-config.php 被寫入6KB惡意程式碼
2026 年 4 月 6 日 04:22 UTC,注入程式啟動;11:06 UTC,`wp-config.php` 已在全球受害站臺寫入完畢。6 小時 44 分鐘,沒有任何平台層級的警報觸發。
注入的惡意程式碼做兩件事:其一,植入垃圾外連連結,但只對 Googlebot 的 User-Agent 顯示,一般訪客與網站管理員看到的頁面完全正常;其二,開啟一個未設認證的 REST API 端點(`permission_callback: __return_true`),搭配 PHP 反序列化函式 `fetch_ver_info()`,形成任意函式呼叫的遠端執行路徑。
然而最值得記錄的設計細節不在注入本身,而在 C2 基礎設施的規避方案:攻擊者將指揮域名的解析邏輯寫進以太坊智能合約,後門透過公開區塊鏈 RPC 節點查詢最新指向。
傳統資安防禦的域名黑名單、DNS 封鎖,對這個架構完全無效,攻擊者只需更新合約,全球所有受感染站臺的 C2 就同步切換,不需要接觸任何受控伺服器。
這不是第一次,也不會是最後一次
2017 年,Daley Tias 以 1.5 萬美元買下裝機量 20 萬的 Display Widgets 外掛,植入貸款類垃圾連結,後續波及至少9款外掛。那次事件之後,WordPress.org 沒有推出外掛所有權轉移的強制審查機制;沒有在新 committer 首次提交時觸發額外人工或自動審核;也沒有向現有安裝使用者推送「此外掛已易主」的通知。
九年過去,流程一模一樣。Kris 完成收購,取得 SVN 提交許可權,第一筆 commit 就是後門,全程合規。
制度問題,不是技術問題
這起事件沒有使用任何零日漏洞。後門程式碼品質平庸,191 行裡沒有任何精妙的混淆技術。它能潛伏 243 天,靠的不是技術能力,而是 WordPress.org 外掛市集在所有權異動這個環節的完整缺席。
用以太坊智能合約解析 C2 域名,確實讓這起攻擊在技術架構上多了一層值得討論的設計,但那只是讓清除工作更麻煩,不是讓攻擊得以發生的原因。攻擊得以發生,是因為平台允許任何人買下一款外掛、推送更新、不需要對任何人解釋 changelog 寫的「相容性更新」到底相容了什麼。
WordPress.org 一天之內關閉了 30 多個外掛程式
2026 年 4 月 7 日,WordPress.org 插件團隊永久關閉了 Essential Plugin 作者的所有外掛程式。至少 30 個插件,全部在同一天關閉。以下是 Austin Ginder 確認的外掛:
- Accordion and Accordion Slider —
accordion-and-accordion-slider - Album and Image Gallery Plus Lightbox —
album-and-image-gallery-plus-lightbox - Audio Player with Playlist Ultimate —
audio-player-with-playlist-ultimate - Blog Designer for Post and Widget —
blog-designer-for-post-and-widget - Countdown Timer Ultimate —
countdown-timer-ultimate - Featured Post Creative —
featured-post-creative - Footer Mega Grid Columns —
footer-mega-grid-columns - Hero Banner Ultimate —
hero-banner-ultimate - HTML5 VideoGallery Plus Player —
html5-videogallery-plus-player - Meta Slider and Carousel with Lightbox —
meta-slider-and-carousel-with-lightbox - Popup Anything on Click —
popup-anything-on-click - Portfolio and Projects —
portfolio-and-projects - Post Category Image with Grid and Slider —
post-category-image-with-grid-and-slider - Post Grid and Filter Ultimate —
post-grid-and-filter-ultimate - Preloader for Website —
preloader-for-website - Product Categories Designs for WooCommerce —
product-categories-designs-for-woocommerce - Responsive WP FAQ with Category —
sp-faq - SlidersPack – All in One Image Sliders —
sliderspack-all-in-one-image-sliders - SP News And Widget —
sp-news-and-widget - Styles for WP PageNavi – Addon —
styles-for-wp-pagenavi-addon - Ticker Ultimate —
ticker-ultimate - Timeline and History Slider —
timeline-and-history-slider - Woo Product Slider and Carousel with Category —
woo-product-slider-and-carousel-with-category - WP Blog and Widgets —
wp-blog-and-widgets - WP Featured Content and Slider —
wp-featured-content-and-slider - WP Logo Showcase Responsive Slider and Carousel —
wp-logo-showcase-responsive-slider-slider - WP Responsive Recent Post Slider —
wp-responsive-recent-post-slider - WP Slick Slider and Image Carousel —
wp-slick-slider-and-image-carousel - WP Team Showcase and Slider —
wp-team-showcase-and-slider - WP Testimonial with Widget —
wp-testimonial-with-widget - WP Trending Post Slider and Widget —
wp-trending-post-slider-and-widget
📍相關報導📍
RSS3推出ChatGPT外掛「Web3 User Activity」,能一鍵問出巨鯨錢包動向
OpenClaw下週更新:支援 Claude Code 與 OpenAI Codex,創辦人Steinberger 還在兼顧寫code

