Rostelecom Security Labs

SecureCode Review — REST IDOR без сервисного фильтра

Сервис профиля возвращает данные только по id. Контроллер доверяет результату и выдаёт чужой ресурс. Найди строку и предложи слой авторизации.

📚 Теория: Сервисный guard и негативные тесты (раскрыть)

Почему опасно доверять ID?

Сервис загружает профиль напрямую через репозиторий. Контроллер уже прошёл аутентификацию, значит любой ID вернёт данные без проверки владельца.

⚠️ Нет проверки tenant/subject — классический IDOR.

Что делать?

Вынесите проверку во все сервисы: requireOwnedProfile(id, principal) + AuthorizationManager. Закройте сценарии тестами.

🔐 Негативные тесты блокируют регрессии при refactor.

1. Запрос

Атакующий с токеном USER просит /api/v1/users/100.

2. Сервис

Метод возвращает профиль ID 100 без проверки владельца.

3. Утечка

Личные данные уходят, а журнал воспринимает это как легитимный запрос.

Как надо: добавьте guard в сервис, используйте SpEL на контроллерах, в тестах покрывайте 200/403, а в аудиторе помечайте попытки доступа к чужим ресурсам.

Контекст

Перед релизом убрали проверку владельца из сервиса, чтобы «переиспользовать» метод в админке. Тесты не добавили, так что регрессия осталась незамеченной. Теперь любой авторизованный пользователь может читать чужой профиль.

Сниппет

Загружаем сниппет…

Code Review

Проверка флага

После ревью зафиксируй флаг, чтобы дашборд засчитал лабораторию.