Новости
Критическая брешь в node-tar: крошечный gzip-архив кладёт сервер
В стандартной библиотеке распаковки архивов экосистемы Node.js закрыли декомпрессионную бомбу — маленький архив исчерпывал диск и процессор.
npm — главный менеджер пакетов для JavaScript и Node.js, через который в мире устанавливают миллиарды зависимостей ежедневно. В начале июля 2026 вышла версия 12, и она меняет поведение по умолчанию: команда npm install больше не запускает автоматически install-скрипты устанавливаемых пакетов. Именно эти скрипты годами были главным каналом атак на цепочку поставок.
Коротко: npm 12 по умолчанию не выполняет install-скрипты пакетов (preinstall, install, postinstall), а также блокирует установку из git- и произвольных URL-источников. Это защита от supply-chain-атак вроде axios и червя Shai-Hulud. Плата — часть сборок в CI ломается, пока разработчик явно не разрешит нужные скрипты.

В начале июля 2026 вышла npm 12 — новая мажорная версия менеджера пакетов, который поставляется вместе с Node.js. Разработчики называют её самым крупным изменением модели безопасности за 16-летнюю историю npm. Суть проста: несколько небезопасных по своей природе операций, которые раньше выполнялись автоматически и незаметно, теперь по умолчанию отключены и требуют явного разрешения.
По умолчанию npm 12 больше не делает следующего:
preinstall, install и postinstall из чужих пакетов не выполняются сами по себе.--allow-git).--allow-remote).binding.gyp.Предупреждения об этих изменениях появились заранее — начиная с версии npm 11.16.0, чтобы у команд было время подготовиться до того, как 12-я ветка станет установкой по умолчанию.
Install-скрипт — это команда, которую пакет описывает в своём файле package.json и которую npm выполняет в момент установки. Классический пример — postinstall: он задуман для полезных задач вроде сборки нативного кода или загрузки бинарников под конкретную платформу. Проблема в том, что скрипт запускается автоматически и с правами текущего пользователя, стоит лишь добавить пакет в зависимости.
Для атакующего это идеальная точка входа. Если злоумышленник опубликует вредоносную версию популярной библиотеки или её транзитивной зависимости, то postinstall отработает на машине разработчика или на раннере CI ещё до того, как хоть одна строка кода приложения будет запущена. Такой скрипт успевает собрать переменные окружения, токены, SSH-ключи и содержимое кошельков и отправить их на сервер злоумышленника.
Главная опасность install-скриптов в том, что вредоносный код срабатывает на этапе npm install — то есть до сборки и до тестов. Отключение автозапуска разрывает эту цепочку в самом начале.
Решение — прямая реакция на серию громких атак на цепочку поставок за последний год, где вектором почти всегда был именно install-скрипт:
Общий знаменатель у всех инцидентов один: пользователю достаточно было выполнить обычную установку зависимостей, чтобы чужой код тихо запустился в его окружении. Отключив автозапуск, npm убирает саму возможность такого «тихого старта» по умолчанию — вредоносный пакет теперь придётся ещё и явно допустить до выполнения.
Проблема шире одного реестра: вредоносные пакеты находят и в PyPI, и в RubyGems. Свежий пример — вредоносные гемы SleeperGem в RubyGems, которые тоже прятали полезную нагрузку в механику установки.
Изменение затрагивает практически любого, кто работает с Node.js. Но у части легитимных пакетов install-скрипты — не прихоть, а необходимость: через них собираются нативные модули (например, обёртки над C/C++ библиотеками) и докачиваются платформенные бинарники. После перехода на npm 12 такие пакеты без разрешения соберутся неполностью.
Самое коварное — как это проявляется в автоматических сборках. Конвейеры CI/CD, где выполняется npm install без подготовки, рискуют получить не явную ошибку, а «тихий» сбой: установка завершается с кодом 0, будто всё в порядке, но нужный скрипт не отработал, и приложение падает уже дальше по пайплайну — на сборке или в рантайме. Отследить такой сбой сложнее, чем честное падение установки.
npm approve-scripts, и зафиксируйте изменения в package.json и lock-файле.--allow-git, --allow-remote) осознанно, а не «на всякий случай».npm audit и обновляйте зависимости — отключённые скрипты снижают риск, но не отменяют гигиену цепочки поставок.Тема разбора и запуска кода из недоверенных источников выходит далеко за пределы одного менеджера пакетов. О том, как безопасно принимать, проверять и хранить файлы, — в разделе безопасность файлов. Близкие сюжеты последних недель: gzip-бомба в библиотеке node-tar и вредоносные ZIP-архивы под видом проектов с GitHub — все они об одном: код и файлы из чужих рук нужно запускать с оглядкой.
Данные приведены на 2 августа 2026 по материалам GitHub Community, Aikido Security и Tech Times. Названия команд, версий и хронология атак указаны по первоисточникам.