
PoC pour J2Store CVE-2026-67358–67362 (avis de sécurité J2Commerce août 2026)
Matériel de preuve de concept pour quatre vulnérabilités dans com_j2store (J2Commerce J2Store), découvertes par Murrez et corrigées dans :
| Branche | Version corrigée |
|---|
| J2Store 3.x | 3.3.21 |
| J2Store 4.0.x | 4.0.21 |
| J2Store 4.1.x | 4.1.6 |
Avis officiel : Annonce de sécurité J2Commerce (2026-08-20)
| CVE | Problème | Authentification | CVSS 4.0 | Sévérité |
|---|---|---|---|---|
| CVE-2026-67359 | Lignes de commande + totaux sans authentification via expressconfirm | Aucune | 8.7 | Élevée |
| CVE-2026-67360 | IDOR reOrder inter-clients (panier/adresse de la victime dans la session de l'attaquant) | Faible (connecté) | 8.7 | Élevée |
| CVE-2026-67358 | updateHitCount consomme le quota de téléchargement d'un autre client | Faible (jeton de commande invité) | 5.3 | Moyenne |
| CVE-2026-67362 | Redirection ouverte dans les tâches du panier (setcurrency, addItem, applyCoupon, applyVoucher) | Aucune | 5.1 | Moyenne |
Version testée : J2Store Pro 4.1.5 sur Joomla 5.x (laboratoire local).
Uniquement pour recherche en sécurité autorisée et vérification de correctifs. Ne pas utiliser contre des systèmes que vous ne possédez pas ou pour lesquels vous n'avez pas d'autorisation explicite de tester.
pip install -r requirements.txt
Python 3.10+
URL de base du laboratoire par défaut : 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
Rejeux minimaux Burp/curl : replay/
expressconfirmPoint de terminaison : GET /index.php?option=com_j2store&view=checkout&task=expressconfirm&order_id=…
Lorsqu'aucune session de paiement active n'existe, n'importe quel order_id affiche la page de confirmation du paiement express (lignes de commande, quantités, prix, totaux) sans authentification.
Cause racine : components/com_j2store/controllers/checkouts.php — expressconfirm() utilise le order_id fourni par la requête sans vérification de propriété.
reOrderPoint de terminaison : GET /index.php?option=com_j2store&view=myprofile&task=reOrder&order_id=…&{csrf}=1
Un utilisateur authentifié disposant du order_id d'une victime peut déclencher une nouvelle commande : les lignes de commande de la victime sont copiées dans le panier de l'attaquant ; les ID d'adresse de facturation/livraison de la victime sont stockés dans la session de l'attaquant.
Cause racine : components/com_j2store/controllers/myprofile.php — reOrder() valide le CSRF et la connexion mais pas $order->user_id.
updateHitCountPoint de terminaison : POST /index.php?option=com_j2store&view=myprofile&task=updateHitCount
Un invité ou un client disposant d'une paire (order_id, token) valide qui lui appartient peut incrémenter limit_count sur le orderdownload_id d'une autre commande. Aucun jeton CSRF n'est requis.
Cause racine : components/com_j2store/controllers/myprofile.php — le jeton n'est vérifié que par rapport à la commande de l'appelant ; orderdownload_id n'est pas lié à cette commande.
Tâches : carts.setcurrency, carts.addItem, carts.applyCoupon, carts.applyVoucher
Les paramètres redirect / return encodés en Base64 sont décodés et transmis à $app->redirect() sans liste blanche d'hôtes. JRoute::_() ne bloque pas les URL externes absolues.
Cause racine : components/com_j2store/controllers/carts.php
Problèmes 1, 2, 3 et 5 dans l'avis du fournisseur — Murrez ([email protected]).
Divulgation coordonnée via J2Commerce et la Joomla Security Strike Team.
MIT — voir LICENSE.