TLDR ПОМЕНЯЙ СВОЙ ПАРОЛЬ!
1. На сайте была уязвимость, позволявшая утекать данным.
2. Сейчас она уже закрыта*.
3. Что могло утекать: ваш email, ip-адрес, переписка и всё, что связано напрямую с аккаунтом.
4. Пароли не были украдены, НО злоумышленники (да мы, а что?) могли и теоретически всё ещё могут войти в ваш аккаунт и пользоваться им как своим, если до этого вошли в него через уязвимость.
5. Что мне делать с этой информацией:
*не можем проверить одно место из-за приватности кода, но админы говорят, что залили исправление и туда.
2. Сейчас она уже закрыта*.
3. Что могло утекать: ваш email, ip-адрес, переписка и всё, что связано напрямую с аккаунтом.
4. Пароли не были украдены, НО злоумышленники (да мы, а что?) могли и теоретически всё ещё могут войти в ваш аккаунт и пользоваться им как своим, если до этого вошли в него через уязвимость.
5. Что мне делать с этой информацией:
- поменяйте пароль, это сбросит все сессии, в том числе и ту, которой могут пользоваться злоумышленники, залогинившись в ваш аккаунт через уязвимость.
- подумайте.
*не можем проверить одно место из-за приватности кода, но админы говорят, что залили исправление и туда.
Так, теперь немного хронологии, технологии и даже идеологии:
Хронология:
1. Уязвимость существовала на сайте очень долго (годы), мы не знаем, кто впервые её нашёл и как долго мог ею пользоваться. Мы знаем лишь, что
Помимо нас и
2. Где-то через ~2.5 месяца появляемся мы и тоже находим уязвимость, параллельно узнавая подробности безуспешной борьбы
3. Видя плачевность ситуации - Нами объявляется ультиматум в 3 дня на починку уязвимости, а также сливается база данных репортов.
4. День 1. Gentler World Part 1 цензурируется, эскалация продолжается.
День 2. Выпускается вторая часть Gentler World и тут же уничтожается, что приводит во-первых к тому, что вы не увидели базу данных, по которой можно определять твинков (без прямого слива ip, да, так было можно, морр), а также понять, что ваши айпи были слиты. Во-вторых, приводит к дальшейшей эскалации.
5. Применяется секретное оружие, текущая администрация складывает полномочия, военная администрация занимает её место. Сайт скомпрометирован и, в знак капитуляции, отправляется в 502, война заканчивается на второй день.




