Случилась самая масштабная атака на экосистему JavaScript: хакеры через фишинг увели npm-аккаунт популярного мейнтейнера Qix и запушили обновления в 18 ключевых пакетов (`chalk`,
debug, strip-ansi, color-convert и др.) — суммарно это 2,6 млрд загрузок в неделю.Уверен, у вас это уже обсуждают в рабочих чатах. Но что можно сделать прямо сейчас, чтобы обезопасить себя?
Пошаговая инструкция
1. Проверить, используются ли в проекте эти либы:
npm ls ansi-styles debug chalk supports-color strip-ansi ansi-regex wrap-ansi color-convert color-name is-arrayish slice-ansi color color-string simple-swizzle supports-hyperlinks has-ansi chalk-template backslash error-ex
Более точная проверка (по конкретным заражённым версиям):
npm ls ansi-styles@6.2.2 debug@4.4.2 chalk@5.6.1 supports-color@10.2.1 strip-ansi@7.1.1 ansi-regex@6.2.1 wrap-ansi@9.0.1 color-convert@3.1.1 color-name@2.0.1 is-arrayish@0.3.3 slice-ansi@7.1.1 color@5.0.1 color-string@2.1.1 simple-swizzle@0.2.3 supports-hyperlinks@4.1.1 has-ansi@6.0.1 chalk-template@1.1.1 backslash@0.2.1 error-ex@1.3.3
2. Проверить lock-файлы (важно даже если в
package.json всё ок):– Проверить наличие пакетов:
grep -E 'ansi-styles|debug|chalk|supports-color|strip-ansi|ansi-regex|wrap-ansi|color-convert|color-name|is-arrayish|slice-ansi|color|color-string|simple-swizzle|supports-hyperlinks|has-ansi|chalk-template|backslash|error-ex' \
package-lock.json yarn.lock pnpm-lock.yaml 2>/dev/null
– Проверить заражённые версии:
grep -E 'ansi-styles@6.2.2|debug@4.4.2|chalk@5.6.1|supports-color@10.2.1|strip-ansi@7.1.1|ansi-regex@6.2.1|wrap-ansi@9.0.1|color-convert@3.1.1|color-name@2.0.1|is-arrayish@0.3.3|slice-ansi@7.1.1|color@5.0.1|color-string@2.1.1|simple-swizzle@0.2.3|supports-hyperlinks@4.1.1|has-ansi@6.0.1|chalk-template@1.1.1|backslash@0.2.1|error-ex@1.3.3' \
package-lock.json yarn.lock pnpm-lock.yaml 2>/dev/null
3. Если нашли — удалить заражённые версии:
npm cache clean --force
rm -rf node_modules
rm -f package-lock.json yarn.lock pnpm-lock.yaml
npm install # или yarn / pnpm
4. Залочить безопасные релизы:
– В
npm можно добавить блок "overrides" в package.json:
{
"overrides": {
"chalk": "<5.6.1 || >5.6.1",
"debug": "<4.4.2 || >4.4.2"
// и так далее по списку
}
}
Это запретит ставить заражённые версии, но позволит брать старые или новые безопасные.
– В
yarn/pnpm проще закрепить конкретную безопасную версию, например:
{
"resolutions": {
"chalk": "5.6.0"
}
}
⚡️ Советую не откладывать в долгий ящик проверку своих продуктов. Если что-то нашли — заводите задачу, подключайте всех ответственных.
Ну и пересылайте инструкцию своим коллегам.
Ну что, нашли зараженный пакет у себя в проекте?
Let’s keep in touch | 🚀 Дать Boost