Процедура report.get в packages/trpc/src/routers/report.ts принимала только reportId и возвращала getReportById(reportId) напрямую. Промежуточное программное обеспечение EnforceAccess в packages/trpc/src/trpc.ts оценивает членство только тогда, когда входные данные содержат ключ projectId или OrganizationId, поэтому входные данные, состоящие только из reportId, проходят без проверки, а getReportById в packages/db/src/services/reports.service.ts выполняет findUnique для идентификатора отчета без определения области действия проекта. Таким образом, любой прошедший проверку подлинности пользователь мог прочитать полную конфигурацию любого сохраненного отчета в экземпляре, включая идентификатор проекта, серию событий, фильтры, разбивки и формулы, указав свой идентификатор.
Соседние процедуры обновления, удаления и дублирования сначала разрешают отчет и сверяют getProjectAccess с собственным projectId отчета, поэтому упущение было характерно для этой процедуры.
Показать оригинальное описание (EN)
The report.get procedure in packages/trpc/src/routers/report.ts accepted only a reportId and returned getReportById(reportId) directly. The enforceAccess middleware in packages/trpc/src/trpc.ts evaluates membership only when the input carries a projectId or organizationId key, so an input consisting of a reportId alone passed through unchecked, and getReportById in packages/db/src/services/reports.service.ts performs a findUnique on the report id with no project scoping. Any authenticated user could therefore read the full configuration of any saved report on the instance, including the owning projectId, event series, filters, breakdowns and formulas, by supplying its identifier. The adjacent update, delete and duplicate procedures resolve the report first and check getProjectAccess against the report's own projectId, so the omission was specific to this procedure.
Характеристики атаки
Последствия
Строка CVSS v4.0