Admidio — это решение для управления пользователями с открытым исходным кодом. В версии 5.0.9 добавлен недостающий элемент `isAdministratorInventory()` в `case 'item_delete':` в `modules/inventory.php`. То же исправление не было применено к родственному обработчику `case 'field_delete':`, который уничтожает все определение поля инвентаризации, каскадно распространяясь на каждую строку `adm_inventory_item_data`, которая ссылается на это поле, и на каждую запись `adm_inventory_field_options`.
Обработчик проверяет только CSRF-токен, привязанный к сеансу; на уровне контроллера нет проверки `isAdministratorInventory()`, а `Admidio\Inventory\Entity\ItemField::delete()` также не применяет ее на уровне объекта (в отличие от его родственного `ItemField::save()`, который проверяет `$gCurrentUser->isAdministrator()`). Любой пользователь, который может войти на сайт, может навсегда уничтожить несистемное поле инвентаризации, отправив один POST. Версия 5.0.10 содержит обновленное исправление.
Показать оригинальное описание (EN)
Admidio is an open-source user management solution. Version 5.0.9 added a missing `isAdministratorInventory()` gate to `case 'item_delete':` in `modules/inventory.php`. The same fix was not applied to the sibling `case 'field_delete':` handler, which destroys an entire inventory field definition, cascading to every `adm_inventory_item_data` row that referenced that field and every `adm_inventory_field_options` entry. The handler validates only a session-bound CSRF token; there is no `isAdministratorInventory()` check at the controller level, and `Admidio\Inventory\Entity\ItemField::delete()` does not enforce one at the entity level either (unlike its sibling `ItemField::save()`, which does check `$gCurrentUser->isAdministrator()`). Any user who can log in to the site can permanently destroy a non-system inventory field by sending one POST. Version 5.0.10 provides an updated fix.
Характеристики атаки
Последствия
Строка CVSS v3.1