Перейти к содержимому
Инвойсбокс
Инвойсбокс
Login iconВойти

Провенанс сборки — как проверить, из какого кода собран пакет

Провенанс (provenance) — машинно проверяемая запись о том, из какого репозитория и какого коммита собран пакет. Зачем он MCP-серверу и чему учат инциденты в цепочке поставок npm.

3 минИнвойсбокс
Провенанс сборки — как проверить, из какого кода собран пакет
Провенанс сборки — запись о происхождении пакета: из какого репозитория, какого коммита и каким сборочным конвейером он собран. Главное слово — «проверяемая»: запись проверяет программа, а не читатель на слово. Термин и уровни требований описывает рамка SLSA (Supply-chain Levels for Software Artifacts).

Зачем это MCP-серверу

MCP-сервер ставят из публичного каталога одной командой, и запускается он на машине пользователя с его правами. Подменённый по дороге пакет обходит любую защиту, написанную внутри кода, поэтому публикация входит в контур безопасности наравне с двухфазным подтверждением денежных операций. Перед установкой всё знание о сервере сводится к трём вещам: архив пакета, страница в реестре и подписи, которые проверяются программой.

Как публикуют с провенансом

Публикация с провенансом в npm работает только из сборочной среды публичного репозитория у поддерживаемых провайдеров. Порядок такой: открыть репозиторий с исходниками, перенести выпуск в сборочный конвейер и публиковать оттуда с флагом провенанса — ручная публикация такой записи не оставляет. Так выпускается MCP-сервер Инвойсбокс: у пакета есть открытое зеркало под лицензией MIT, а по записи провенанса любой желающий машинно проверит, из какого коммита собран архив.

Провенанс не то же самое, что подпись реестра. Подпись защищает от подмены пакета на зеркале или прокси и живёт отдельно от свидетельства о том, где и кем пакет собран. Проверка подписей зависит от доступности чужого сервиса, поэтому её обычно делают непреграждающей.

Интересные факты

  • Пакет postmark-mcp в реестре npm копировал известную библиотеку и пятнадцать версий подряд ничего лишнего не делал. В шестнадцатой появилась одна строка: скрытая копия всех отправленных писем уходила постороннему. Полторы тысячи установок в неделю, утечка шла восемь дней, пока её не поймал поведенческий анализ.
  • Инциденты в цепочке поставок npm 2018–2025 — event-stream, colors и faker, color и chalk, Shai-Hulud — объединяет одно: ни один не требовал ошибки в чужом коде, достаточно было обновить зависимость. Два из четырёх целились в деньги.
  • Официальные рекомендации MCP приравнивают локальный сервер к исполнению произвольного кода: клиент обязан показать точную команду запуска и получить явное согласие человека.
  • Правило, к которому пришли: версию пакета указывают всегда — у платёжного инструмента «latest» означает, что набор инструментов может измениться между двумя запусками одного диалога. Подробнее — в статье «Пятнадцать честных версий и одна шестнадцатая».

Коротко

  • Провенанс — машинно проверяемая запись о том, из чего собран пакет.
  • Публикуется только из сборочного конвейера публичного репозитория.
  • Подпись реестра и провенанс — разные механизмы; нужны оба.
  • Инциденты npm показывают: атака на зависимость не требует ошибки в вашем коде.

Полезно

AI-инвойсинг: счета через ассистента — подробнее →

#MCP#ИИ-агенты#безопасность