Всем привет! Недавно мною было найдено пара уязвимостей на Голосе: одна в golos-ui, другая касалась настроек почтового сервера. О них было сообщено @lex и он оперативно их устранил. Спасибо ему за помощь!
Первая уязвимость заключалась в наличии старого домена golos.club в фрагменте коде golos-ui на Github. Этот домен был в срочном порядке зарегистрирован после блокировки Роскомнадзором основного домена golos.io 10 ноября 2017 года. И использовался как "зеркало" для доступа к Голосу. Был внесен в код в тот же день (commit) и после всех переездов и изменений его забыли убрать оттуда.
Почему это так важно? Этот домен был в исключениях использования атрибута "noopener". Когда мы открываем внешнюю ссылку без этого атрибута в новой вкладке, то открывшаяся страница имеет доступ к странице, с которой ее открыли. И с помощью определенного кода на странице в новой вкладке можно открыть в "родительской" вкладке любой другой сайт используя "window.opener.location = newURL". Для предотвращения такого сценария и используют noopener в ссылках, которые открываются в новой вкладке.
То есть, мошенник мог купить домен golos.club (а он сейчас свободен и доступен для покупки), создать на нём страницу со специальным кодом и оставить ссылку на нее в каком-нибудь посте/комментарии на Голосе. Пользователь переходит по ней и в той вкладке, с которой он перешел, открывается фальшивый Голос. Он возвращается на открытую вкладку, думает что его из-за каких-то проблем выкинуло из аккаунта и заходит снова, предоставив мошеннику свой логин и приватный ключ/пароль.
Уязвимость уже устранена, домен golos.club уже убран из кода (commit).
Подробнее про rel=noopener можете прочитать тут, а также посмотреть как всё это работает.
Вторая уязвимость заключалась в том, что совокупность выставленных настроек DMARC, SPF для почтового сервера позволяла отправлять электронные письма от имени golos.id и почтовые провайдеры пропускали эти письма, вместо того, чтобы отправлять их в "Спам" или вообще не принимать. Используя общедоступные сервисы, можно было без проблем сделать рассылку, например, с адреса [email protected] в которой присылать ссылку на фишинговый сайт или рекламу своего проекта на Голосе (знаком с подобным случаем рекламы в одном из graphene блокчейнов). Конечно, можно сказать, что сейчас регистрация проходит без сбора email и слать письма то некуда... Но 3 года назад я еще регистрировался по почте, как и все остальные пользователи, так что где-то база этих адресов есть. Или можно просто выдавать себя за Голос и творить всякие нехорошие вещи. В общем, возможность была, и если бы кто-то захотел, то смог бы ею воспользоваться в своих целях.
В данный момент @lex уже "ужесточил" соответствующие настройки, чтобы подобные сценарии не могли произойти.
Какое-то количество опытных пользователей смогли бы, без сомнений, распознать подделку письма, но для большинства пользователей электронной почты это слишком сложная задача.
Пример исходника такого письма:
Очень сложно сказать, какая сумма в Голосах будет нормальной платой за нахождение этих уязвимостей. Да и в целом, сколько Голосов стейкхолдеры Голоса готовы выделять из фонда на подобную программу Bug Bounty и оплату найденных уязвимостей в будущем. А их еще наверняка немало, так как кодовая база у нас уже довольно старая... Поэтому в данном случае я поставлю большую вилку между минимальной суммой и максимальной, а итоговую сумму уже определят сами стейкхолдеры. Возможно это подтолкнёт других пользователей активнее участвовать в развитии Голоса и его совершенствовании.
Голосовать за заявку golos.id/workers
P.S. Я специально немного обобщал и упрощал некоторые технические детали, чтобы не слишком усложнять этот пост. В интернете есть масса очень детальных статей по перечисленным выше проблемам. Например эта: How to Implement DMARC/DKIM/SPF to Stop Email Spoofing/Phishing: The Definitive Guide
@allforyou очень полезная деятельность! главное, до исправления держать в секрете, чтобы плохие люди не воспользовались )))
@ladyzarulem я так и делаю :)
@allforyou ..а самое главное - все понятно пояснид для простых пользователей!
@smotritelmayaka всегда стараюсь какие-то технические моменты простыми словами рассказать простым пользователям