
В функционале социальной сети Вконтакте обнаружен и успешно эксплуатировался опасный баг — хранимая XSS с функционалом сетевого червя.
В данный момент уязвимость устранена.
Сообщества и пользователи ВКонтакте вечером 14 февраля начали публиковать одну и ту же запись. В записи говорится о том, что в личных сообщениях в соцсети появилась реклама.

За сутки до взлома в сообществе «Багосы» было обсуждение уязвимости, тем не менее соц сеть оказалась не готова к атаке.

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

Используемый javascript код можно найти по ссылке.
Примечательно то, что в коде js-пейлоада содержится несколько сообщений, произвольно добавляющихся при распространении:
var t = ["Всё меньше причин оставаться ВК.. Ждем пока mail group окончательно загонят сайт в яму и переходим на telegram", "Дурову пора создавать новый вконтакте, этот уже испортили", "Прости, Паша, мы все прое*али", "Ну это уже ни в какие рамки", "ВКонтакте окончательно загнулись", "Мда, меилру продолжает губить все, к чему прикасается", "Это пи*дец, товарищи", "Раньше было лучше", "стало очень неудобно", "лучше бы делом занялись", "я просто в шоке", "без комментариев", "Как же достали со своими обновлениями", "Фуфло полное ,не трогайте сообщения!", "сначала музыка, теперь ЭТО", "С такими говновведениями, что тут бодяжат последнее время, со всякими дебильными ветоШными комментами, тупыми закладками, невидимыми репостами и т.д., все и так сбегут скоро"],
d = ["Социальная сеть ВKонтакте зaпустила реклaму в личных сообщенияx пользоватeлей", "СМИ: ВКонтакте запустили pекламу в личных соoбщениях", "ВКонтакте запустили рекламу в сообщениях", "ВКонтакте появилась реклама в сообщениях", "ВКонтакте ввели рекламу в сообщениях", "ВКонтакте тестирует рекламу в личныx сообщениях", "ВКонтакте представили рекламу в личных сообщениях", "Реклaма в личных сoобщениях появилась ВКонтакте", "Пользователей BКонтакте взбесила реклама в личных сообщениях", "Пользователи ВКонтакте протестуют против рекламы в личных сообщениях", "Реклама в личных сообщениях вывела из себя пользователей ВКонтакте", "ВКонтакте: мы запускаем рекламу в личных сообщениях", "ВКонтакте: теперь рекламодатели могут размещать рекламу в сообщениях пользователей", "ВКонтакте прокомментировали жалобы пользoвателей на рекламy в сообщeниях", "Пользователи ВКонтакте в ярости из-за рекламы в личных сообщениях", "Пользователи бегут из социальной сети ВКонтакте из-за рекламы в личных сообщениях"],
Уязвимости такого класса и эффекта довольно редки, но тем не менее все еще встречаются. Стоимость такой уязвимости должна оцениваться исходя из ее импакта и того урона, который она может нанести пользователям. Некоторые ресерчеры могут быть не согласны с политикой выплаты вознаграждения и выбирают альтернативный путь — использование ее in the wild ради шутки и привлечения внимания к проблеме.
Что делать: выйдите из всех сессий социальной сети и смените пароль (необязательно, но желательно), а также проверьте номер телефона и email, привязанные к аккаунту.
Комментарии (41)
pyrk2142
14.02.2019 21:47+13причем за сообщение о такой ошибке MailRu Group выплатили бы щедрое баунти
Как человек, который сообщал в Баг Баунти о возможности доступа к многомиллионному количеству аккаунтов в ВК, а через месяц получивший крайне щедрое «мы знаем об этом из внутренних источников» я больше не хочу сообщать туда что-то серьёзное. Сейчас думаю о том, что делать с другими интересными багами.LukaSafonov Автор
14.02.2019 21:52Уже изменил последний абзац, но как багхантера понимаю Вас. Не применимо к ББ ВК, а в целом, примеры приводить не буду, по чатикам и так все о них знают.
QtRoS
15.02.2019 13:20+3А, ясно, зря я надеялся на рассмотрение моего medium-репорта за обозримый срок (на данный момент больше месяца уже), раз critical никто не смотрит...
bzzz00
14.02.2019 22:37+10совет — выйдите из ВК и не заходите.
swelf
14.02.2019 22:47У меня пару вопросов от нуба
1)В вк в сообщениях можно посылать сырые html теги? в данном случае iframe с любыми параметрами
2)Как вк(любой сайт) должен защищаться от такого, когда в его теле загружается iframe с левого домена.andreymal
14.02.2019 22:511) Нет, это следствие некорректной обработки ссылки
2) В данной уязвимости не было iframe с левым доменом
Merkat0r
15.02.2019 05:33)Как вк(любой сайт) должен защищаться от такого, когда в его теле загружается iframe с левого домена.
CSP: frame-srcDarkByte
15.02.2019 09:15В ВК подразумевается легитимная возможность отображения роликов с ютуба во фрейме. Но в данном случае загвоздка же не в iframe-src была.
tempick
14.02.2019 23:01+2Вот тут чел расписал более коротко и ёмко vk.com/wall278247703_262
popov654
15.02.2019 08:58Он как-то несколько странно всё описал. Во-первых, про Вики-страницы совершенно ничего не понятно — наверное имелось в виду, что править разметку HTML можно только при редактировании вики-страницы, но никак не при отправке обычного сообщения в ЛС — хотя механизм вставки видеоролика и там и там должен быть примерно одинаковым по идее. И дальше про iframe немного намудрил: вк получает результат парсинга страницы с видеозаписью через локальный скрипт-«гейт», расположенный на домене vk.com, и делается это через обычный XHR скорее всего (в ЛС точно именно так всё происходит). Таким образом, вредоносный скрипт подключается прямо в head текущей страницы.
А вот что именно он делает — автор толком не рассказал, а ведь это как раз достаточно интересно.egormerkushev
15.02.2019 11:14Всё там хорошо описано.
popov654
15.02.2019 20:23Я бы не сказал. Слог у автора довольно корявый (я надеюсь, он меня простит, если это читает).
tempick
15.02.2019 17:06Что делает? Перебирает группы пользователя в цикле и размещает пост там, где это можно. Это же логично. А если нет — можно самому открыть скрипт (там есть скрин, где ссылка на скрипт на гитхабе есть. Достаточно вбить этот url в адресную строку и увидите, как оно работает). Но такой скрипт написать — как раз плюнуть. Гораздо сложнее найти xss-уязвимость и внедрить его. А как это было сделано — об этом как раз автор и рассказывает.
popov654
15.02.2019 20:25Да я-то знаю, что он делает. Но не все же тут JS кодеры, кто читает эту новость (возможно). На самом деле, тут есть три интересных момента:
1) То, что мы внедрили вредоносный скрипт прямо в документ, дало нам возможность читать через XHR ответы от share.php
2) share.php выдаёт список групп и hash, причём последний — не является одноразовым, поэтому и возможна рассылка в цикле подряд без его обновления
3) Капчи при этом действительно нет
vintage
15.02.2019 07:27Так всегда бывает, когда фронтендом занимаются бэкендеры.
babylon
15.02.2019 08:47-1Как всегда беспощаден в своих комментариях:) Впрочем, а чего сюсюкать. Правильный фронтенд как по мне на порядок сложнее бэкенда.
vintage
15.02.2019 10:39-3Не в этом суть. Отсутствие санитайзинга пользовательского контента по белому списку — это детский сад. Что понятно любому, кто знаком со всем многообразием тегов, аттрибутов и, внезапно, css-свойств.
popov654
15.02.2019 11:00+1А что можно через CSS-свойства сделать плохого? Кроме раздражающей анимации
e_juke
15.02.2019 11:19+1Из того, что навскидку вспомнил:
Положить браузер
Вытащить часть пароля/текста, используя шрифтыTheShock
15.02.2019 12:07Вытащить часть пароля/текста, используя шрифты
Круто! А как это пофиксили в итоге?caffeinum
15.02.2019 15:47Из статьи по ссылке:
I reported this trick to Chrome Team but it has been marked WontFix on Issue 543078.
Chrome отказались исправлять баг, сославшись на спецификацию.
https://bugs.chromium.org/p/chromium/issues/detail?id=543078
vintage
15.02.2019 11:19Самые эпичные — это
-moz-binding
в мозилле иexpression
в ишаке. Но эти лавочки уже прикрыли.
OnelaW
15.02.2019 14:14+1Черномырдин (с)
Лавров (с)
bliznezz
15.02.2019 16:43Помню такие же развлечения на заре развития, во времена ласипаН -а, когда стена еще была, GET-запросы ты в разных местах создавали записи на стене.
andreymal
А сами багоси пишут, что не платили в течение целого года, именно поэтому и запустили сабж
LukaSafonov Автор
Примеры выплат:
hackerone.com/reports/181823
hackerone.com/reports/375886
hackerone.com/reports/261966
hackerone.com/reports/281851
andreymal
Это называется систематическая ошибка выжившего