Pull to refresh

Как я случайно обнаружил бэкдор в роутерах ZTE для Ростелекома

Доброго всем дня, друзья.

Наверное, у каждого из вас бывали такие истории, когда вы теряли связь со всемирной паутиной по той причине, что ваш горячо любимый интернет-провайдер не справился с выполнением своих обязательств по предоставлению услуг связи. Если говорить максимально легко и просто — у вас просто внезапно исчезало интернет-соединение, а Ethernet-кабель, бережно (или не очень) проведённый в ваш дом, не показывал никаких признаков жизни.

Звонки провайдеру обычно редко заканчиваются положительным результатом. В моей жизни очень часто происходила такая ситуация, когда провайдер вовсе не видел проблемы, а потом, спустя пару часов, при повторном звонке всё же видел проблему и клятвенно обещал, что всё скоро починят-исправят, не забывая извиниться после каждого сказанного предложения.

image

И вот в один из апрельских вечеров (когда бОльшую часть страны закрыли на небезызвестную самоизоляцию) я спокойно работал над одним фриланс-проектом, как внезапно связь с внешним миром у меня полностью пропала, тем самым прервав разработку проекта на неопределённое время.

Резервных каналов связи не было, до дедлайна проекта было ещё далеко, поэтому я позволил себе немного отдохнуть от рабочих дел, заодно впервые за долгое время взглянуть на WiFi-роутер, который стоял в квартире. Хотя не совсем корректно сказать «взглянуть», так как устройство стояло в соседней комнате, в которой люди благополучно видели явно уже не первый сон, а искать его и шариться по углам желания явно не было, поэтому вращение роутера началось на высочайшем, абстрактном уровне.

Немного слов о персонаже. Точкой доступа был девайс производства ZTE, модели ZXHN H298A. Прошивка последней версии и, если судить по Ростелекомовским логотипам, фирменная, то есть в той или иной степени заточена под задачи провайдера «Ростелеком». Этот провайдер, как вы можете догадаться, и являлся поставщиком услуг связи в мой тогдашний дом.

image

Согласны? Узнали?

У меня возникло возможно дурное, но предположение, что что-либо не так с настройками роутера, поэтому я непременно захотел зайти в панель управления роутером (которая располагается по внутреннему IP-адресу 192.168.0.1), дабы посмотреть, какая история там происходит да и банально познакомиться с устройством поближе.

Введя стандартную пару логин/пароль (admin и admin; были указаны на коробке роутера), я с отсутствием удивления обнаружил, что они не подходят. Устройство устанавливалось и настраивалось в моё отсутствие, никаких данных по входу мне не сообщали, лишь дав изучить коробку устройства, на которой, как и на всех других коробках, была информация о стандартных логинах и паролях для устройства, а также названия и пароли для подключения к точкам доступа.

Периодически я проверял наличие интернет-соединения переходом на главную Яндекса, но всякий раз роутер показывал мне, что WAN-подключение отсутствует.

image

Гугление с телефона не дало каких-либо результатов, все вопросы с узнаванием пароля для доступа сводилось к ответу в стиле «сбросьте настройки и живите счастливо» вне зависимости от марки и модели устройства.

Однако по своей натуре я существо любопытное, поэтому решил побродить по различным (доступным мне и любым другим желающим пользователям) страницам веб-интерфейса, отдельное внимание уделяя HTML-коду. Не раз сталкивался с тем, что он может скрывать очень много чего интересного.

На странице входа я ничего примечательно не обнаружил, а вот на странице, которая показывалась всякий раз, когда я «пинговал» Яндекс, обнаружился крайне интересный блок кода.

image

Обычная такая форма с POST-запросом.

И наблюдательные индивидуумы сразу отметят наличие очень интересных данных в этой форме со спрятанными (hidden) полями ввода. Здесь и логин и пароля входа, и названия точек доступа, и пароли к ним, и некоторая информация о настройках устройства.

Поразившись приятной находке, я первым делом проверил логин и пароль для входа (они подошли) и повторно проверил работоспособность метода для получения столь важных данных, обновив пароль на свой. После обновления пароля на другой злосчастная страница по-прежнему отдавала данные с уже актуализированным паролём. Интересная ситуация.

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

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

Так как проблема весьма полезная и упростила бы жизнь солидной части пользователей (которые, если судить по их рассказам, тщетно пытались угадать пароль с технической поддержкой), я без всевозможных зазрений совести выложил детальную инструкцию по получения доступа а сайте одного известного форума, заодно сняв видео с наглядным описанием возможности узнать тот самый пароль и выложив его на не менее известный видеохостинг. Немного времени спустя, обнаружилось, что проблема воспроизводится ещё на некоторых роутерах и явно существует во всех версиях прошивок ZXHN H298A.

Разумеется, я искал возможность связаться то с ZTE, то с Ростелекомом и сообщить о проблеме, но ни в первом, ни во втором случае не обнаружил никаких доступных и прямых средств связи для этой цели. Буду весьма признателен Хабровчанам, если подскажут правильный порядок действий в этой ситуации (кроме банального обращения в поддержку Ростелекома). Можно сказать, что проблема крайне тяжелая, так как данный баг наблюдается на большом количестве устройств, а массовое обновление роутеров практически невыполнимая задача.

Искренне надеюсь, что обнаруженная проблема будет исправлена в кратчайшие сроки и не будет использована во вред тех или иных лиц.
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.