Хотели «Hello, world» — получили «Hello, worm».
В экосистеме JavaScript обнаружен опасный червь под названием Shai-Hulud, заразивший как минимум 187 пакетов в репозитории NPM. Его особенность в том, что он не просто крадёт учётные данные разработчиков, но и самостоятельно распространяется, создавая новые версии библиотек с внедрённым вредоносным кодом. Попав в систему, вредонос ищет токены NPM, модифицирует до двадцати наиболее популярных пакетов, доступных владельцу этих токенов, и публикует их обновлённые копии. Каждый новый случай установки заражённого компонента ведёт к краже ещё большего числа секретов и их публикации в открытых репозиториях GitHub с пометкой Shai-Hulud.
Над исследованием атаки работают специалисты из компаний Aikido , StepSecurity и платформы socket.dev . По их данным, первый компрометированный пакет был изменён 14 сентября. Червь использует инструмент TruffleHog для поиска ключей доступа и токенов в окружении разработчика, а также пытается создавать GitHub Actions и выгружать обнаруженные секреты. При этом он нацелен на системы с Linux и macOS, полностью игнорируя Windows-окружения. Для облачных сервисов Shai-Hulud умеет извлекать данные из AWS, Azure и Google Cloud Platform.
Особую тревогу вызвало то, что заражение коснулось пакетов, публикуемых от имени CrowdStrike. Socket.dev зафиксировал не менее 25 таких библиотек, однако NPM оперативно удалил их из публичного доступа. В самой CrowdStrike сообщили, что угрозы для основной платформы Falcon нет: вредоносные модули не связаны с продуктами компании, ключи были отозваны, а расследование инцидента продолжается.
Отдельное внимание эксперты обратили на то, что Shai-Hulud не просто использует украденные токены, но и запускает цепочку каскадного заражения: один скомпрометированный аккаунт ведёт к переполнению всех пакетов его владельца. Такая схема делает червь особенно опасным, ведь один случай невнимательности разработчика может привести к лавинообразному распространению. Исследователи сравнивают атаку с живым организмом, который может на время замирать, а затем возобновлять активность при новом заражении. Уже сейчас есть признаки снижения числа свежих заражений, но риск нового всплеска сохраняется.
Предпосылкой к нынешнему инциденту стала череда атак на NPM в последние недели. Сначала прошла масштабная фишинговая кампания с поддельными уведомлениями о необходимости обновить настройки многофакторной аутентификации, после чего в публичный реестр попало несколько десятков вредоносных пакетов, ориентированных на кражу криптовалютных данных. В августе пострадал популярный инструмент «nx» с миллионами загрузок в неделю: внедрённый код искал ключи и токены, создавал новый публичный репозиторий прямо в GitHub-аккаунте жертвы и выкладывал туда похищенное. В отличие от Shai-Hulud, тот вредонос не обладал механизмом самораспространения.
По оценке отраслевых специалистов, происходящее можно назвать «supply chain-атакой в квадрате». Предполагается, что единственным действенным решением станет внедрение защищённой двухфакторной схемы для публикации каждого пакета с обязательным подтверждением человеком. Автоматические процессы без дополнительного контроля превращаются в открытую дверь для атакующего.
Shai-Hulud демонстрирует, насколько уязвимыми остаются современные цепочки поставок программного обеспечения. Массовое заражение через доверенные пакеты ставит под удар весь процесс разработки, а пока экосистема не перейдёт на более строгие меры контроля и аутентификации, подобные вспышки будут повторяться.