Привет, Хабр. В этой статье речь пойдет о найденных уязвимостях в электронном журнале, которые

затрагивают персональные данные пользователей. :-)

В работе пойдет речь об электронном журнале Нижегородской области, но на самом деле это всего лишь инстанс глобальной системы ЭлЖур

С чего все началось

Поскольку от даунтайма электронного журнала не зависит чья-то прибыль, этот сервис очень часто был недоступен. Это стало большой проблемой для учеников и учителей, поэтому я начал работать над приложением-оберткой, которое кешировало бы данные. Для этого я начал изучать, как работает система изнутри

Внешние точки входа

После небольшого изучения запросов от сайта и приложения, стало понятно, что работа построена интересно:

  • Приложение всегда ходит по API apiv3

  • Сайт ходит по другим ручкам, у которых даже нет базового пути

Перехват запросов приложения

Для перехвата запросов пришлось постараться: в новых андроидах вводят новые системы безопасности. Я использовал старый планшет на Android 5.

Для анализа HTTPS была использована программа ProxyMan, а на этот самый планшет установлен Корневой сертификат.

По сути была проведена Man In the Middle атака, где человеком посередине был мой компьютер. Корневой сертификат нужен, чтобы перехваченное соединение считалось безопасным.

Перехваченные запросы

Уязвимость 1. Просмотр списков всей школы

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

Фото из интерфейса сайта

Написать можно только тем, кто находится в той же параллели или общей школьной администрации. При этом точный список получается по ключу. Давайте рассмотрим его повнимательнее

Запрос всех групп

Ключ для группы: 2024/2025_1_10Б

Первой мыслью стало попробовать заменить на другой класс. Что удивительно, это сработало.)

Где-то за час был написан скрипт, который перебирал классы и выкачал списки школы. Из данных мы получаем только ФИО и id, ФИО и id зарегистрированных родителей

Пока эти данные кажутся безобидными, но позже я покажу, что можно с ними сделать

Уязвимость 2. Слив ПД всей школы

Данная уязвимость проявилась только в приложении.

После сбора запросов через ProxyMan были найдены интересные эндпоинты.

Вот один из, получение своего профиля

Получение своего профиля

Этот эндпоинт очень интересен, так как затрагивает множество чувствительных данных. Это и почта, и СНИЛС. Приятным бонусом являются средние баллы, класс и ФИО.

Так выглядит сам запрос.

Запрос на получения профиля

Зачем-то в профиле есть свой id.

Как только мы видим ID в запросе, то в голову приходит уязвимость IDOR (Insecure Direct Object Reference). То есть мы попытаемся поменять studentна id другого пользователя.

И ЭТО СРАБОТАЛО.

Профиль ЧУЖОГО пользователя

Я, мягко говоря, очень удивился. Такая простая уязвимость в государственном приложении

Ситуацию усугубляло то, что id был простым числом. Это значит, что теоретически я могу просто перебрать все идентификаторы пользователей и получить их данные.

Я решил пойти по другому пути, а именно направление отчета. Не знал, что это откажется таким квестом

Отчет… больно

Сразу уточню, что вся переписка проходила по электронной почте. Скрины будут из системы Planfix, куда и попадали все наши переписки

Попытка 1

26 июля 2024

Уточнил, куда могу отправить уязвимость. Получив ответ, написал отчет

Все. На этом наша переписка окончилась, больше ответов не было :-)
УЯЗВИМОСТЬ НЕ ИСПРАВЛЯЛИ :-)

Попытка 2

29 августа 2024

Я решил напомнить о себе, поэтому ответил на заявочку, что все еще жду

В этот раз ответили и исправили оперативно

Жалко, что даже не сказали спасибо T_T

Попробуем что-то получить?

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

Обращение было просто закрыто :-(

Даже не сказали здравствуйте.

После такого общения очень хочется писать туда еще раз (нет).

Уязвимость 1 + ВК

Вернемся к спискам школы

Почему-то многие записаны под правильными Фамилиями и Именами именно в ВК. Я решил не упускать эту возможность и сопоставить ВК и ФИО из моего списка.

Забегу наперед и скажу, что работает это примерно с 6-го класса и находит около 60-70% пользователей.

Алгоритм

ВК позволяет получать всех друзей одним API запросом. Соответственно, просто через поиск находим первого человека из класса. Смотрим его друзей. Если находим больше 3-х одноклассников, то пара найдена. ВК — ФИО

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

Тогда пойдем по обратному алгоритму. Будем искать человека по ФИО среди уже друзей уже найденных одноклассников. Тогда, если X найден в друзьях у более 3-х человек, пара снова найдена

Я мог бы показать код и его работу, но немного боюсь вызвать на себя внимание ВК)

Выводы

На самом деле интересно, что я, обычный школьник, смог найти такие серьезные уязвимости. Техническая поддержка первый раз вообще проигнорировала обращение…. Сколько еще уязвимостей существует? Слив оценок? Редактирование? Этого мы никогда не узнаем.

Своей работой я смог закрыть слив ПД, чем очень доволен. Очень надеюсь, что не будет второй части этой статьи :-)

Фикс уязвимостей

Я пытался сообщить об уязвимости №1 по 3-м почтам, но нигде мне так и не ответили. Позже выяснилось, что сами разработчики закрыли ее. Они добавили в название группы хеш

Было : 2023/2024_1_10Б

Стало: 2023/2024_1_10Б#####b6ecbadaeac370e48c3788cfdcf57478

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