- Более 300 npm-пакетов были заражены самораспространяющимся червём, исходно атаковавшим библиотеку tinycolor.
- Злоумышленники использовали функцию автоматического обновления пакетов для внедрения вредоносного кода и повторной публикации заражённых версий.
- Рекомендации для разработчиков включают удаление заражённых пакетов, фиксирование версий и обновление всех скомпрометированных учётных данных.
Недавно выявлен серьёзный инцидент в экосистеме npm: более 300 пакетов оказались инфицированы самораспространяющимся червём, который начал атаку с широко используемой библиотеки tinycolor. Исследователи из компании Socket обнаружили, что злоумышленники проникли в исходную библиотеку с двумя миллионами еженедельных загрузок, а далее через встроенную функцию обновления пакетов — NpmModule.updatePackage — автоматизировали процесс заражения других пакетов.
Червь осуществляет модификацию файла package.json, внедряет вредоносный скрипт bundle.js, после чего переупаковывает архив и повторно публикует пакет в реестр npm, используя украденные токены авторизации. Такой механизм позволяет вирусу эффективно распространяться по цепочке зависимостей. Для поиска и кражи токенов червь сканирует переменные окружения, включая NPM_TOKEN, а также применяет легитимный инструмент TruffleHog для обнаружения чувствительных данных перед их передачей на сервер злоумышленников.
Кроме того, были скомпрометированы учётные данные npm-аккаунта компании CrowdStrike, что позволило заразить и несколько её пакетов. Пострадавшая компания оперативно удалила вредоносные версии и обновила учётные данные безопасности.
Атака получила название Shai-Hulud — по названию файлов рабочего процесса, обнаруженных во вредоносном коде. Среди наиболее известных поражённых пакетов числятся @ctrl/tinycolor, ngx-toastr, @crowdstrike/glide-core, angulartics2, eslint-config-crowdstrike и @nativescript-community/ui-collectionview.
Эксперты настоятельно рекомендуют разработчикам полностью удалить заражённые пакеты с помощью команды npm uninstall
и зафиксировать зависимости на безопасных версиях через npm install @ --save-exact
. Также крайне важно сменить все учётные данные, включая токены npm, персональные токены доступа GitHub, ключи SSH, а также секреты для облачных сервисов и систем управления секретами («секретные менеджеры»). Регулярная ротация ключей API, строк подключения к базам данных и других конфиденциальных данных становится обязательной практикой предотвращения подобных атак.
Данный инцидент подчёркивает необходимость постоянного мониторинга цепочки поставок ПО и применения многоуровневых мер безопасности в экосистемах open source. Ответственное отношение к аудиту и обновлению зависимостей становится критически важным для минимизации угроз подобных атак на инфраструктуру современных разработчиков.