Hanwha зашила в прошивку камер токен с админ-доступом к GitHub
Пользователь Hacker News под ником hhh изучал безопасность камер видеонаблюдения после того, как компания AXIS начала активно продвигать запуск Linux-приложений прямо на своих камерах, по его мнению, это делает такие устройства более серьёзной целью для атак в корпоративной среде. Кто-то посоветовал ему присмотреться к малоизвестной компании Hanwha Vision (бывший Samsung Techwin, дочерняя структура Hanwha Group). На сайте Hanwha он нашёл в открытом доступе файлы прошивок для разных моделей камер и начал их разбирать.
Внутри образа прошивки утилита binwalk обнаружила зашифрованный архив fwimage.tgz. По более ранней публикации исследователя Мэтта Брауна автор узнал пароль первого слоя шифрования, это строка "HTW" плюс номер модели камеры (например, HTWXNP-9300RW). Но внутри распакованного архива оказался ещё один fwimage.tgz, зашифрованный уже по другой, незнакомой схеме. Вместо ручного реверс-инжиниринга в Ghidra автор направил на бинарник fwupgrader (утилиту обновления прошивки) ИИ-инструмент Claude Code и занялся другими делами, а вернувшись, получил готовое описание алгоритма и распакованную файловую систему. Оказалось, что Hanwha маскирует AES-ключ, поксорив его со статической таблицей внутри бинарника и собирая обратно уже во время выполнения (вектор инициализации при этом хранится открытым текстом); сама утилита просто вызывает консольный openssl с восстановленными параметрами. Ключ и вектор инициализации одинаковы для всей линейки моделей, и автор опубликовал их в своём материале.
Получив доступ к полной файловой системе, автор прогнал по ней trufflehog и обнаружил GitHub-токен, продублированный примерно в 30 файлах, токен давал права администратора к сотням репозиториев в GitHub-организации Hanwha. Причина утечки, веб-интерфейс камер собран на Vite, и одна из JS-переменных при сборке записывает в себя целиком process.env CI-джобы, включая сам токен и другие служебные переменные окружения (порты Kubernetes, настройки npm и т.д.). По оценке автора, это означает, что токен потенциально отдавался по сети любому, кто открывал страницу входа в админ-панель камеры.
Среди утёкших переменных окружения оказались и IP-адреса, зарегистрированные на Министерство обороны США (примеры из текста: SWARM_MASTER_NFS_ADDRESS, OTEL_ELASTIC_URL, CIMIP). Автор прямо помечает этот фрагмент как предположение: он не утверждает связь Hanwha Vision с Пентагоном как факт, а лишь размышляет, не могла ли общая CI-инфраструктура группы Hanwha (в которую входят также оборонные Hanwha Aerospace и Hanwha Defense USA) оставить в переменных окружения адреса, унаследованные от других направлений холдинга, и напоминает, что сама Hanwha Vision (бывший Samsung Techwin), по её статье в Википедии, ранее выпускала среди прочего самоходную артиллерию K9 Thunder, машины снабжения K10, компоненты танка K2 Black Panther и робота-часового SGR-A1.
Чтобы проверить, что находка не случайность, автор скачал с сайта Hanwha около 500 файлов прошивок (компания перечисляет прошивки для 600+ моделей камер, но не для всех они выложены), тем же методом расшифровал 62% из них и нашёл GitHub-токен всего в трёх файлах, везде один и тот же. Автор написал в службу безопасности Hanwha с описанием проблемы; компания ответила в течение 12 часов и подтвердила, что токен отозван.
Ключевые факты
- Исследователь скачал публично доступные прошивки камер Hanwha Vision и с помощью ИИ-инструмента Claude Code реверс-инжинировал обфусцированную схему шифрования второго слоя прошивки, восстановив AES-ключ и вектор инициализации, общие для всей линейки моделей
- Внутри распакованной файловой системы trufflehog нашёл GitHub-токен, продублированный примерно в 30 файлах, с админ-доступом к сотням репозиториев организации Hanwha на GitHub
- Причина утечки, сборка веб-интерфейса камер на Vite: одна из переменных при сборке записывает в JS-бандл весь process.env CI-джобы, включая сам токен; по оценке автора, эта переменная потенциально отдавалась по сети любому, кто открывал страницу входа в админ-панель
- Среди утёкших переменных нашлись IP-адреса, зарегистрированные на Минобороны США; автор явно помечает связь с оборонными структурами как предположение, а не установленный факт
- Проверка на ~500 файлах прошивок с сайта Hanwha показала тот же токен всего в трёх файлах; после уведомления Hanwha отозвала токен в течение 12 часов
Почему это важно
Захардкоженный GitHub-токен с админ-правами к сотням репозиториев, это риск для всей цепочки поставки софта вендора: через такой токен можно вмешаться в код, публикуемый для сотен моделей устройств. История показывает типовой сценарий утечки, сборщик (Vite) записывает в клиентский бандл переменные окружения CI целиком, а не только нужные, и секреты CI оказываются доступны конечным пользователям устройства.
Кому это важно
Инженерам безопасности и DevOps-командам, которые управляют парком IoT-устройств и камер видеонаблюдения в корпоративной среде; разработчикам, собирающим веб-интерфейсы на Vite/webpack и подставляющим в бандл переменные окружения; самим производителям устройств, у которых CI и прошивка не разделены достаточно строго.
Как это применить
Не передавать в клиентский JS-бандл process.env целиком, явно перечислять в конфигурации сборщика только нужные переменные окружения (а не весь набор CI-джобы); регулярно сканировать собранные артефакты и файловые системы инструментами вроде trufflehog на предмет утечки секретов; выдавать CI-токены с минимально необходимыми правами и коротким сроком жизни, а не с админ-доступом ко всей организации на GitHub.
Можно ли доверять
Материал написан независимым исследователем в личном блоге, но методология описана подробно и проверяемо: конкретные инструменты (binwalk, Ghidra, Claude Code, trufflehog, openssl), восстановленные ключ и вектор инициализации, и повторная проверка находки на ~500 файлах прошивок с того же сайта. Заявление о revoke токена подтверждено ответом самой Hanwha в течение 12 часов. Версия о связи с Минобороны США явно помечена автором как спекуляция, а не факт.
Риски и подводные камни
AES-ключ и вектор инициализации для второго слоя шифрования прошивки теперь публично известны и одинаковы для всей линейки моделей, это значит, что шифрование прошивки для этой линейки больше не защищает от разбора кем угодно. До отзыва токен потенциально мог утечь любому, кто открывал страницу входа в админ-панель камеры, неизвестно, воспользовался ли этим кто-то ещё до находки исследователя. Автор отдельно отмечает, что это не первый случай, когда организация публикует GitHub-токен в прошивке устройства, но подробностей о предыдущих случаях в тексте не приводит.
«Нам правда пора перестать так часто допускать подобные ошибки, как мне после этого вообще спать по ночам?»
— автор находки, пользователь Hacker News hhh