84 npm-пакета стали вредоносными в одной майской атаке

Пустите агента в прод.Ключи оставьте себе.

Sallyport держит учётные данные в локальном хранилище и сам выполняет API-вызовы и SSH-команды за агента. Каждый запуск вы подтверждаете кликом или через Touch ID. Нет команды, которая показала бы сохранённый ключ, и кнопки экспорта тоже нет.

$brew install --cask olegsotnikov/tap/sallyport

macOS 14+ · Apple Silicon · Apache-2.0 · Бесплатно · без аккаунта · без облака

Для инженеров, которые пускают Claude Code, Cursor или Codex к настоящей инфраструктуре

Claude CodeCodexCursorWindsurfClineLangChainCrewAIOpenHandsGooseZed
Попробуйте

Подтверждение в рабочем контексте

Этот ключ требует подтверждения при каждом использовании. Вызов ждёт вашего решения.

claude · ~/infra

sallyport · http.request

PATCH api.cloudflare.com/client/v4/zones/…/dns_records

key cloudflare · flagged approval per call

ожидание подтверждения...

Требуется подтверждение

http.request → api.cloudflare.com

Developer ID Application: Anthropic PBC

claude node zsh

Ключ:cloudflareкаждый вызов
Нажмите "Подтвердить", чтобы разрешить вызов.или нажмите A/D
Проблема

Сейчас агент может прочитать ваши ключи

API-токены в .env, SSH-ключи на диске, OAuth-гранты в конфигах. Всё это читает и сам агент, и каждый пакет, который он подтягивает. А одного отравленного README хватит, чтобы увести их наружу.

Секреты открыты процессу

Токены в .env и переменных оболочки, SSH-ключи на диске, OAuth-токены в конфигах. Их читает агент, его дочерние процессы и всё, что npm поставил сегодня.

Инъекция в промпт превращается в кражу

Вредоносная страница или README велит агенту отправить токен на новый адрес, и агент подчиняется. Он для того и создан, чтобы выполнять инструкции.

Вы узнаёте из счёта

Без шлюза не остаётся записи о том, какие вызовы сделал агент, куда он их отправил и что в них было. Украденные ключи всплывают через недели, по чужому расписанию.

Это не гипотеза

Май 2026

Атака на npm через TanStack

84 вредоносные версии в 42 пакетах собирали облачные учётные данные, токены GitHub и SSH-ключи прямо во время установки, а затем расползались через пакеты самих жертв.

Конец 2025

Червь Shai-Hulud

Скомпрометированные npm-пакеты крали секреты при установке и с помощью украденных данных заражали следующую партию пакетов.

Август 2025

Nx S1ngularity

Отравленный сборочный инструмент сканировал машины разработчиков в поисках секретов, пробовал локальные AI-инструменты и выгружал добычу через GitHub CLI.

Все три собирали ключи из переменных окружения и файлов на диске. Sallyport не держит рабочие ключи ни там, ни там.

Агенту ключи не нужны

Агент отправляет запрос: вызови этот API, выполни эту команду на таком-то хосте. Sallyport подставляет учётные данные внутри приложения, выполняет вызов и возвращает результат. Ключ не попадает в окружение агента, а запечатанный журнал показывает, что выполнялось и кто это подтвердил.

Модель доверия

Фиксированная лестница решений

Каждое действие поднимается по одной и той же вшитой лестнице. Здесь нет языка правил, который можно настроить неправильно, и нет движка правил, который со временем протухнет; необязательный список разрешений может пропустить запрос подтверждения сессии для доверенных идентификаторов кода.

Модель доверия

1

блокировка хранилища

Хранилище блокирует всё

При запуске хранилище заблокировано. Secure Enclave и Touch ID защищают доступ к его данным. До разблокировки Sallyport отклоняет все действия.

2

подтверждение каждого вызова

Помеченные ключи требуют подтверждения каждый раз

Ключ с пометкой "Подтверждение на каждый вызов" требует клик или Touch ID при каждом использовании, в том числе внутри подтверждённой сессии.

3

подтверждение сессии

Одно подтверждение на запуск агента

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

4

наблюдение

Выполнить и записать

Если подтверждение сессий выключено, действия выполняются без карточек и остаются в журнале.

Блокировка хранилища, подтверждение каждого вызова, подтверждение сессии, наблюдение.

Возможности

Всё в одном подписанном приложении

Одно подписанное приложение для Mac держит хранилище, подтверждения и журнал. Аккаунт создавать не нужно, облачного сервиса за ним нет.

Абсолютная блокировка хранилища

Пока хранилище заблокировано, Sallyport отклоняет все действия агентов и все операции управления, кроме проверки статуса.

Шифрование на диске

Хранилище шифрует имена и значения ключей, провайдеров, привязки к хостам, список SSH и настройки.

Данные о процессе

В карточке указаны подпись кода вызывающего процесса и цепочка родительских процессов, включая неподписанные процессы.

