BugBounty: нашел 5 уязвимостей на одной странице, заработав легчайшие 1.500€ (170.000 руб)
В сегодняшней статье я расскажу о том, как нашел простейшие уязвимости на сайте одного из учебных заведений Норвегии и получил за это вознаграждение.
Всем салют, дорогие друзья!
В последнее время на канале очень редко появляются примеры белого хакинга, что же, пришло время это исправить! Сегодня я расскажу о пяти различных уязвимостях, которые были найдены на сайте одного из учебных заведений Норвегии.
Интересный момент: все 5 уязвимостей были найдены на одной и той же странице сайта.
Три из этих уязвимостей были приняты, а две другие были закрыты, как дубликаты (кто-то нашел их раньше меня). По итогу мне заплатили вознаграждение в размере 1.500€, что довольно неплохо за час работы.
Прежде, чем начать, давайте немного введу вас в курс дела и объясню, что представляет из себя сайт данного учебного заведения. Итак, это школьное и студенческое веб-приложение (сайт), которое имеет три пользовательские модели: учителя, ученики и родители.
Родители могут редактировать только свою информацию в профилях учащихся.
Таким образом, у нас есть ограниченные полномочия для родительского пользователя. Именно от аккаунта родителей я и буду действовать.
Ну, а теперь давайте подробнее...
Уязвимость #1: пользователи без доступа могут изменить основной адрес студента
Когда я зашел в профиль учащегося в качестве родителя, то наткнулся на раздел "Адреса". Разрешения на редактирование которого у меня, естественно, нет.
Однако, на скрине выше вы можете видеть, что кнопка сохранения осталась активна.
Я попробовал простой метод - открыл код страницы и убрал атрибут disabled
с полей.
После я заполнил поля нужной мне информацией и сумел отправить запрос, т.к. после моих манипуляций кнопка сохранения все еще оставалась активной.
После отправки запроса информация о цели действительно изменилась. Это стало возможным благодаря тому, что защита была только на фронтенде приложения.
Точно так же эту информацию можно изменить с помощью Burp Suite.
Уязвимость #2: пользователи могут редактировать весь свой раздел даже без доступа
Родители имеют контактную информацию в профиле учащихся. Однако не могут редактировать всю эту информацию полностью, за исключением некоторых полей.
Например, тут есть такая информация, как имя и адрес, но когда мы нажимаем кнопку редактирования, можно изменить только поля контактов.
Когда я изучал код, то наткнулся на следующий PUT запрос. Как видите, были и другие поля, которые нельзя было изменить, такие как имя, адрес и т.д:
Уязвимость #3: пользователи без доступа могут создавать новое контактное поле родителей
Как я уже писал выше, родители могут редактировать только свою собственную информацию. Они не могут добавить новое родительское контактное поле.
Однако, когда я отправил запрос на редактирование таблицы контактов, то изменил все значения ID
в параметрах и смог создать новую таблицу контактов.
Запрос на картинке — это тот же запрос, что и запрос PUT во 2-м отчете. Как видите, запрос имеет много разных значений ID
. Я заменил последние цифры всех значений ID
случайными значениями. (за исключением LearnerPersonalid
, потому, что он был в начале каждого запроса и не был привязан к странице)
На самом деле мне было просто интересно, как сайт отреагирует на это действие. Я ожидал ответов 500
или 403
, но, к моему удивлению, вместо этого он создал для меня новое поле для контактов (вы можете видеть его на скрине выше).
Уязвимость #4: пользователи без доступа могут изменять типы адресов
Родители не могут изменить определенные типы адресов учащихся.
- Например, на скрине ниже есть два определенных адреса для ученика, и родители не могут изменить их типы:
- Когда я попытался изменить
residential address
наofficial addresses
, приложение выдало ошибку, и мой запрос не был выполнен:
Но, тут я вспомнил, что кнопка сохранения, которую я показывал, рассказывая про первую уязвимость, все еще активна. Я отредактировал адрес проживания и наткнулся на следующий запрос:
- Я изменил параметр «
postalTitle
» наofficial
. (Точно так же я мог бы изменить его наresidential
дляofficial
адресов)
- В приложении только один адрес может быть официальным, но на скрине выше вы можете видеть, что оба адреса изменились на
official
.
Уязвимость #5: пользователи без доступа могут удалить официальный адрес студента (Basic IDOR)
Изучая типы адресов, я увидел кое-какую разницу:
Обратите внимание, кнопка «Удалить» активна для адресов проживания (скрин выше), для официальных адресов такой кнопки нет (скрин ниже)
- Итак, я нажал кнопку редактирования официального адреса студента, запустил Burp Suite и нажал кнопку «Сохранить». Затем я снова наткнулся на следующий запрос и скопировал значение «
householdId
».
- Я вернулся к адресам проживания и нажал кнопку удаления, перехватил запрос и заменил значение «
household
» на идентификатор официального адреса.
Как видите, даже поиск самых простых и довольно очевидных уязвимостей способен принести неплохую прибыль (учитывая скромные затраты по времени).
Отмечу, что подобные уязвимости можно найти не только на сайтах учебных заведений, но и на любых других, где есть формы ввода данных.