Вечерний багхантинг на Facebook привел к сервису Soundcloud. Исследовалась возможность XSS уязвимостей при шейринге треков в ленту Facebook. После нескольких неудачных попыток захотелось проверить и сам Soundcloud. В течение первых 5 минут был обнаружен бесполезный, так называемый self-xss — при добавлении нового тега можно передать скрипт. При наведении на этот тэг курсором исполнялся код. Чуть позже я нашел два видео в youtube.com, где горе багхантеры выкладывали это как нечто критичное (один даже назвал видео как «Soundcloud Xss epic fail»). Продолжив свои развлечения, подключил второго персонажа, ведь если есть атакующий, должна быть и жертва.
Залил новый трек, заполнил все поля различными вариациями XSS инъекций и отправил трек жертве. Жертва открыла трек с весьма странными тегами в названиях и описаниях, но таки послушала — получилось сносно, местами не хватало мастеринга. О чем, собственно, жертва и решила сообщить автору, отправив конструктивный комментарий.
В это время автор все продолжал искать места, где можно передать скрипты в полях вывода информации на экран. В очередной раз, перегрузив страничку, атакующий заметил пришедшую нотификацию. Кликнув на звоночек, открывшийся попап с историей уведомлений подарил глазу окошко на весь экран — Бинго! Проведя небольшое исследование, оказалось, что скрипт, прописанный в названии трека, выполняется попапом с нотификациями, если в одной из них идет речь о зараженной композициии. Вот так все просто, как, впрочем, и всегда.
Как этим можно воспользоваться. Атакующий выкладывает очередной хит. Предположим, что ему 100 человек написали восторженные комментарии. Далее, атакующий добавляет к названию трека «нужный» скрипт и отвечает встречным комментарием каждому пользователю. Все юзеры со временем видят у себя нотификацию, мол на ваш комментарий был написан ответ, но как только он открыл попап с нотификациями, чтобы об этом узнать, код будет тотчас же выполнен. Куки слиты, проставлены новые лайки, репосты, новые комментарии — у кого насколько хватит фантазии.
После непродолжительного поиска по сайту я не нашел специального места, где можно было бы зарепортить о проблеме, поэтому решил воспользоваться стандартной страничкой фидбеков. Отправив сообщение, спустя несколько часов решил перепроверить наличие спец. страницы для багрепортов — и таки нашел ее. Зарепортил еще раз.
Через день мне пришло сообщение о том, что баг уже зарепортили до меня. Попытался выяснить, кто и когда, оказалось, судя по подсчетам, о баге зарепортили примерно на 10 часов раньше. Так это или нет, останется загадкой.
Вот такой он, странно-синхронный багхантинг.