В современном мире разработки программного обеспечения безопасность цепочки поставок является критическим аспектом, напрямую влияющим на надежность и безопасность конечных продуктов. Недавний инцидент с npm — одной из крупнейших экосистем пакетов для JavaScript — наглядно демонстрирует, как фишинговая атака может привести к масштабному компромету коду, используемому миллионами разработчиков по всему миру. В июле 2025 года стало известно о серии атак, в результате которых популярные npm-пакеты, включая eslint-config-prettier и eslint-plugin-prettier, были заражены вредоносным кодом после того, как злоумышленники получили доступ к токену одного из мейнтейнеров через фишинговое письмо. Известная экосистема npm является одним из краеугольных камней современного веб-разработки, поддерживая инфраструктуру, которая облегчает интеграцию и использование библиотек и инструментов. Это делает все пакеты, доступные на npm, привлекательной целью для злоумышленников, стремящихся внедрить вредоносный код и получить контроль над огромным числом проектов и систем.
Кампания по фишингу началась с рассылки имейлов, маскировавшихся под официальные сообщения npm, но использующих поддельный домен npnjs.com — очень похожий на оригинальный. Эта деталь особенно важна, так как человеческий фактор остается одним из самых слабых звеньев в системе безопасности. Разработчики, получившие такие письма, не сразу заподозрили опасность и ввели свои учетные данные, включая npm-токены, которые предоставляют возможности публикации новых версий пакетов. После получения токена злоумышленники оперативно выпустили несколько новых версий некоторых популярных пакетов, в том числе eslint-config-prettier.
Новые версии были опубликованы без каких-либо изменений в исходном коде репозиториев на GitHub, что стало первым признаком подозрительной активности. Эти версии содержали вредоносный код, нацеленный на пользователей Windows, с попыткой загрузить и выполнить DLL-файл через процесс rundll32, таким образом потенциально обеспечивая возможность удаленного исполнения команд на зараженных машинах. Вредоносное ПО в таких пакетах — серьезная угроза не только для индивидуальных разработчиков, но и для крупных компаний, полагающихся на автоматизацию обновлений, таких как Dependabot и Renovate. Эти инструменты часто выбирают последние версии библиотек, что могло привести к тому, что множество проектов, CI/CD пайплайнов и конечных продуктов автоматически получили зараженный код. Ответная реакция мейнтейнера на инцидент была быстрой.
Токен, скомпрометированный в результате фишинга, был немедленно отозван, а учетные данные — обновлены. Зараженные версии были помечены как устаревшие, чтобы инструменты автоматического обновления не предлагали их для установки, а поддержка npm была вовлечена в процесс удаления вредоносных версий из реестра. Эксперты по безопасности рекомендуют всем разработчикам, использующим упомянутые пакеты, тщательно проверить свои lockfile-файлы на наличие зараженных версий и вернуться к безопасным версиям, выпущенным до начала атаки. Для тех, кто уже установил зараженные версии, настоятельно советуется удалить директории node_modules, очистить кеши npm и выполнить переустановку зависимостей исключительно из надежных источников. Кроме того, необходимо активировать двухфакторную аутентификацию для аккаунтов на npm, чтобы свести к минимуму последствия возможных будущих фишинговых атак.
Анализ данного случая показывает, насколько сложным и многоступенчатым может быть компрометирование цепочки поставок. Начинается все с целенаправленного фишинга для кражи учетных данных мейнтейнеров. Далее злонамеренные лица используют украденные токены для публикации вредоносных версий библиотек без необходимости изменения кода в публичных репозиториях, что значительно усложняет идентификацию атаки. И наконец, зараженный код распространяется по всему сообществу, затрагивая тысячи и даже миллионы проектов. Для предотвращения подобных инцидентов помимо лучших практик безопасности учетных записей необходимо использовать инструменты мониторинга и проактивного обнаружения подозрительной активности в экосистеме npm.
Одним из таких решений является приложение Socket GitHub App, которое анализирует новые пул-реквесты и пакеты на предмет наличия необычных скриптов и потенциально вредоносных бинарных файлов, помогая разработчикам вовремя выявлять и нейтрализовать угрозы. Эта атака служит серьезным напоминанием о том, что безопасность в открытом исходном коде зависит не только от технических мер, но и от осведомленности и внимательности разработчиков и мейнтейнеров. Поскольку автоматизация процессов и интеграция с удаленными пакетами становятся все более популярными, необходимо вводить дополнительные слои защиты и внимательно следить за происходящим в репозиториях и экосистемах. В заключение, ситуация с компрометацией пакетов Prettier и ESLint подчеркивает уязвимость всей цепочки поставок программного обеспечения, особенно в крупнейших и наиболее популярных платформах, используемых миллионами разработчиков. Вирусы и вредоносные программы, проникшие в такие базовые инструменты, могут иметь разрушительные последствия для безопасности информационных систем по всему миру.
Поэтому важно незамедлительно реагировать на подобные инциденты, следовать рекомендациям по безопасности и использовать дополнительные меры защиты для предотвращения повторения подобных атак в будущем.