Если у вас есть ещё скриншоты этих знаменательных событий - делитесь в комментариях, добавим сюда.
6. Как и было обещано, мы исправляем уязвимость и, благодаря выходу на контакт с администрацией, заливаем фикс на сайт. Два с половиной дня для достижения цели, отличный результат, мы себя хвалим. (Да успокойся ты уже, не интересен,
Технология:
КАК
Полагаем, что нашей основной аудитории не будет интересна или даже понятна данная часть, поэтому в целях экономии места, спрячем её под спойлер.
Морр активно любил поиспользовать метод constantize на пользовательский ввод. Также он активно любил не проверять этот самый пользовательский ввод.
Прочитать про constantize: apidock.com/rails/String/constantize
Прочитать почему его не надо использовать: docs.datadoghq.com (или прямо здесь, в этом посте)
Собственно, рассмотрим пример: github.com
Перед собой мы видим метод голосования или же POST /vote, принимающий на вход votable_type, из которого мы получаем нужный тип, а затем используем на него метод find с параметром votable_id, который также приходит параметром.
Вопрос - что будет, если отослать метод /vote с votable_type=User и votable_id=1? Ответ - вы получите ошибку, а в этой ошибке сущность User с id 1 (morr). Уважаемые Ruby разработчики подсказывают, что так вообще по дефолту не делается, а это сам Морр по каким-то причинам так написал, но это вопрос нас сегодня не интересует.
Итак, мы можем подать произвольный класс из базы (User, AbuseRequest, Message и т.д.) и произвольное айди, что же мы делаем дальше? Правильно - начинаем парсить базу, но качать по одному id за раз крайне неинтересно и медленно, поэтому мы быстро находим вариант отправлять вместо одного votable_id ~бесконечное кол-во id, закладывая в тело запроса votable_id[]=1,votable_id[]=2 и т.д. Таким нехитрым способом мы получаем возможность скачивать базу гораздо быстрее. Можно было бы даже всю за 1 запрос, если бы не ограничение метода find. При подаче в него массива айди, если хоть один не будет найден, то он вернёт 404. Отсутствующие айди быстро получили название "дырки" и борьба с ними и стала основной преградой для быстрой выкачки базы (🍽️).
Соответственно, был разработан алгоритм для борьбы с этими самыми дырками, который хоть и не позволял качать всё разом, но значительно увеличивал скорость скачивания базы.
Отдельно стоит отметить, что поля encrypted_password и ip адреса там не откидывались, вероятно благодаря Devise, который всем этим делом занимается. Что, впрочем, не помешало получить айпи из таблицы UserRateLogs.
Сегодня мы не будем рассказывать про то, как был достигнут произвольный доступ в любой аккаунт, т.к. до сих пор не имеем возможности убедиться в фиксе уязвимости из этого ПР-а: github.com/shikimori/shikimori/pull/2853
Почему?
Морр активно любил поиспользовать метод constantize на пользовательский ввод. Также он активно любил не проверять этот самый пользовательский ввод.
Прочитать про constantize: apidock.com/rails/String/constantize
Прочитать почему его не надо использовать: docs.datadoghq.com (или прямо здесь, в этом посте)
Собственно, рассмотрим пример: github.com
Перед собой мы видим метод голосования или же POST /vote, принимающий на вход votable_type, из которого мы получаем нужный тип, а затем используем на него метод find с параметром votable_id, который также приходит параметром.
Вопрос - что будет, если отослать метод /vote с votable_type=User и votable_id=1? Ответ - вы получите ошибку, а в этой ошибке сущность User с id 1 (morr). Уважаемые Ruby разработчики подсказывают, что так вообще по дефолту не делается, а это сам Морр по каким-то причинам так написал, но это вопрос нас сегодня не интересует.
Итак, мы можем подать произвольный класс из базы (User, AbuseRequest, Message и т.д.) и произвольное айди, что же мы делаем дальше? Правильно - начинаем парсить базу, но качать по одному id за раз крайне неинтересно и медленно, поэтому мы быстро находим вариант отправлять вместо одного votable_id ~бесконечное кол-во id, закладывая в тело запроса votable_id[]=1,votable_id[]=2 и т.д. Таким нехитрым способом мы получаем возможность скачивать базу гораздо быстрее. Можно было бы даже всю за 1 запрос, если бы не ограничение метода find. При подаче в него массива айди, если хоть один не будет найден, то он вернёт 404. Отсутствующие айди быстро получили название "дырки" и борьба с ними и стала основной преградой для быстрой выкачки базы (🍽️).
Соответственно, был разработан алгоритм для борьбы с этими самыми дырками, который хоть и не позволял качать всё разом, но значительно увеличивал скорость скачивания базы.
Отдельно стоит отметить, что поля encrypted_password и ip адреса там не откидывались, вероятно благодаря Devise, который всем этим делом занимается. Что, впрочем, не помешало получить айпи из таблицы UserRateLogs.
Сегодня мы не будем рассказывать про то, как был достигнут произвольный доступ в любой аккаунт, т.к. до сих пор не имеем возможности убедиться в фиксе уязвимости из этого ПР-а: github.com/shikimori/shikimori/pull/2853
Почему?
Идеология:
1) Напомним, что уязвимость не фиксили 3 месяца, пока наши действия буквально не вынудили администрацию обратить внимание на проблему. Об этом стоит подумать.
2) Несмотря на изначально бодрый (по крайней мере с нашей точки зрения) настрой администрации после компрометирования сайта, очень быстро всё сменилось на какую-то странную форму безразличия\вялотекучести. Позвольте объяснить:
Своими руками администрация ничего исправлять вообще не хочет. Мы предоставили фикс 2 критических мест, а также список с другими, такими же потенциально опасными местами (абсолютно бесплатно, как и обещали, если это вдруг кого-то волнует). Фикс был скопирован админами в их приватную ветку (об этом позже), но в остальных потенциально уязвимых местах - никакой работы сделано не было. На вопрос о их починке, от администрации был получен вот такой ответ, приводим цитату и считаем её достоянием общественности:
Привет, так как мы не программисты на Ruby все проблемы найти не сможем, но твое уже залито
Оценку данного заявления оставляем общественности.
Несколько наших фиксов привели к техническим проблемам на сайте, которые сейчас (надеемся) мы уже решили. И хотя можно обвинить нас в некачественном подходе к исправлению и тестированию, стоит не забывать, что мы делаем всё бесплатно и даже продолжаем следить за ошибками, вызванными нашими действиями, и стараемся их своевременно чинить.
Также добавим, что с каждым нашим исправлением были даны пояснения о необходимости проведения собственного тестирования с целью проверки, что ничего не сломалось. Было указано, что нужно обратиться к Мору, с которым у администрации есть контакт, комментарий об этом был оставлен даже в коде. Ничего из этого сделано (по видимому) не было, а в будущем конкретно это исправление привело к проблемам с топиками, которых можно было избежать просто задав вопрос человеку, который всё это и написал.
Все дальнейшие исправления багов, вызванных починкой уязвимостей, были встречены полным игнором и тихим заливанием исправлений. Все наши дальнейшие вопросы - не находили никакого ответа. До сегодняшнего дня, сегодня, наконец, удалось уточнить некоторые детали. В общем, коммуникация странная, особенно когда речь идёт о потенциальных утечках данных, которые тебе бесплатно фиксит сообщество.
Исправление последнего, на наш взгляд, уязвимого для утечки данных метода мы проверить не можем, т.к. 1) Код в приватной ветке, мы не знаем залили ли они в него исправления или нет. 2) Уязвимость в методе предложения кандидатов для турнира, а сейчас таких турниров нет. Администрация утверждает, что фикс залит и туда, подтвердить этого мы на данный момент не можем.
Отдельно отметим, что до сих пор от администрации не последовало ни поста о серьёзности проблемы, ни каких-бы то ни было действий, направленных на сброс сессий пользователей. Планируют ли они что-то сделать - мы не знаем.
3) В связи с удалением прошлого поста, вы могли пропустить загадку:
И пока вы морализируете над самим фактом выкладывания даже зацензурированной базы в открытый доступ, мы предлагаем вам загадку:
Чем отличается модератор, имеющий прямой доступ с VIP-ложей к этим данным, от вас?
Мы даём пояснение к загадке: помимо
(посмотреть его можно здесь shikimori.one/ТВОЙ-НИКНЕЙМ/history/logs)
(что мы находим странным, даже если ваш ip здесь видит только администратор)
Выглядит так:

