В таблице geopositions нет колонки владельца (user_id). Эндпоинт PUT /geo?id=<uuid> вызывает updatePosition без проверки, что позиция принадлежит пользователю из JWT.
Доказательства
В JWT передаётся только login для audit log, не для контроля доступа к объекту.
Влияние
Любой аутентифицированный пользователь, знающий UUID чужой позиции (поле geo_id в ответе POST /share), может подменить координаты другой семьи.
Рекомендация
Добавить owner_user_id в geopositions; проверять владельца перед update/share/watch.
Трудозатраты
M
Источник: аудит безопасности GeoShare, 2026-06-26, commit abbd199d89925483ac1801b401a4e75a2a1372e0. Важность в issue поднята на одну ступень относительно severity в отчёте.
## Важность
**критический**
## Категория
Authorization
## Место в коде
`bin/routes/geo_routes.dart:20-29`, `bin/database/database_provider.dart:77-86,232-251`
## Описание
В таблице `geopositions` нет колонки владельца (`user_id`). Эндпоинт `PUT /geo?id=<uuid>` вызывает `updatePosition` без проверки, что позиция принадлежит пользователю из JWT.
## Доказательства
В JWT передаётся только `login` для audit log, не для контроля доступа к объекту.
## Влияние
Любой аутентифицированный пользователь, знающий UUID чужой позиции (поле `geo_id` в ответе `POST /share`), может подменить координаты другой семьи.
## Рекомендация
Добавить `owner_user_id` в `geopositions`; проверять владельца перед update/share/watch.
## Трудозатраты
M
---
**Источник:** аудит безопасности GeoShare, 2026-06-26, commit `abbd199d89925483ac1801b401a4e75a2a1372e0`.
**Важность в issue** поднята на одну ступень относительно severity в отчёте.
cucadmuh
changed title from [SEC-001][блокер] IDOR: любой пользователь может обновить чужую геопозицию to [SEC-001][критический] IDOR: любой пользователь может обновить чужую геопозицию2026-06-26 19:51:38 +03:00
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Важность
критический
Категория
Authorization
Место в коде
bin/routes/geo_routes.dart:20-29,bin/database/database_provider.dart:77-86,232-251Описание
В таблице
geopositionsнет колонки владельца (user_id). ЭндпоинтPUT /geo?id=<uuid>вызываетupdatePositionбез проверки, что позиция принадлежит пользователю из JWT.Доказательства
В JWT передаётся только
loginдля audit log, не для контроля доступа к объекту.Влияние
Любой аутентифицированный пользователь, знающий UUID чужой позиции (поле
geo_idв ответеPOST /share), может подменить координаты другой семьи.Рекомендация
Добавить
owner_user_idвgeopositions; проверять владельца перед update/share/watch.Трудозатраты
M
Источник: аудит безопасности GeoShare, 2026-06-26, commit
abbd199d89925483ac1801b401a4e75a2a1372e0.Важность в issue поднята на одну ступень относительно severity в отчёте.
[SEC-001][блокер] IDOR: любой пользователь может обновить чужую геопозициюto [SEC-001][критический] IDOR: любой пользователь может обновить чужую геопозицию