Уязвимость контроля доступа является основным навыком злоумышленников. SAST & DAST инструменты могут обнаружить отсутствие контроля доступа, но не могут проверить, активен ли он. Контроль доступа обнаруживается при помощи ручных проверок или, возможно, с помощью автоматизации для отсутствия контроля доступа в определенных рамках. Недостатки контроля доступа являются общими из-за отсутствия автоматического обнаружения и отсутствия эффективного функционального тестирования разработчиками приложения. Обнаружение контроля доступа обычно не поддается автоматическому статическому или динамическому тестированию. Ручное тестирование — лучший способ обнаружить отсутствующий или неэффективный контроль доступа, включая метод HTTP (GET vs PUT), контроллер, прямые ссылки на объекты и т.д. Технический эффект — злоумышленники, действующие как пользователи или администраторы, или пользователи, использующие привелигированные функции, или создающие, получающие доступ, обновляющие или удаляющие запись.
Является ли приложение уязвимым?
Контроль доступа обеспечивает соблюдение политики, так что пользователи не могут действовать за пределами своих предполагаемых разрешений. Сбои обычно приводят к несанкционированному раскрытию информации, изменению или уничтожению всех данных или выполнению бизнес-функций вне зоны ответственности пользователя. Общие уязвимости контроля доступа включают в себя:
- Обход проверок контроля доступа путем изменения URL-адреса, внутреннего состояния приложения или страницы HTML или просто с помощью специального инструмента атаки API.
- Разрешение замены первичного ключа на запись других пользователей, разрешение просмотра или редактирования чужой учетной записи.
- Повышение привилегий. Выступаете в роли пользователя, не входя в систему, или действуя как администратор, когда вы входите в систему как пользователь.
- Работа с метаданными, например воспроизведение или подделка с помощью токена контроля доступа JSON Web Token (JWT), файла cookie или скрытого поля, изменяемого для повышения привилегий, или злоупотребление аннулированием JWT
- Неправильная настройка CORS допускает несанкционированный доступ к API.
- Принудительный просмотр страниц, прошедших проверку подлинности, как пользователя, не прошедшего проверку подлинности, или привилегированных страниц как обычный пользователь. Доступ к API с отсутствующими элементами управления доступом для POST, PUT и DELETE.
Как предотвратить
Контроль доступа эффективен только в том случае, если он применяется в доверенном коде на стороне сервера или в API без сервера, где злоумышленник не может изменить проверку контроля доступа или метаданные.
- За исключением публичных ресурсов, по умолчанию запрещаем доступ.
- Реализуйте механизмы контроля доступа один раз и повторно используйте их во всем приложении, включая минимизацию использования CORS.
- Элементы управления доступом к модели должны обеспечивать просмотр, а не признавать, что пользователь может создавать, читать, обновлять или удалять любые записи.
- Отключите список каталогов веб-сервера и убедитесь, что метаданные файлов (например, .git) и файлы резервных копий отсутствуют в корнях веб-сайтов.
- Активировать журнал контроля доступа сбоев, оповещать администраторов при необходимости (например, повторные сбои).
- Ограничение скорости API и доступ к контроллеру, чтобы минимизировать вред от автоматического инструментария атаки.
- Токены JWT должны быть признаны недействительными на сервере после выхода из системы.
- Разработчики и персонал QA должны включать функциональный блок контроля доступа и интеграционные тесты.
Полезные ссылки
- https://www.owasp.org/index.php/Top10-2017A5-BrokenAccessControl
- https://www.owasp.org/index.php/OWASPProactiveControls#6:ImplementAccess_Controls
- https://www.owasp.org/index.php/Category:OWASPApplicationSecurityVerificationStandard_Project#tab.3DHome
- https://www.owasp.org/index.php/TestingforAuthorization
- https://www.owasp.org/index.php/AccessControlCheat_Sheet
Cross-Site Request ForgeryСуть уязвимости заключается в возможности передачи произвольного запроса на веб-сервер в сессии авторизированного пользователя.
Способы защиты:1. Некоторые браузеры имеют встроенную защиту от данной уязвимости (не стоит на это полагаться)2. Anti-Forgery Token
Использование Anti-Forgery Token является единственным действенным способом защиты. При запросе сервер выдает клиенту два случайно сгенерированных значения одно в скрытом поле формы другое в куках. При получения ответа сервер проверяет данные значения, если они не совпадают или отсутствуют — запрос отклоняется.
Пример использования AntiForgery-Token в ASP.NET
Форма
@using ( Html.BeginForm ()) { @ Html.AntiForgeryToken () <fieldset> ... </fieldset> } |
Контрол
[HttpPost] [ValidateAntiForgeryToken()] public ActionResult Edit(UserModel user) { if ( ModelState.IsValid ) { // some actions; return View(user); } retutn View(user); } |