{"id":14268,"url":"\/distributions\/14268\/click?bit=1&hash=1e3309842e8b07895e75261917827295839cd5d4d57d48f0ca524f3f535a7946","title":"\u0420\u0430\u0437\u0440\u0435\u0448\u0430\u0442\u044c \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u0430\u043c \u0438\u0433\u0440\u0430\u0442\u044c \u043d\u0430 \u0440\u0430\u0431\u043e\u0447\u0435\u043c \u043c\u0435\u0441\u0442\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e?","buttonText":"\u0423\u0437\u043d\u0430\u0442\u044c","imageUuid":"f71e1caf-7964-5525-98be-104bb436cb54"}

Пользователь «Хабра» нашёл в публичном доступе исходный код нескольких сервисов налоговой — он открыт около года Статьи редакции

Разработчик нашёл данные после проверки приложения «Проверка чеков» — с марта в нём можно отследить все свои покупки, сделанные в интернет-сервисах.

Исходный код некоторых сервисов Федеральной налоговой службы (ФНС) уже около года находится в открытом доступе, а данные пользователей о покупках — под возможной угрозой утечки. К таким выводам пришёл пользователь «Хабра» Антон Пискунов.

Разработчик обратил внимание на приложение «Проверка чеков». Оно позволяет получать и хранить кассовые чеки в электронном виде, проверять добросовестность продавца, отправлять на него жалобы и так далее, сообщали в ФНС.

С помощью приложения пользователь может отсканировать QR-код на электронном чеке, который присылает оператор фискальных данных (ОФД) после завершения заказа в каком-либо сервисе или магазине. Например, после заказа в «Яндекс.Еде» Пискунову пришёл чек от «Яндекс ОФД».

Антон Пискунов

После сканирования в приложении появляется электронная копия чека с полными данными о заказе. 4 марта 2021 года разработчики обновили «Проверку чеков», добавив функцию «отображение чеков из сервиса «“Мои Чеки Онлайн”».

Если пройти аутентификацию в приложении «Проверка чека», указав номер телефона, привязанный к сервисам вроде «Яндекс.Еды», «Такси», «Самоката» и другим, в разделе «Мои чеки» автоматически будут отображены все чеки по всем операциям в этих сервисах.

«Мои чеки» в приложении «Проверка чеков»

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

«Выяснилось, что эндпоинт с данными находится по адресу irkkt-mobile.nalog.ru:8888, на котором живёт простейшее приложение на NodeJS с применением фреймворка Express. Механизм аутентификации пользователя пускает тебя к данным, если ты верно указал заголовок “sessionId”, значение которого представляет из себя какой-то самопальный токен, генерирующийся на стороне сервера», — добавляет Пискунов.

Если нажать кнопку «Выйти» в приложении «Проверка чеков», инвалидации токена не происходит, продолжает он. Также пользователь не может посмотреть все свои сессии или завершить их на всех устройствах. «Таким образом, даже если вы каким-то образом поняли что токен доступа был скомпрометирован, то нет никакой возможности его сбросить и тем самым гарантировать с этого момента отсутствие у предполагаемого злоумышленника доступа к вашим данным», — пишет разработчик.

Он также обратил внимание, что в случае крэша приложения оно отправляет диагностические данные в Sentry, располагающийся по адресу, не связанному, ни с ФНС, ни с ФГУП ГНИИВЦ ФНС России (разработчик «Проверка чеков» — vc.ru), а на домен sentry.studiotg.ru.

После этого он нашёл ссылки на публичные репозитории StudioTG на GitLab, которые находятся в индексе Google, по словам разработчика, более года. В репозиториях он нашёл папки, содержащие подстройки «lkio», «lkip», «lkul». Они относятся к одноимённым сервисам ФНС на домене nalog.ru — lkio.nalog.ru, lkip.nalog.ru и lkul.nalog.ru.

«Для сверки, что обнаруженные исходники действительно относятся к сервисам ФНС, проведена простая проверка наличия на боевом веб-сервере файла uppod-styles.txt, который не мог там оказаться по случайному совпадению», — пишет Пискунов.

Он сделал вывод, что фактический разработчик приложения «Проверка чеков» — StudioTG. На сайте «Студия ТГ», которая занимается ИТ-консалтингом и разработкой ПО, среди проектов указан «Личный кабинет налогоплательщика» от ФНС.

Также Пискунов считает, что по вине компании, исходный код сервисов налоговой около года находится в публичном доступе. Редакция vc.ru направила запрос и ожидает комментарии от ФНС и «Студии ТГ».

0
159 комментариев
Написать комментарий...
VVV
 Пискунов решил проверить, как хорошо защищены все эти данные. Для этого он поставил в разрыв между интернетом и приложением простой прокси и, записывая сетевую активность приложения, «потыкал в кнопки».

На этом можно было закончить, по сути. Трафик должен шифроваться прибитыми к приложению сертификатами, чтобы MTM не получилось использовать.

Ответить
Развернуть ветку
Илья Зернин

Добавляешь в доверенные корневые центры сертификации свой центр сертификации и получаешь возможность переподписывать данные, весь зашифрованный трафик будет виден.

Ответить
Развернуть ветку
VVV

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

Ответить
Развернуть ветку
Илья Зернин

А как по-вашему работает fiddler, например? Или http analyzer? Все они прекрасно расшифровывают данные, защищенные TLS шифрованием. Шифрование не защищает от атаки man in the middle. Для этого и придумали механизм цифровых подписей.

Ответить
Развернуть ветку
VVV

Они устанавливают свой доверенный сертификат.

С нормальными приложениями это не сработает, т.к. приложение должно шифровать трафик собственными ключами, которые есть только у него и у конечного сервера. У вас не получится вклиниться в эту цепочку, т.к. приложение не будет доверять вашему промежуточному fiddler`у или чему-то еще.

UPD: ну вот, например: https://ru.stackoverflow.com/questions/617785/Почему-fiddler-перекрывает-доступ-к-сайтам-по-https

Если вы заставите приложение верить только одному сертификату, все эти фидлеры идут лесом. В этом как раз суть SSL

Ответить
Развернуть ветку
Илья Зернин

Долго объяснять, как это всё работает, но вот. Девственно чистый браузер firefox, весь https траффик виден

Ответить
Развернуть ветку
VVV

Эм, ну да. Потому что браузер доверяет всем доверенным сертификатам. Почитайте выше о чем я писал.
Если проще: Фидлер это МТМ по сути. HTTPS создан чтобы защититься от этой атаки. Конец. 

Ответить
Развернуть ветку
Илья Зернин

Да читал я вашу писанину. Вы не понимаете, как работает протокол TLS. Вы путаете шифрование данных и аутентификацию сторон. Это разные вещи.

Ответить
Развернуть ветку
VVV

Ну да, не совсем правильно выразился. Но по сути шифрование http трафика без сертификатов не существует. HTTPS, центры сертификации и все это - вы меня прекрасно поняли.

Заставьте приложение доверять только одному CA и не будут трафик слушать. Не смогут.

Ответить
Развернуть ветку
Илья Зернин

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

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

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

Можно и собственную библиотеку написать, и собственный протокол шифрования сделать, но зачем это нужно, если у приложения были другие, более серьезные проблемы с безопасностью, которые описаны в статье?

Ответить
Развернуть ветку
VVV

У меня в первом сообщении написано "Трафик должен шифроваться прибитыми к приложению сертификатами".

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

Я не писал про другие проблемы, я писал про эту одну.

Ответить
Развернуть ветку
Илья Зернин

Я вам и объяснил, что это лишнее

Ответить
Развернуть ветку
156 комментариев
Раскрывать всегда