Touch ID для изменений

Изменения конфигурации могут требовать Touch ID. Синтетический клик не пройдёт биометрическую проверку.

Журнал со слепой записью

Sallyport шифрует записи о запусках и действиях при сохранении, а затем связывает шифротекст хеш-цепочкой.

SSH с видимой командой

Sallyport видит всю SSH-команду, проверяет ключ хоста и сохраняет зашифрованную запись сессии. Приватный ключ остаётся в приложении.

Режим наблюдения

Режим наблюдения убирает карточки сессий, но сохраняет блокировку хранилища, подтверждение отдельных вызовов и журнал.

Без восстановления

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

Каналы

HTTP, SSH и MCP

Агент подключается к Sallyport как к обычному MCP-серверу. Все действия проходят ту же лестницу и попадают в тот же журнал.

HTTP API

http.request → api.github.com

Приложение выполняет HTTPS-вызов и подставляет учётные данные только во время выполнения. При перенаправлении на другой хост оно не передаёт их дальше.

SSH

ssh.exec → deploy@prod-03

Помощник без состояния открывает соединение. Приложение подписывает запросы SSH, закрепляет ключи хостов и сохраняет запись сессии. Приватный ключ не попадает в помощник.

MCP-серверы

github.create_issue

Проксируйте локальные stdio- или удалённые MCP-серверы через тот же шлюз. Sallyport хранит и обновляет токены OAuth 2.1.

В цифрах

Что на кону

84

вредоносных версий пакетов в одной npm-атаке, охотившейся за учётными данными

0

аккаунтов, облачных сервисов и телеметрии: Sallyport работает целиком на вашем Mac

1 касание

Touch ID подтверждает помеченный вызов; синтетический клик его не подделает

~2 мин

от brew install до первого вызова через шлюз

Ограничения

Чего Sallyport не обещает

Инструменты безопасности любят обещать лишнего, поэтому свои границы мы зафиксировали письменно.

Ограничения

Подтверждённая сессия может действовать неправильно

Подтверждение сессии разрешает процессу работать, но не оценивает смысл каждого запроса. Для ключей, которые нужно проверять отдельно, включите подтверждение каждого вызова.

Sallyport не остановит нативный код с вашими правами

Sallyport не является антивирусом. Код с правами вашего пользователя может атаковать приложение или операционную систему.

Sallyport не проверит запрос за вас

Карточки показывают подпись кода вызывающего процесса и цепочку процессов. Решение всё равно принимаете вы.

Вопросы и ответы

Частые вопросы

Как лицензируется Sallyport?
Sallyport можно скачать и использовать бесплатно. Ядро распространяется как открытый код по лицензии Apache-2.0. Запланированные корпоративные компоненты будут под коммерческой лицензией.
Где хранятся мои секреты?
В локальном хранилище на вашем Mac. Secure Enclave и Touch ID защищают доступ к ключу шифрования хранилища. Sallyport шифрует значения и метаданные секретов на диске и не загружает данные хранилища.
Приложение связывается с серверами Sallyport?
Нет. Ни облачного сервиса, ни аккаунта, ни телеметрии. Sallyport работает офлайн, кроме обращений к сервисам, которые вы сами указали, и ленты обновлений.
Каковы системные требования?
Mac с Apple Silicon и macOS 14 или новее. Mac на Intel не поддерживаются.
Что происходит, пока хранилище заблокировано?
Действия агентов останавливаются. Запросы управления могут вернуть только статус, остальные операции отклоняются. Для разблокировки нужен Touch ID. Блокировка очищает сессии и ожидающие подтверждения.
Работает ли Sallyport с Claude Code и другими агентами?
Любой MCP-клиент может использовать встроенную команду sp mcp для доступа к http.request, ssh.exec и настроенным внешним MCP-серверам.
Может ли агент увидеть мои ключи?
Нет. Нет команды, которая показала бы сохранённые учётные данные, и нет пути для экспорта или восстановления. Одна честная оговорка: Sallyport возвращает ответы серверов как есть, поэтому если целевой сервис сам вернёт секрет в ответе, агент увидит этот ответ.
Что делать при потере доступа к Mac?
Ключа восстановления нет. Создайте хранилище заново и перевыпустите учётные данные у провайдеров.

Вашего агента отделяет от ваших ключей одна инъекция в промпт.

Бесплатная загрузка. Apple Silicon, macOS 14 или новее. Аккаунт не нужен. Никогда.

$brew install --cask olegsotnikov/tap/sallyport

macOS 14+ · Apple Silicon

Sallyport

Sallyport выполняет API-вызовы и SSH-команды за вашего ИИ-агента. Ключи остаются в локальном хранилище на вашем Mac; вы подтверждаете каждый запуск, и каждое действие попадает в запечатанный журнал.

© 2026 Sallyport · Открытый код по лицензии Apache-2.0 · Oleg Sotnikov