Чем обернулся «баг-баунти»-зонд для Twilio?

В npm обнаружили вредоносный пакет tw-pkgprobe-7731, опубликованный с учётной записи twdepprobe7731 в середине августа 2026 года. За один день автор выпустил 11 версий с интервалом примерно в 45 минут: 1.0.0, 1.0.1, 1.0.2, 1.0.3, 1.0.4, 1.0.5, 1.0.6, 1.0.7, 1.0.8, 1.1.0 и 1.1.1. К моменту исследования аккаунт издателя уже не существовал, а сами пакеты удалили из реестра. Столь плотная череда обновлений позволяла быстро менять поведение программы и, вероятно, проверять разные сценарии внутри среды разработчиков Twilio.
Чем обернулся «баг-баунти»-зонд для Twilio?
Изображение носит иллюстративный характер

Исследователь ReversingLabs Lucija Valentić установила, что первая версия выдавала себя за разрешённый инструмент для поиска уязвимостей. В комментариях к коду пакет назывался «авторизованным исследовательским зондом программы вознаграждения за ошибки Twilio HackerOne». Автор также утверждал, что программа «работает только внутри песочницы серверного упаковщика Twilio», а её назначение сводится к тому, чтобы «собрать локальный контекст процесса и хоста и записать его рядом с собой; никаких разрушительных действий». Ссылка на Twilio HackerOne должна была придать происходящему вид законной проверки, хотя разрешения Twilio у автора не было.
После запуска tw-pkgprobe-7731 проверял, находится ли он в среде разработки Twilio. При отрицательном результате процесс немедленно завершался. В подходящем окружении пакет собирал переменные среды, сведения о системных точках монтирования и временных каталогах, настройки приложений и данные о хосте. Затем информация отправлялась наружу через вебхук. Такой фильтр сокращал число случайных срабатываний: вредоносная логика активировалась там, где имелись интересующие автора компоненты Twilio.
Версия 1.0.0 ограничивалась этим базовым профилем разведки. В выпусках 1.0.1, 1.0.2 и 1.0.3 появилась более узкая охота на разработчиков, работающих с API Twilio. Код искал каталоги, связанные с определёнными строковыми идентификаторами Twilio, то есть SID, и ничего не предпринимал при обнаружении папки с одним специально заданным SID. Если находились другие целевые каталоги, программа просматривала установленные npm-пакеты и node_modules, после чего внедряла собственный демонстрационный npm-пакет, создавая внутри выбранного расположения файлы package.json и index.js. ReversingLabs описала механику так: «В противном случае, если находились совпадающие целевые папки, пакет сканировал установленные npm-пакеты и node_modules, чтобы внедрить собственный демонстрационный npm-пакет, создавая внутри package.json и index.js».
В 1.0.4 появилась прямая кража учётных данных. Пакет извлекал значения process.env.ACCOUNT_SID и process.env.AUTH_TOKEN. Эта пара используется для идентификации учётной записи Twilio и аутентификации запросов. Получив её, злоумышленник потенциально мог обращаться к сервисам жертвы, запускать коммуникации через Twilio и совершать действия, приводящие к расходам по аккаунту. О поведении версий 1.0.5, 1.0.6 и 1.0.7 ReversingLabs конкретных сведений не привела, поэтому приписывать им функции соседних выпусков оснований нет.
Последние три версии, 1.0.8, 1.1.0 и 1.1.1, вернулись к базовой разведке из 1.0.0: явно вредоносные функции предыдущих обновлений из них убрали. При этом 1.1.0 и 1.1.1 занимались сбором данных из открытых источников и проверяли связанные с Twilio узлы support-api.us1.twilio[.]com, kafka-ui.au1.twilio[.]com и litellm.ai-services.corp.twilio[.]com. Те же выпуски обращались к 169.254.169[.]254/latest/meta-data/. Адрес 169.254.169[.]254 используется службами метаданных облачных машин, в частности AWS, и при недостаточной защите может раскрывать сведения об экземпляре либо временные полномочия.
Причина резких разворотов между версиями осталась неясной. Исследователи не смогли достоверно установить конечную цель автора, выяснить, начиналась ли работа как настоящая заявка для bug bounty, и объяснить, почему кража данных сначала появилась, а затем исчезла. Lucija Valentić сочла нарушение правил однозначным: «Иными словами, эти пакеты явно нарушают базовые рекомендации по исследованию безопасности, установленные Twilio, а это указывает на злонамеренность намерений». Безобидные проверки и поясняющие комментарии, судя по коду, служили прикрытием для опасных операций.
Исполнитель кампании не слишком старался скрыться. В коде не было обфускации, название не использовало тайпсквоттинг, а аккаунт twdepprobe7731 даже не пытался выглядеть официальным или давно действующим. Valentić пояснила: «Хотя стоявший за кампанией злоумышленник пытался замаскировать вредоносные функции некоторых выпусков, окружая их на вид безобидными возможностями и кодом, реальных усилий по сокрытию вредоносного кода или своей активности он не предпринял». Она добавила: «Нет ни обфускации, ни тайпсквоттинга, ни попытки придать публикующей учётной записи npm законный вид — эти приёмы мы регулярно встречали в предыдущих кампаниях». ReversingLabs поэтому оценила автора как сравнительно неопытного злоумышленника, нацелившегося на разработчиков Twilio.
Twilio сообщила, что проникновения в её инфраструктуру не произошло: «Twilio не сталкивалась с инцидентом информационной безопасности; наши системы и данные клиентов остаются защищёнными и не были скомпрометированы». Компания подтвердила удаление npm-пакетов и предупредила о росте числа поддельных пакетов, дополнений и интеграций: «Злоумышленники всё чаще публикуют пакеты, дополнения и интеграции, которые выдают себя за продукты доверенных поставщиков, включая Twilio, чтобы похищать учётные данные и конфиденциальную информацию из сред разработки». Ответ Twilio добавили при обновлении сведений 23 сентября 2026 года.
Названия «официальный», «авторизованный», «инструмент безопасности» или «исследовательский инструмент» сами по себе ничего не подтверждают. Позиция компании сформулирована прямо: «Twilio никогда не попросит вас установить пакет, скрипт или инструмент вне нашей официальной документации для проверки или защиты вашей учётной записи». Перед подключением сторонней интеграции её следует сверять с документацией Twilio, а неизвестные зависимости из публичных реестров рассматривать как потенциально опасные, даже если их описание ссылается на HackerOne или bug bounty.
Практическая защита начинается с проверки install- и lifecycle-скриптов до их выполнения. В CI/CD стоит включить сканирование зависимостей и использовать lock-файлы, чтобы незапланированная смена версии не прошла незамеченной. Добавление, удаление или обновление пакета требует просмотра изменений, особенно если новый код получает переменные среды или доступ к сети. API-ключам следует выдавать минимально необходимые полномочия: тогда утечка окружения не откроет весь аккаунт. Отдельного поиска требуют индикаторы tw-pkgprobe-7731, twdepprobe7731, обращения к перечисленным Twilio-хостам и AWS metadata endpoint, а также неизвестная отправка значений ACCOUNT_SID и AUTH_TOKEN через вебхуки.


Новое на сайте

Ссылка