В этом посте будет много текста о том как одной ночью был найден активный 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