Прятки на видном месте: использование инструментов разработчика для поиска уязвимостей безопасности |
08.05.2019 00:00 |
Автор: Кристин Джэквони (Kristin Jackvony) Большое заблуждение считать, что любое тестирование безопасности – это очень сложная штука. Конечно, зачастую оно требует изучения новых навыков и понимания таких вещей, как сети, IP-адреса и доменные имена, но оно может быть и невероятно простым. Сегодня мы поговорим о трех дырах безопасности, которые можно найти в приложении при помощи инструментов разработчика, встроенных в браузер. Этими уязвимостями может воспользоваться любой среднестатистический пользователь приложения, а не только высококвалифицированный черный хакер. Редактирование заблокированных кнопок Если на странице есть кнопка, которая заблокирована и срабатывает только тогда, когда выполнены определенные условия – например, заполнение полей формы, - возможно, ее можно активировать. Инструкции, как это сделать – в моей статье о тестировании кнопок. Пользователь вашего приложения может использовать эту уязвимость, чтобы обойти необходимость заполнения формы, в которой есть обязательные поля. Пользователь также может активировать кнопку редактирования и изменить данные, для изменения которых у него не должно быть прав. Просмотр скрытых данных Недавно мне показали уязвимость безопасности в приложении, выводящем контактные данные пользователей сайта. В зависимости от пользовательских прав на странице не отображались определенные поля – например, домашний адрес. Однако при открытых инструментах разработчика все скрытые поля были видны в секции "Elements"! Любой пользователь этого приложения мог открыть инструменты разработчика и с их помощью найти личные данные любого пользователя сайта. Скрытые страницы В секции Elements инструментов разработчика можно найти ссылки, не отображающиеся на странице. Давайте посмотрим, как это делается, используя OWASP Juice Shop. Я приведу инструкцию для Chrome, но это можно сделать также в Firefox и Internet Explorer. Перейдите в Juice Shop, затем нажмите на многоточие в верхнем правом углу браузера. Выберите "Дополнительные инструменты", а затем – "Инструменты разработчика". Откроется секция инструментов. Нажмите на вкладку "Elements", если она не выбрана по умолчанию. Мы посмотрим на HTML-код страницы и поищем ссылки, не отображающиеся в браузере. Начнем с нажатия на элемент страницы, который нам виден. На главной странице есть навигационная панель со ссылками вроде "About us" и "Contact us". Кликните на одном из элементов панели правой кнопкой и выберите "Просмотреть код". Обратите внимание, что в результате подсветится соответствующая секция HTML в инструментах разработчика. Вы увидите набор элементов, отмеченных тэгом <li> - это элементы навигационной панели. Откройте каждый из них, кликая на стрелочку слева, и вы найдете вот такой элемент: Статус этого элемента – скрытый, что показывает нам атрибут "ng-hide". Атрибут 'ng-show="isLoggedIn" говорит, что панель должна отображать этот элемент только для зарегистрированных пользователей. И, наконец, там содержится ссылка, по которой мы бы смогли перейти, если бы этот элемент отображался: "#/recycle". Попробуем перейти по этой ссылке, изменив URL страницы с https://juice-shop.herokuapp.com/#/search на https://juice-shop.herokuapp.com/#/recycle. Нажмите Enter, и вы попадете на страницу удаления. Вы успешно перешли на страницу, которая должна быть доступна только авторизованным! Вот почему так важно проводить проверки на авторизацию, когда пользователь переходит на страницу. Просто спрятать ссылку недостаточно, потому что скрытые ссылки легко найти через инструменты разработчика. Кто угодно может найти эти ссылки и перейти по ним, а это может дать доступ к странице администратора или данным других пользователей. Как видно, тестирование подобных уязвимостей безопасности – это легко и просто! Я рекомендую проверять их при любом тестировании веб-страницы. И бонусная уязвимость: если создать учетную запись и авторизоваться в Juice Shop, а потом посмотреть на вкладку Network в инструментах разработчика, вы увидите ваш логин и пароль, переданные чистым текстом! |