Разработчики устанавливали «is», а по факту — приглашали хакера пожить у себя.
Компрометация широко используемой библиотеки JavaScript поставила под угрозу миллионы проектов по всему миру. Речь идёт о пакете «is», который на протяжении многих лет оставался незаметным, но критически важным элементом экосистемы Node.js. Именно эта легковесная утилита, предназначенная для проверки типов и валидации значений, стала очередной жертвой атаки на цепочку поставок, причём в этот раз последствия оказались особенно разрушительными.
Инцидент начался с фишинговой кампании, в ходе которой злоумышленники похитили учётные данные разработчиков, имеющих доступ к публикации пакетов на NPM. После получения доступа они незаметно сменили владельцев проекта и опубликовали вредоносные версии библиотеки — от 3.3.1 до 5.0.0. По словам Джона Харбанда, основного мейнтейнера, заражённые сборки находились в общем доступе около шести часов, и за это время могли быть скачаны тысячами разработчиков.
Особую тревогу вызывает масштаб распространения: «is» используется в большом количестве проектов — от систем сборки и CLI-инструментов до библиотек для тестирования. По данным NPM, еженедельно пакет загружают более 2,8 миллионов раз. Автоматические обновления и отсутствие блокировок версий (lockfiles) значительно увеличили шансы заражения конечных проектов, особенно в больших экосистемах.
Анализ, проведённый компанией Socket, показал , что вредоносный код в «is» представлял собой универсальный загрузчик на JavaScript. Он запускал обратное WebSocket-соединение, собирал данные о системе — имя хоста, тип операционной системы, архитектуру CPU и все переменные окружения — а затем пересылал их через динамически импортированную библиотеку ws. При этом каждое сообщение, поступающее через сокет, исполнялось как JavaScript-код, что фактически предоставляло атакующему интерактивный удалённый доступ к устройству.
В то же время другие пакеты, взломанные в рамках той же кампании, распространяли Windows-ориентированный вредонос под названием Scavanger . Это шпионское ПО собирало сохранённые пароли из браузеров и поддерживало скрытую связь с управляющим сервером. Среди его техник уклонения — использование косвенных системных вызовов и зашифрованные каналы C2. Однако в некоторых случаях Scavanger мог вызывать тревоги со стороны Chrome из-за попыток манипулировать его флагами безопасности.
В список затронутых пакетов, помимо «is», вошли: eslint-config-prettier, eslint-plugin-prettier, synckit, @pkgr/core, napi-postinstall и got-fetch. Все они получили вредоносные обновления между 18 и 19 июля 2025 года, что указывает на скоординированную атаку с заранее подготовленным сценарием. Центральной частью фишинговой кампании стал поддельный домен npnjs[.]com, с помощью которого злоумышленники выманивали логины и токены у легитимных разработчиков.
Эксперты предупреждают, что атака может не ограничиться уже известными случаями: вероятно, злоумышленники получили доступ и к другим учётным данным и вскоре могут начать распространение новых вредоносных сборок. Разработчикам настоятельно рекомендовано немедленно сбросить пароли и токены, отключить автоматическое обновление зависимостей, использовать lock-файлы и временно заморозить версии всех библиотек, опубликованных после 18 июля.
Случай с «is» стал очередным напоминанием о хрупкости доверительной модели, на которой строится вся экосистема открытого программного обеспечения. Один незаметный пакет может открыть бэкдор в тысячи корпоративных и пользовательских систем — и об этом никто не узнает, пока не станет слишком поздно.