😈 Букет уязвимостей
Недавно на программе Bug Bounty несколько уязвимостей вместе позволили добиться вектора атаки с высоким уровнем критичности — CVSS 8.8.
Общая краткая суть в перехвате сеанса — Session Hijacking (A2:2017-Broken Authentication).
▎Будем разбирать данный вектор поэтапно:
➡️1) Первым делом нужно украсть cookie и данные из браузерного хранилища (local/session storages) жертвы. Сделать это проблем не составит, жертве достаточно будет перейти по ссылке атакующего, поскольку на сайте отсутствует атрибут HttpOnly, который предотвращает кражу cookie и local/session storages с помощью JavaScript (см. скриншоты).
➡️2) После того, как мы получили cookie и local/session storages вставляем их в свой браузер. Это можно сделать быстро с помощью браузерных расширений по типу Cookie-Editor и LocalStorage Editor. Теперь перезагружаем страницу и мы оказываемся в аккаунте жертвы. Веб-приложение уязвимо к такой атаке, поскольку оно полагается исключительно на данные, хранящиеся в браузере, для автоматической аутентификации пользователя, без дополнительной проверки пароля или других факторов аутентификации. На этом можно было и остановиться, поскольку цель уязвимости Session Hijacking достигнута, но я пошел дальше.
➡️3) Находясь в сессии пользователя (в данном случае в своем втором аккаунте, созданном для этой цели), я имею к ней полный доступ. Что нам мешает попробовать сменить почту или номер телефона? И тут еще один сюрприз: при смене этих данных веб-приложение запрашивает код подтверждения только из нового email/номера телефона, который я ввел, а не старого. По логике должно сначала быть наоборот. Тем самым еще помимо нарушения конфиденциальности и целостности нарушилась и доступность. Легальный пользователь не сможет зайти в свой аккаунт, поскольку логин будет без проблем сменён.
➡️4) Помимо всего этого, в аккаунте также можно заполнить адрес проживания и банковскую карту (её заполнить не пробовал, но не думаю, что данные карты были бы полностью видны).
▎Краткий итог:
➡️Нарушена конфиденциальность — доступ к аккаунту путём кражи сессии.
➡️Может быть нарушена целостность — поскольку есть полный доступ к аккаунту, злоумышленник может изменять какие-либо данные на аккаунте.
➡️Может быть нарушена доступность — есть возможность без проблем менять номер телефона или логин к аккаунту, которые являются логином для входа в аккаунт. Система не запрашивает код подтверждения на предыдущие реквизиты, а предлагает ввести код из новых введённых.
▎Рекомендации по исправлению:
✅Внедрить HttpOnly атрибут в веб-приложении, предотвращающий кражу cookie и local/session storages через JavaScript.
✅Внедрить CSP (content security policy) для большей защиты от вредоносных JS-скриптов.
✅Хранить токен следует в sessionStorage вместо localStorage, так как данные в sessionStorage очищаются при закрытии вкладки браузера, что снижает риск их утечки. Поэтому их копирование на другой браузер не сработает.
✅Реализовать механизм проверки подлинности сессии на стороне сервера. Например, использовать привязку сессии к IP-адресу или устройству пользователя. Это усложнит использование украденных cookie на другом устройстве.
✅Добавить обязательную проверку старого email или номера телефона при их смене. Код подтверждения должен отправляться как на старый, так и на новый адрес/номер, чтобы предотвратить несанкционированную смену данных.
Выплачивать отказались с пометкой "out-of-scope".
#bugbounty #кейс
Post #39
1.04K



- 🔥 9
- 👍 4
- 👏 2
- ❤ 1