Сегодня речь пойдет об уникальном случае, когда ужасно глупая ошибка породила выгодный бизнес и осчастливила сотни школьников в Москве.
О чем речь?
Для начала, проясню что такое МЭШ и почему мы вообще о нем говорим. МЭШ - Московская Электронная Школа. Электронный журнал для всех учеников г. Москвы.
Он очень удобный и приятный в использовании, особенно по сравнению с его собратом из области (в "Школьном портале" М.О. требуется заплатить денег за возможность просматривать домашнее задание и оценки в мобильном приложении).
ЦДЗ 
Одной из главных фишек МЭШ можно назвать ЦДЗ(Цифровое Домашнее Задание). Это как привычная всем домашка, только в формате тестов на сайте или в приложении. Сами ученики раньше очень любили этот вид работы, так как он был максимально легким.
ЦДЗ решалось буквально за секунды.
Многие знали о существовании ботов X и Y в Telegram, и активно ими пользовались. Суть была проста, заходишь в бота, кидаешь ссылку на свое ЦДЗ, profit. Бот присылал ответы на все задания кроме тех, что учителя проверяли вручную, но таких было крайне мало, ведь учителя брали задания из готовых банков, а на них были ответы.
А как? 
Интересно, как же так получилось, что эти боты брали ответы из, казалось бы, защищённой системы МЭШа? Неужели все было в открытом доступе?
Я решил разобраться в том, как же работали эти боты и сколько они зарабатывали.
Ужасно глупая ошибка 
Немного погуглив, я нашел GitHub бота Y и тут же бросился его изучать.
Среди кучи кода самого ТГ бота я нашел ту самую библиотеку, делающую всю грязную работу.
Меня привлек странный метод auth

login = ""
и password_hash2 = ""
Как так?! Пустой логин и пароль?
Неужели прям так ужасно?!
Оказалось, что разработчики оставили тестового юзера с целью правильного отображения frontend части сайта, однако зачем-то дали ему права на backend части.
Получается костыль.
Его и нашли школьники и быстро собрали на его основе систему, позволяющую им вытаскивать ответы с серверов.

Получается следующая схема.
1) Получаем доступ к тестовому юзеру
2) С его токеном выясняем какой тип и вариант у данного нам задания
3) Обращаемся на сервер за ответами
4) Из-за кривых настроек сервер отдаёт нам ответы
5) Отдаём их довольным школьникам

Как вы видите, все довольно просто. И данная уязвимость не требует почти никакого умения для эксплуатации.
Бизнес 
Вернёмся к нашим ботам. Разработчики бота Y выложили свой код в открытый доступ и зарепортили уязвимость разработчикам. А вот с ботом X все сложнее.
Эти ребята решили сделать Premium Pro Plus Extra Deluxe подписку. Символическая цена за возможность быстрее решать задания и убрать лимит на кол-во заданий в день. Прекрасная сделка!
Дети собирали деньги всем классом, покупали подписку на бота и жили без забот о домашке.

Фикс 
На данный момент этот метод не работает.
Тест юзера убрали, endpointы поменяли, дыру залатали.
Но бот X до сих пор работает и собирает деньги. Как они это делают мне не ясно, но осмелюсь предположить, что используется все та же проблема со вседозволенностью на стороне сервера. Только в этот раз им удалось получить данные от аккаунтов одного из завучей либо учителей, ведь их доступ к банкам заданий никак не ограничивается.
Итоги 
Дырка в системе максимально глупая и странная, не ожидал такого от МЭШ. Но было интересно порыться в исходном коде этого проекта и провести свое мини расследование.
TL;DR Школьники использовали уязвимость с тестовым юзером чтобы заработать денег и не решать домашнее задание :)
Спасибо за внимание, ещё увидимся!
Автор: Илья