Модель угроз
Не давайте агенту доступ к значениям учётных данных
Инструменты разработчика выполняют сторонний код в доверенном окружении. Для встроенных HTTP и SSH Sallyport не помещает туда сохранённые многоразовые учётные данные и локально контролирует каждый вызов.
Значение
Sallyport намеренно не добавляет найденные учётные данные в результаты, подтверждения, события аудита, журналы и ошибки. Ответы исполнителя не проверяются и не изменяются и могут включать конфиденциальные данные цели.
Авторизация
Состояние хранилища, подтверждение каждого вызова и проверка запущенного процесса определяют, можно ли начать вызов инструмента.
Аудит
Перед каждым допущенным вызовом инструмента должна быть сохранена зашифрованная запись о намерении. Получение каталога её не создаёт.
Как скомпрометированная зависимость добирается до учётных данных
Доверенный пакет или CI-процесс уже работает там, где разработчики хранят многоразовые учётные данные. Если такой код становится вредоносным, для чтения и отправки этих данных достаточно одного запуска.
Недавние инциденты прошли по этому пути
Техника меняется от кампании к кампании. Во всех этих случаях вредоносный код выполнялся рядом с учётными данными, которые другие системы продолжали принимать.
Май 2026 года
Вредоносные пакеты TanStack
84 вредоносные версии 42 пакетов @tanstack при установке запускали код, который собирал облачные учётные данные, токены GitHub и приватные SSH-ключи, а затем пытался распространиться через пакеты, сопровождаемые каждой жертвой.
Бюллетень безопасности TanStackКонец 2025 года
Кампании Shai-Hulud в npm
Скомпрометированные пакеты крали секреты во время установки и распространялись с помощью похищенных учётных данных. Более поздние варианты распознавали CI и злоупотребляли раннерами на собственной инфраструктуре.
Разбор GitHub по безопасности цепочки поставокАвгуст 2025 года
Nx S1ngularity
Вредоносные версии пакетов Nx запускали post-install-скрипт, который искал конфиденциальные данные в системах разработчиков, пытался использовать локальные инструменты ИИ и загружал результаты через GitHub CLI.
Разбор инцидента от Nx
Уберите многоразовые учётные данные из процесса
Секрет из переменной окружения или файла можно просто скопировать. Учётные данные в Sallyport становятся входными данными локальной операции, которая зависит от состояния хранилища, подтверждения, привязки к цели и аудита.
Учётные данные в окружении
Встроенные HTTP / SSH
Для встроенных HTTP и SSH пакет не может прочитать сохранённые учётные данные из окружения агента. Ему придётся запросить операцию, которую Sallyport может отклонить, потребовать подтвердить отдельно, ограничить запрошенной или настроенной целью и записать в журнал. Ответ цели возвращается без проверки или изменения содержимого.
Это не мешает вредоносному коду запускаться и не доказывает безопасность одобренного запроса. Цели HTTP и SSH могут вернуть конфиденциальные данные. Удалённые MCP-серверы получают настроенную аутентификацию, а локальные stdio-серверы — привязанные данные в окружении. Любую цель и внешний сервер следует считать доверенным получателем учётных данных.
Каждый допущенный вызов проходит одинаковые проверки
Встроенная цепочка применяется к вызовам инструментов. Запросы initialize и tools/list управляют каталогом вне этой цепочки и не создают строку намерения.
- 01
Хранилище готово
В любом другом состоянии действия агентов запрещены.
отказ | далее
- 02
Цель определена
Должны существовать все обязательные сведения о цели и учётных данных.
отказ | далее
- 03
Проверка каждого вызова
Помеченные ключи и внешние серверы требуют подтверждения при каждом использовании.
подтверждение | далее
- 04
Допуск процесса
Допустить запущенный процесс по сессии, списку разрешений, карточке сессии или режиму наблюдения. Это не определяет, какой загруженный пакет или источник байтов создал запрос.
подтверждение | далее
- 05
Намерение в журнале
Зашифрованная запись должна сохраниться до начала выполнения.
отказ | запуск
- 06
Выполнить и вернуть результат
Выполнить операцию, добавить результат и вернуть ограниченный по размеру результат без проверки или изменения содержимого. Результат может включать конфиденциальные данные.
результат
Запись с точным cdhash перестаёт совпадать после обновления файла. Запись издателя может пропускать обновления с той же идентичностью, поэтому скомпрометированный издатель или путь подписи остаётся доверенным. Обе записи пропускают только карточку сессии.
Меры защиты и остаточный риск
У модели есть чёткая граница. Остаточный риск является её частью.
| Угроза | Что меняет Sallyport | Что остаётся |
|---|---|---|
| Вредоносная зависимость читает файлы или окружение | Для встроенных HTTP и SSH Sallyport не помещает сохранённые учётные данные в окружение агента и намеренно не добавляет их в результаты, журналы, подтверждения или события аудита. Результаты исполнителя возвращаются без проверки или изменения содержимого. | Учётные данные вне Sallyport остаются доступными. Локальные stdio-серверы MCP получают привязанные данные и наследуют окружение Sallyport. |
| Инъекция в промпт или компрометация одобренного агента | Ключи с подтверждением каждого вызова всё равно требуют нажатия или Touch ID. При последующих вызовах Sallyport заново проверяет запущенный процесс. | Допуск относится к процессу, а не к каждому пакету или байту. Загруженный код и отправители через унаследованный сокет или канал получают тот же допуск. |
| Перенаправление учётных данных на другой хост | Учётные данные HTTP добавляются только при совпадении хоста и пути. Запросы с ними не следуют перенаправлениям; остальные остаются на том же хосте и порте без перехода с HTTPS на HTTP. | Текущая проверка DNS не закрепляет проверенный адрес до установления соединения, поэтому сохраняется возможность перепривязки DNS (DNS rebinding). |
| Изменение локальной истории аудита | Зашифрованные строки и подписанная цепочка шифротекста обнаруживают правки, перестановку, внутренние пропуски и замену подписывающего ключа. Подписанная локальная контрольная точка обнаруживает откат за неё. | После аварийного завершения хвост новее контрольной точки может быть потерян. Чтобы отличить полный локальный откат от восстановления, нужен внешний свидетель. |
| Внешний сервер помещает секреты в метаданные каталога MCP | Выбирайте и проверяйте код внешнего сервера как часть границы доверия. Sallyport возвращает результаты, ошибки и аутентифицированные метаданные каталога без фильтрации по признаку учётных данных и с учётом документированных ограничений размера и длины описаний. | Initialize и tools/list находятся вне аудита вызова. Их имена, описания и схемы являются произвольным содержимым под контролем внешнего сервера и могут включать учётные данные или другую конфиденциальную информацию. |
| Права root или выполнение кода внутри Sallyport | Secure Enclave ограничивает использование приватных ключей, а данные хранилища остаются зашифрованными на диске. | Права root, отключённый SIP или выполнение кода внутри процесса позволяют управлять разблокированным хранилищем. Sallyport не является песочницей или антивирусом. |
Чего эта модель не обещает
Sallyport снижает риск утечки учётных данных и контролирует их использование. Он не превращает враждебный локальный код в доверенный.
Подтверждение не анализирует намерение
Карточка сессии показывает процесс и его происхождение. Она не определяет безопасность каждого запроса внутри сессии.
Допуск процесса не изолирует компоненты
Сессия определяет запущенный процесс. Загруженный код или компонент, который пишет через унаследованный сокет или канал, получает тот же допуск.
Пользователь может одобрить вредное действие
Нажатие или Touch ID подтверждает только прохождение проверки. Невнимательно просмотренная операция от этого не становится безопасной.
Внешние MCP-серверы являются доверенными получателями
Удалённый сервер получает настроенный API-ключ или токен OAuth. Локальный дочерний stdio-процесс получает привязанные данные и окружение приложения. Sallyport не изолирует ни один из этих серверов.
Метаданные каталога не являются доверенным содержимым
Инициализация и tools/list обходят цепочку вызова и строку намерения. Имена, описания и схемы остаются произвольным содержимым под контролем внешнего сервера без фильтрации по признаку учётных данных; документированные ограничения размера и длины описаний сохраняются.
Трафик в обход Sallyport находится вне модели
Приложение не может контролировать прямые сетевые запросы, команды оболочки, другие хранилища и инструменты, которые обходят его MCP-интерфейс.
Результаты исполнителя могут содержать конфиденциальные данные
Результаты и ошибки HTTP, MCP и SSH не проверяются и не изменяются. Цель может вернуть учётные данные или другую конфиденциальную информацию, а записи SSH сохраняют её вывод.
Предпросмотр аудита может содержать данные вызывающей стороны
Sallyport не добавляет найденные учётные данные в подтверждения или строки аудита, но команды и аргументы вызывающего процесса попадают в сводки и ограниченный предпросмотр. Считайте расшифрованный аудит конфиденциальным.
Это интерактивный продукт для Mac
Поддерживается подписанное приложение для macOS на Apple Silicon с локальным интерфейсом и Touch ID. Режимов для Linux, контейнеров, серверов, облачных раннеров и CI без интерфейса нет.
Проверьте реализацию
Основной код опубликован по лицензии Apache-2.0. Изучите реализацию и модель доверия или соберите приложение локально.
Открыть исходный код на GitHub