Зачем? Спросите у морра, думаем он обязательно придумал бы вам какой-нибудь .
Изначальная идея ясна - так определяются твинки. Только нет никакой причины, показывать этот айпи модератору, что и было продемонстрировано в прошлом посте (который стёрли). Модератор - это часто случайный человек с неопределёнными желаниями и мировоззрением, которого ещё и невозможно в этом конкретном случае проконтролировать. Сомневаемся, что морр и новая администрация собирают сканы паспорта при приеме модератора на работу. Сомневаемся также, что модераторы подписывают NDA.
Морр о проблеме утечки айпи адресов через модерку прекрасно знал, фуджитава, в своё время бывший модератором, буквально сохранял айпи адреса пользователей, проверял города, где они живут и до сих пор доволен предоставившейся ему в прошлом возможностью. Стоит ли напоминать, что ещё делал фуджитава? Стоит ли напоминать, что злоумышленник, получив доступ к аккаунту модератора - тоже видит ваш ip?
Морр знал и ничего не сделал, всё осталось как есть. А зачем что-то менять, если его собственный ip адрес не посмотреть, правильно?
Нехитрый метод борьбы
1. Берёте аддон addons.mozilla.org/en-US/firefox/addon/censor-tracker/ (или любой прокси или впн).
2. Активируете его для шики.
3. Логинитесь с ним дважды (вошёл->вышел->вошёл), тем самым перетирая прошлые ip.
4. Удаляете\выключаете аддон и пользуетесь сайтом как раньше.
5. PROFIT!?!?!
2. Активируете его для шики.
3. Логинитесь с ним дважды (вошёл->вышел->вошёл), тем самым перетирая прошлые ip.
4. Удаляете\выключаете аддон и пользуетесь сайтом как раньше.
5. PROFIT!?!?!
4) Прошлые две базы всё ещё в открытом доступе, ссылку на них вы можете попросить, например, в личке у нас или у кого-то ещё, кто их сохранил, думаю такие найдутся в комментариях.
Для особо интересующихся как же всё таки были скомепрометированы произвольные аккаунты - личные сообщения, ответ будет дан или не дан в зависимости от качества объяснения вами причин интереса и нашей уверенности в полном исправлении уязвимостей на момент запроса.
5) Мы надеемся, что все исправления наконец приняли нужный вид и больше ничего не отломается. Также мы надеемся, что оставшиеся фиксы всё-таки будут приняты и\или доведены до ума, но, видимо, уже не нами. Мы надеемся, что сделали достаточно и констатируем (и даже констатинируем), что наша работа окончена.
Благодарим за внимание и, конечно же:



@Kralka, Прочитал своё первое Пользовательское соглашение в жизни!Больше не хочу чета, мдэ
Ну, вопрос требований не так сильно связан с бесправием пользователя в части карательных мер: то, что мы все ГОВНО, я услышал; а вот говорить громче тут бессмысленно - действительно, там нет ни слова об их обязанностях. То есть все вот эти топики и бесчисленные комментарии с ожиданиями - туфта и бред.
В целом - так и ожидал: ты либо хочешь использовать чужой ресурс и хаваешь, либо проваливай. Всё очень просто и не очень радостно.
Будь я разработчиком, моя политика была бы абсолютно такой же, без единого отличия. Зря я на Дока нагонял, палучаеца
@Kralkaодни всерьез делают вид что правила имеют смысл и серьезно их обсуждают, другие всерьез стараются их серьезно воспринимать и следовать.
Не требую, я лишь в ожидании заявленного. Заявлено же было: мол я готов для открытого общения с пользователями. Понятие же "открытого общения", видимо, у всех разное, раз есть место фантазерству и выдаванию черного за белое. Это неприемлемо для модератора, учитывая громкие заявления, и, как минимум, некрасиво (я все еще выражаюсь культурно, цени это, Гарек) для человека.
Главная проблема Шики на сегодня - болт безразличия со стороны главенствующих, которого Гарек "не видел" и которое оправдывал, гиперболизируя о работе ключевых людей. Именно такое поведение со стороны модератора форума слегка удивило (я все еще держу себя в рамках приличия,
@Garec). Если вкратце. В общем, почитай там, если интересно.Справедливости ради, не Гарек должен отдуваться за всех и вся в подобных темах. Но мы же все в курсе, насколько важно наше мнение и куда пойдут пожелания юзера вида простейший.
@Sh1zartdi@Lol4ik_Pon4ikПозорище
@medifh,@Simplyage, ну морр сайт разрабатывал, взял и сделал так, чтобы у админа айпи не отображался для модеров, не ясен вопрос.Вот прям кусок кода, который за это отвечает:
Если по русски, то: не выводить вот эти вот поля внутри квадратных скобок, если просматриваемый профиль - профиль администратора.
@pomatu, на это, думается, ни у кого нет ответа.Сложно сказать куда тут уже продолжать, но в целом ответ тот же, что и помату.
@Simplyage@nikolina, Почитал, истоки негодования - ясны, обоснованны.Впрочем, любые требования и ожидания, вне зависимости от предыдущих слов человека и его заявлений, бессмысленны и даже... В общем, я бы не стал ждать ничего и ни от кого. А вот сделать соответствующие выводы и определить для себя ценность таких слов, заявлений, обещаний от этих людей на будущее - вполне стоит, меньше разочарований будет.
Я и сам когда был в офисе на зарплате, то говорил вещи, которых не понимал или даже не совсем был согласен, да с абсолютно серьёзным лицом, а то и полной уверенностью. Вариантов для себя не видел, в правоте своей был (до поры до времени) уверен, так что и осуждать его не стану; его путь и ошибки (если это именно ошибки) точно не мне судить.
@nikolina@Sh1zartdi, довольно развернутый комментарий, не вызывающий каких-либо противоречивых чувств. В целом, согласна.Выводы сделаны еще в соседней ветке. Думаю, они очевидны. Но отношение к присходящему остается неизменным. По причине? Полагаю, она тоже очевидна.
Максимализм присущ многим и это не всегда плохо. Максималисты-мечтатели - двигатель прогресса. Другое дело - кто и как использует подобные качества. Все зависит от дожности лица, в первую очередь, то как он себя позиционирует и, как итог, слова/действия.
Я повторюсь, но "замыливать мозг" пользователям - сущий моветон со стороны супермодератора, учитывая какие громкие заявления он делал, вступив на должность модератора. Обсуждать с Гареком подобное можно долго и безрезультативно, видется мне. Объяснять, что такое хорошо, что такое плохо Не крохе - трата времени. Я надеялась, что на Шики появится хоть один справедливый, честный и открытый модератор. Вот досада)
@EndlessJoke, понял. Я просто не шарю за всю эту тему, вот и интерес разобрал.@реманга орг лучший сайт сам сижу всем советую,@Simplyage@Simplyage,Зачем полез если не шаришь, у тебя все как обычно
@Simplyage, слушай, ну нельзя же такую ахинею писать. Прекращай давай. Мне за тебя стыдно.@Palehermit@Simplyage, Сам себе ответил, хорош@Simplyage@Palehermit, ахаахах, ловко это я попался)