Почему это важно
MCP-сервер или навык исполняется на твоей машине, с твоими токенами и доступом к файлам, БД и сети. Установить недоверенный пакет — это по сути дать незнакомцу шелл с твоими правами. В экосистеме MCP уже находили реальные RCE-уязвимости и вредоносные пакеты — это не гипотеза.
Сценарий атаки. Ты ставишь популярно выглядящий «mcp-server-helper» из чьего-то репозитория командой npx. В postinstall-скрипте пакета — код, который читает твой ~/.aws/credentials, ~/.ssh/id_rsa и .env проекта и отправляет на чужой сервер. Агенту ты этого не приказывал — пакет сделал это сам при установке. Вариант помягче: пакет нормальный, но в обновлении автор (или угонщик его npm-аккаунта) добавил вредонос — классическая supply-chain атака.
Что делать (по шагам)
- Ставь только из доверенных источников — официальные реестры/верифицированные авторы, репозитории с историей и звёздами, а не случайные gist-ы.
- Читай исходник ДО установки. Минимум —
SKILL.md/README,package.json(особенноscripts.postinstall/preinstall) и точку входа сервера:
# посмотреть, что пакет делает при установке, не запуская его
npm view <pkg> scripts
npm pack <pkg> # скачать тарбол
tar -xzf <pkg>-*.tgz && grep -rn "child_process\|exec\|fetch\|https" package/
- Дай минимум прав: read-only к БД, узкий scope токена, доступ только к нужным папкам. Не выдавай агенту секреты, которые ему для задачи не нужны.
- Запускай в песочнице/контейнере, а не на основной системе с боевыми кредами:
docker run --rm -it --network none -v "$PWD":/work:ro node:22 bash
- Фиксируй версии и держи lock-файл. Обновляйся осознанно, читая changelog, а не «всё latest автоматом».
- Перед НЕОБРАТИМЫМ (миграция/деплой/удаление/деньги) — сначала бэкап/ветка, потом действие агента.
Чего НЕ делать
- Не запускай
curl ... | bashи установку из непроверенного источника вслепую. - Не давай боту/агенту админ-права и доступ к секретам «на всякий случай».
- Не подключай MCP/навык, исходник которого не можешь посмотреть.
- Не ставь пакеты с «typosquat»-именами (опечатка в названии популярного) — проверяй имя символ в символ.
- Не отключай подтверждения опасных действий ради удобства.
Как проверить себя
- Я открывал исходник/
SKILL.mdкаждого установленного MCP/навыка. - Проверил
postinstall/preinstallскрипты — там нет обращений к секретам и сети. - Токены, доступные агенту, имеют минимальный scope (БД — read-only, где можно).
- Рискованное гоняю в контейнере/песочнице, а не на машине с боевыми кредами.
- Версии зафиксированы, lock-файл закоммичен, обновления — осознанные.
Инструменты
- Аудит зависимостей: npm audit, Socket.dev (детект вредоносных пакетов), Snyk, OSV-Scanner.
- Изоляция: Docker, gVisor, отдельный пользователь ОС.
- Контроль прав: scope-токены, read-only роли в БД, переменные окружения вместо общих ключей.
- Чтение пакетов:
npm pack/npm view <pkg> scriptsперед установкой.