Приложение ФНС «Проверка Чеков» уязвимо для атак MiTM

Приложение ФНС «Проверка Чеков» уязвимо для атак MiTM

Alexander V. Litreev (Telegram: telegram.me/alexlitreev, Twitter: twitter.com/alexlitreev)


Привет, это Литреев.

Делать мне было нечего в субботу, и попалось мне вот под руку приложение Федеральной Налоговой Службы для проверки чеков. Вот оно для Android и для iPhone.

Когда-то, я и мой товарищ Миша занимались разработкой приложения для учёта личных финансов. Это бы было такое приложение, в котором можно свои траты отслеживать и проанализировать. На тот момент (пару лет назад), мы столкнулись с некоторыми трудностями и проект отправился в ящик нереализованных затей.

И вот теперь, когда ФНС обязала всех предпринимателей использовать онлайн-кассы, чеки можно проверить онлайн — на многих из них (на всех) есть QR-код. Вот этим приложением «Проверка Чеков» мы сканируем QR-код и получаем точную копию чека прямо на экране телефона. Фантастика! Более того, приложение требует создания учётной записи с помощью своего номера телефона.

Я подумал — "О! Клево! Теперь можно вернуться к нашему приложению и добавить сканер чеков, чтобы быстрее добавлять информацию о своих расходах!". Начал искать документацию, как же мне так сделать, чтобы я мог проверять чеки самостоятельно, без приложения. Увы, документации никакой, я не нашел. Подумал, посмотрю детальнее на приложения.

Приложение для Android очень легко поддалось декомпиляции (декомпиляция — это процесс преобразования собранного приложения обратно в исходный код). Видимо разработчики не слышали о таких вещах как "обфускация кода" и "ProGuard".


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


Я начал поиск по файлам, по ключевой фразе "nalog.ru". Я тут же наткнулся на файл, где упоминается адрес "http://proverkacheka.nalog.ru:8888". 


Обратите внимание на последнюю строку


Обращаю ваше внимание — приложение использует незащищенный, незашифрованный протокол HTTP. Таким образом, все данные, передаваемые этим приложением, могут быть получены злоумышленниками, осуществляющими атаку типа MiTM (Man-in-The-Middle, от англ. «человек посередине»). Запомнили? Окей, едем дальше.


Меня интересовал конкретно тот участок кода, где с сервера запрашивается сам чек. Я нашел такой адрес: /v1/inns/*/kkts/*/fss/{fsId}/tickets/{documentId}

Вот он, в GET запросе


Открываем Postman (замечательное приложение для работы с запросами руками) и пробуем сделать запрос по адресу, который составим из первоначального baseURL и вот этого вот куска запроса в интерфейсе: http://proverkacheka.nalog.ru:8888/v1/inns/*/kkts/*/fss/{fsId}/tickets/{documentId}. Чем же нам ответит сервер?


А вот чем


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


Вот такая строка получается


Вставляю её в заголовок Authorization и делаю запрос. Получаю уже новую ошибку — 400. И информацию, что еще некоторые поля не передал серверу.

Бэд Реквест


Код ошибки изменился. Был 401 (Не авторизован), стал 400 (Некорректный запрос). Следовательно, сервер меня успешно авторизовал.


Какой первый вывод мы делаем из всего этого? А очень простой — раз все данные о ваших чеках (а значит о покупках, в подробных деталях) передаются в открытом виде вместе с вашим номером телефона. Это значит, что операторы связи или злоумышленники, атакующие вас с помощью атаки типа MiTM, могут составлять картину о совершенных вами покупках и использовать эту информацию против вас.


Но это еще не всё! Оказалось, что в приложении есть функция загрузки всей истории одним файлом. Ну то есть вы можете скачать одной PDF-кой вообще всю историю своих чеков одним нажатием. Такой же участочек я нашел и в коде:

/v1/extract — запрос к API


Ну что ж. Делаем такой запрос.

200 ОК — Успешно


Нам любезно возвращается ссылка на скачивание PDF-файла. Скачиваем файл. Там история всех покупок в подробностях. Ну вот, например, одна из моих:

Мой чек за кофе с сиропом


И тут в голову приходит еще пара выводов:

  1. Однажды перехватив логин и пароль, передающийся в открытом виде, можно получить компромат на человека, активно использующего это приложение (в виде этой истории с чеками, ведь там могут быть и чеки за медицинские услуги, а это врачебная тайна, на минуточку).
  2. Я не нашел возможности установить другой пароль в приложении. Использовать, похоже, можно только один, состоящий только из цифр, присланный в SMS. Простым перебором, такой пароль подбирается чуть меньше чем за пять минут.


Такие дела вот. Поэтому, пользоваться таким приложением я вам не рекомендую.


С вами ковырялся в налоговом дерьме,

Александр @alexlitreev Литреев


P. P. S. Подписывайтесь на канал в Телеграме, так на 95% безопаснее и законом не запрещено (пока что): https://t.me/alexlitreev_channel

Ну и на мой личный, если уж на то пошло: https://t.me/alexthoughts

Report Page