Snipe-IT — это система управления ИТ-активами с открытым исходным кодом. В версиях до 8.6.3 включительно конечные точки принятия отчетов POST /reports/unaccepted_assets/sent_reminder (ReportsController::sentAssetAcceptanceReminder) и DELETE /reports/unaccepted_assets/{acceptanceId}/delete (ReportsController::deleteAssetAcceptance) не имеют правильной области при полной поддержке нескольких компаний. (FMCS) включен. В версии 8.6.3 охранник ReportsController::currentUserCanAccessAcceptance() досрочно завершает работу с возвратом true, когда '! $user->company_id' является правдивым, что справедливо для каждого сводного пользователя (пользователя, связанного с компаниями через сводную таблицу Company_user, скалярный столбец user.company_id которого равен NULL); в версиях до 8.6.3 защита вообще отсутствовала.
В результате аутентифицированный пользователь, обладающий разрешением report.view, может отправлять электронные письма с напоминанием о принятии и безвозвратно удалять любые ожидающие принятия записи в установке независимо от того, какая компания владеет базовым checkoutable. Удаление является деструктивным и приводит к утрате журнала аудита приемки затронутого элемента, а электронное письмо с напоминанием предоставляет получателю ограниченный контекст принятия между компаниями (название элемента и метаданные назначения). Идентификаторы приемки представляют собой последовательные целые числа и могут быть перечислены.
Эта проблема исправлена в версии 8.7.0.
Показать оригинальное описание (EN)
Snipe-IT is an open source IT asset management system. In versions up to and including 8.6.3, the report acceptance endpoints POST /reports/unaccepted_assets/sent_reminder (ReportsController::sentAssetAcceptanceReminder) and DELETE /reports/unaccepted_assets/{acceptanceId}/delete (ReportsController::deleteAssetAcceptance) are not correctly scoped when Full Multiple Company Support (FMCS) is enabled. In 8.6.3 the guard ReportsController::currentUserCanAccessAcceptance() early-exits with 'return true' when '! $user->company_id' is truthy, which is the case for every pivot-only user (a user associated with companies through the company_user pivot table whose scalar users.company_id column is NULL); versions prior to 8.6.3 lacked the guard altogether. As a result, an authenticated user holding the reports.view permission can send acceptance-reminder emails for, and permanently delete, any pending acceptance record in the install regardless of which company owns the underlying checkoutable. Deletion is destructive and forfeits the acceptance audit trail for the affected item, and the reminder email exposes limited cross-company acceptance context (item name and assignment metadata) to the recipient. Acceptance IDs are sequential integers and can be enumerated. This issue is fixed in version 8.7.0.
Характеристики атаки
Последствия
Строка CVSS v4.0