Skip to content

[Bug] CategoryProducts: publish/multiple/bulkDelete без проверки parent (IDOR) #418

Description

@Ibochkarev

Описание проблемы

CategoryProductsController::sort проверяет parent => $categoryId.
publish / multiple / bulkDelete загружают товар только по id — можно publish/delete товар из другой категории, подставив чужой productId / ids в URL своей категории.

Шаги воспроизведения

  1. Mgr с доступом к /api/mgr/categories/{id}/products/* (сейчас view_document, см. [Bug] Manager API: customers CRUD и category publish под view_document #378).
  2. POST /api/mgr/categories/1/products/999/publish с {"published":1}, где товар 999 не в категории 1.
  3. Или POST .../products/multiple с method=delete и чужими ids.
  4. Товар меняется / soft-delete.

Ожидаемое поведение

Как в sort: операции только для товаров с parent = category_id (или явная membership в категории, если multi-category).

Фактическое поведение

// CategoryProductsController::publish ~286
$product = $this->modx->getObject(msProduct::class, $productId); // без parent

// multiple ~187 — то же
$product = $this->modx->getObject(msProduct::class, $id);

Окружение

  • MiniShop3: beta / Manager REST
  • MODX: 3.x
  • PHP: 8.2+

Дополнительный контекст

Отдельно от #378 (слабый permission): даже с «правильным» ACL остаётся IDOR по category boundary.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingpriority: highВажно исправить в ближайшее время

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions