Тяжёлая ситуация с mipt.site
Преамбула
Сервис бронирования аудиторий mipt.site не соответствует минимальным требованиям безопасности, имеет сомнительную репутацию и ставит под угрозу данные пользователей. Не создавайте новые аккаунты в Сервисе, не используйте его и отправьте заявление администрации Сервиса с просьбой удалить ваш аккаунт, особенно, если он был создан до 10 ноября.
Коротко про mipt.site
mipt.site (далее просто Сервис) — это адрес сервиса по бронированию аудиторий в учебных корпусах. На данный момент сервис предоставляет возможность проверить занятость аудиторий по базе данных официальных мероприятий, а также возможность добавить своё мероприятие, таким образом "забронировав" аудиторию на выбранное время. Соблюдение бронирования лежит целиком на совести пользователей, и максимальная возможная санкция — закрытие доступа к сервису по решению его администратора. Администратором и создателем сервиса является Александр Кристаль — студент первого курса магистратуры. За публичную политику сервиса отвечает не он в одиночку, потому все ответы от "сервиса" могли быть от людей, не до конца знающих все детали происходящего, но у нас есть все основания полагать, что Александру принадлежат все заявления о технических особенностях Сервиса, вне зависимости от того, кем они были написаны.
Почему предыдущие попытки не удались
Данный Сервис — это далеко не первая попытка студентов создать независимую систему бронирования аудиторий. Последний такой пример — кейс Comfort Study выезда актива МФТИ 2023 года. Тогда в качестве интерфейса команда кейса разработала Telegram-бота, и за время выезда добилась работающего MVP. Данная попытка, как и, предположительно, все предыдущие, провалилась из-за сложностей с созданием системы, разрешающей конфликты при попытках одновременного бронирования аудитории несколькими лицами, а также из-за опасений о возможных злоупотреблениях со стороны пользователей. Текущий Сервис должен был разрешить эти проблемы, введя замысловатые Баллы Бронирования (ББ), но через сутки об объявлении о принципах их работы, ББ были отключены от функционала бронирования по просьбе студентов, тем самым возвращая старые проблемы и делая Сервис ничем не лучше своих предшественников.
Что происходило до релиза
Информация о стремлении Александра создать собственный сервис бронирования по его же инициативе была известна МКИ с начала сентября. На тот момент мы ознакомились с интерфейсом сервиса, не сильно отличающегося от текущего, а также узнали, что Александр активно продвигает свой проект среди представителей администрации МФТИ. В МКИ Кристаль обратился с предложением проработать задачу установки недостающих стульев в аудиториях 4 и 5 этажей ГК, что тогда было поставлено управлением кампуса как блокирующая задача. МКИ не был против помочь с установкой стульев, однако задача расклеивания наклеек с информацией о принадлежности стульев определённым кабинетам была выполнена сомнительно — наклейки были добавлены иррационально и неудобно. Уже тогда были попытки добавить упоминания Сервиса в печатных материалах, но МКИ заблокировал эти инициативы.
Параллельно с решением задачи обновления состава стульев, Александр получал отзывы различных представителей администрации с инициативой введения своего Сервиса. Одним из таких указанных представителей является Денис Дмитриев — проректор по молодёжной политике. Почти сразу после релиза Сервиса, Денис Юрьевич сообщил МКИ, что выражал своё мнение о возможности создания сервиса только как отказ блокировать эту инициативу и просил Александра не указывать его как согласовавшее лицо. Также Кристаль направлял запросы в УИТ МФТИ с просьбой выделить поддомен от mipt.ru для адресации своего сервиса, но как частная студенческая инициатива. Сервис не мог получить такого права и потому сейчас раздаётся с домена mipt.site. О процессе согласования проекта с другими представителями администрации на момент написания статьи МКИ неизвестно.
Странные открытые данные
Кроме текущего интерфейса (вне зависимости от нашего к нему отношения), Сервис также предоставляет публичный API для частичного доступа к данным сервиса через запросы на ветку /base-info/. Для доступа к API не требуется никаких ключей или доступов, а потому API доступен любому пользователю интернета, вне зависимости от принадлежности к МФТИ или от наличия аккаунта. Особый интерес представляют запросы /base-info/users_wallet/, /base-info/history/ и /base-info/event_item/.
users_wallet содержит в себе пары логин-баланс кошелька. Целесообразность хранения балансов ББ в открытом доступе сомнительна. До 11 ноября логины пользователей представляли собой начальную часть адреса электронной почты: фамилия и инициалы. Таким образом, ранее можно было для любого человека узнать его баланс. Изменение в политике хранения логинов было освещено администрацией сервера как «по запросу пользователей мы заменили логин на набор из 10-ти случайных букв».
Таблица history содержит полную историю бронирования всех аудиторий с указанием времени и даты бронирования, номера аудитории, а также логина забронировавшего лица. До 11 ноября логины также были напрямую взяты из адреса электронной почты пользователей. Сейчас они представляют собой мало значащую последовательность букв, но при наличии сохранённой базы бронирования до изменения в ней данных, сопоставляя времена бронирования, можно однозначно восстановить соответствие новых и старых логинов пользователей, успевших воспользоваться Сервисом, тем самым обесценив дальнейшую их шифровку. Почему сами брони также находятся в публичном API нам непонятно.
event_item — это таблица с расписанием занятий, полученная Сервисом у Учебного управления. Кроме полной информации о названии, ответственном, месте и времени проведения занятий, многие поля также имеют в открытом виде номера телефонов преподавателей, что является их персональными данными. По нашей информации, на разглашение номеров они не давали согласия. Наше предположение, что при переносе таблиц занятости ни Администратор Сервиса, ни УУ не проверили информацию на наличие персональных данных, что и привело к их прямой публикации.
На момент публикации официальный ответ представителей Сервиса на вопрос про содержание публичных API и информированность пользователей об этом получен следующий ответ: (sic!)
НАЗВАНИЯ кошелько находятся в открытом доступе для соблюдения прозрачности (также как в крипте). Об этом информированы студенты через документацию на гитхаб. Гитхаб проекта не скрывается. Персональная информация не разглашается. Алгоритмы работы системы точно также прозрачны и с первого дня существования проверяемы через запросы к публичному API. Если у пользователя есть желание сделать собственный интерфейс на нашем API - он может это сделать.
Утечка базы данных
Исходные файлы проекта находятся на публичном репозитории Александра на GitHub. Доступ к данным репозитория, а также к его истории, имел любой пользователь GitHub. Студентами было обнаружено, что в открытом исходном коде проекта без шифрования находятся приватный Django ключ проекта, логин и пароль от Postgre базы данных, секретная часть SSL сертификата сайта. Об этом студенты сразу сообщили администрации Сервиса, но все опасения студентов об опасности такой публикации данных были названы беспочвенными и напрямую завязанными на принципах разработки Сервиса.
В это же время по оставленным в репозитории данным был получен полный доступ к закрытой базе данных Сервиса. БД была скопирована и затем передана МКИ для исследования. Среди полученных нами данных есть открытые таблицы, доступные через API, совпадающие по содержанию на время утечки, а также: полные почтовые адреса пользователей, токены аутентификации пользователей, хэш административного аккаунта Сервиса. Кроме самого факта утечки почтовых адресов (являющихся персональными данными по CODE OF CONDUCT Сервиса), полученные токены позволяют любому пользователю совершать любые действия на сервисе от имени любого пользователя из базы, в том числе ознакомиться с информацией профиля, изменять эту информацию и бронировать аудитории. У МКИ получилось с нового аккаунта совершать упомянутые действия как от имени одного из наших активистов. На момент публикации доступ через токены всё ещё открыт.
Хэш административного аккаунта представляет мало интереса, но может быть использован для определения пароля от этого аккаунта для получения полного доступа к сервису при наличии достаточной вычислительной мощности. Таким образом, все аккаунты оказались скомпрометированы и доступ к этой информации длительное время был открыт для любого внешнего пользователя. Сервис не позволяет вам удалить свой аккаунт, что нарушает базовые требования безопасности ПД, потому мы советуем вам не взаимодействовать с сайтом и запросить удаление аккаунта у администрации напрямую.
Ответ Сервиса на сообщения о возможной утечке данных: (sic!)
нам тоже поступали подозрения об утечке, но реальных подтверждений этих подозрений не поступало. Есть две версии событий: пользователь запустил локально базу данных и нас шантажирует. Пользователь умудрился подобрать параль и точно также нас шантажирует. На личные контакты пользователь не идёт. Это заявление уже передано управлению безопасности МФТИ.
Угрозы от владельца
Александр Кристаль как неявно — с помощью снимков экрана с информацией о возможных преступлениях, так и явно — в личных разговорах — угрожает привлечь правоохранительные органы к разрешению его конфликтов со студентами. Нам известно о двух таких случаях.
Ранее Александр развесил по всему кампусу плакаты с рекламой своего проекта без согласования с пресс-службой МФТИ. Наша активистка в пределах своих полномочий сняла несогласованные плакаты с досок, чем вызвала недовольство Александра. После угроз привлечения к ответственности за кражу, высказанных в беседе с участием данной активистки, Кристаля и председателя МКИ Марии Егоровой, студентка уже ходила писать объяснение в участок полиции, не приведшее к дальнейшему продвижению запроса.
Студенты, первые обнаружившие утечку данных, после требования объявить пользователям о возможных проблемах с безопасностью и предложения способов разрешить конфликт получили снимки экрана с наказанием за шантаж. О наличии заявления о шантаже нам неизвестно на момент написания статьи, так как ситуация произошла недавно.
Позиция Сервиса по вопросу угроз уголовным преследованием:
[ Запрос МКИ ] Вы направляли угрозы уголовным преследованием студентам МФТИ?
нет, вообще не понятно откуда эта информация.
Мы осуждаем трату времени студентов и правоохранительных органов на разрешение персональных конфликтов и призываем не вести никаких переговоров с администрацией сервиса.
Ответы администрации МФТИ
Мы получили ответы директора по молодёжной политике Д.Ю. Дмитриева, заместителя директора по безопасности Подгорнова И.А. и начальника кампуса В.В. Орлова. Нам сообщили, что они рассматривали реализацию данного сервиса рассматривалась как студенческую инициативу, которой они не хотят противодействовать. Администрация МФТИ не имеет отношения к проекту и оставляет решение о его дальнейшей судьбе за студентами.
Позиция МКИ
Мы хотим поблагодарить студентов, предоставивших нам полученные ими базы данных Сервиса — это помогло нам разобраться в вопросе и найти потенциальные уязвимости. Дополнительно благодарим Сенат ФОПФ и Профком обучающихся МФТИ за содействие в исследовании проблемы.
Мы призываем всех студентов и сотрудников в ближайшее время перестать пользоваться сервисом, требуем администрацию сервиса убрать данные пользователей из открытого доступа, а администрацию института просим содействия в отказе в распространении сервиса как на территории МФТИ, так и в информационных ресурсах института. МКИ готов содействовать развитию студенческих проектов, если они делаются с учётом мер безопасности и с соблюдением стандартов качества.
