December 3, 2024

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» на идентификатор официального адреса.
  • В результате данных манипуляций, я смог удалить официальный адрес даже без доступа.

Как видите, даже поиск самых простых и довольно очевидных уязвимостей способен принести неплохую прибыль (учитывая скромные затраты по времени).

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