Взлом 4pda или история одной ночи

в 16:32, , рубрики: 4pda, javascript, xss, взлом, информационная безопасность, метки: , ,

Взлом 4pda или история одной ночи
В этом посте будет много текста о том как одной ночью был найден активный XSS на форуме всем известного проекта 4pda. Для КулХацКероВ специалистов, баг уже прикрыли!

(Сразу прошу прощения за ошибки, за помощь в улучшении качества поста буду благодарен!)
Лирическое отступление:
Всё началось с того, что мы с другом решили пойти съесть пиццы в местной пиццерии. Прихватили с собой ноутбук, и решили поискать баги в каком-то известном проекте. Жертвой стал 4pda. Через 30 минут поедания пиццы поиска он был найден.

Баг был найден в профиле пользователя, а конкретно — SELECT «Устройство». Проанализировав, что код исполняется на всех страницах форумах где пользователь оставил своё сообщение мы решили не спешить с письмом в тех. поддержку, а посмотреть, что из этого выйдет.
(Мы не очень хорошо знаем javascript, по этому, возможно, всё можно было сделать довольно проще)
Мы столкнулись с 2-мя проблемами:
1) Скрипт более 30 символов не пропускала система.
2) document.cookie возвращал ересь что-то, что не являлось нужными нам куками.
Решение:
1) Подключали скрипт с удалённого сервера
2) Мы решили показывать всем пользователям фейковую страницу поверх основной(z-index) с сообщением о том, что срок действия сессии истек, надо перелогиниться. При этом, эта страница не показывалась дважды одному и тому же пользователю. После логина делался display:none.

Просидев еще 2 часа в кафе осуществляя наш план, мы поняли, что здесь нам уже не сильно рады и отправились домой…

Когда скрипт был полностью готов, был зарегистрирован новый пользователь и им наспамленно по всему форуму 30 сообщений. После этого мы подключили нужный скрипт и начали ждать.

Буквально через 20 секунд в базе данных уже было 5 пользователей. Через 10 минут база насчитывала сотни пользователей.
После этого был сделан скрипт для фильтрации админы/модераторы/пользователи.
В базе 20% «Друзей 4pda»; 20% «Модераторы»; 5% «Админы»; 55% «Пользователи»
После этого мы сделали экспорт бд и написали в тех.поддержку подробное описание уязвимости с прилагающимся файлом бд. Баг прикрыли в течении 1 часа.

Вывод: даже у больших и старых проектов есть «детские» уязвимости и почти 80% из них именно в SELECT-ах.

UPD: Спасибо за инвайт НЛО

Автор: c4boomb

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js