威胁模型
阻止智能体直接接触凭证值
开发者工具会在高度受信任的上下文中执行第三方代码。对于内置 HTTP 和 SSH,Sallyport 不会让已存储的可重用凭证进入该环境,而是在本地管控每次调用。
凭证值
Sallyport 不会有意将解析后的凭证添加到返回给智能体的结果、批准信息、审计事件、日志或错误信息中。它不会检查或重写执行器响应,而响应中可能包含目标提供的敏感数据。
授权
密钥库状态、每次调用控制机制和当前运行进程的身份共同决定工具调用能否开始。
证据
每个获准的工具调用都必须先写入一条持久化的加密意图记录;目录发现无需如此。
遭入侵的依赖项如何触及凭证
受信任的软件包或工作流本就运行在开发者和 CI 存放可重用凭证的环境中。一旦这些代码变为恶意代码,读取并外传凭证可能只需一条执行路径。
近期事件曾沿此路径实施攻击
各次攻击活动的细节不尽相同,但每次都有恶意代码在可接触凭证的位置运行,而这些凭证之后仍会被其他系统接受。
2026 年 5 月
恶意 TanStack 软件包
42 个 @tanstack 软件包的 84 个恶意版本运行了安装时载荷,收集云凭证、GitHub 令牌和 SSH 密钥,随后试图通过每位受害者维护的软件包继续传播。
TanStack 安全公告2025 年末
Shai-Hulud npm 攻击活动
遭入侵的软件包利用安装时执行窃取机密信息,并使用被盗凭证传播。后续变体还加入了针对 CI 的行为以及对自托管运行器的滥用。
GitHub 供应链审查2025 年 8 月
Nx S1ngularity
恶意 Nx 软件包版本运行了安装后脚本,扫描开发者系统中的敏感数据,尝试使用本地 AI 工具,并通过 GitHub CLI 上传结果。
Nx 事件复盘
将可重用凭证移出进程
环境变量或文件中的机密信息就是进程可以复制的数据。由 Sallyport 管理的凭证则作为本地操作的输入,受密钥库状态、批准、目标绑定和审计约束。
环境凭证
内置 HTTP / SSH
对于内置 HTTP 和 SSH,软件包无法从智能体环境中读取已存储凭证。它必须请求一项操作;该操作可以被拒绝、按调用实施门控、限制在请求的目标或已配置的目标范围内,并记入审计日志。目标响应未经内容检查或重写即被返回。
这并不能阻止恶意代码运行,也不能证明已获批准的请求无害。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 验证不会在整个连接期间将连接地址固定为已检查的地址,因此仍存在重绑定缺口。 |
| 本地审计历史记录被编辑 | 加密记录和已签名的密文链可检测编辑、重新排序、内部缺口和签名方替换。另一个已签名的本地检查点可检测回滚到该检查点之前的状态。 | 异常关机后,检查点之后的尾部记录可能丢失。要识别完整且一致的本地回滚并将其与恢复操作区分开,需要设备外见证。 |
| 上游在 MCP 目录元数据中放入机密信息 | 应将上游服务器代码作为信任边界的一部分进行选择和审查。Sallyport 返回工具结果、错误和经过认证的目录元数据,不会筛查其中是否含有凭证内容,但会应用文档所述的大小和描述限制。 | initialize 和 tools/list 不在调用审计范围内。其名称、描述和 schema 都是由上游任意控制的内容,其中可能包含凭证或其他敏感数据。 |
| 获取 root 权限或在 Sallyport 内执行代码 | Secure Enclave 对私钥使用进行门控,密钥库在静态存储时保持加密。 | 拥有 root 权限、停用 SIP 或能在进程内执行代码的攻击者可以控制已解锁的密钥库。Sallyport 不是主机沙盒或防病毒软件。 |
本模型不作出的承诺
Sallyport 可减少凭证暴露,并加强对凭证使用的控制。它无法将恶意的本地代码变成受信任代码。
批准不等于意图分析
会话卡片可以识别进程及其来源信息,但无法判断该会话中的每个请求是否安全。
进程准入不等于组件隔离
会话识别的是当前运行的进程。加载到该进程中的代码,或通过继承的套接字或管道写入数据的组件,都会获得相同的准入状态。
操作者可能批准有害操作
点按或 Touch ID 只能证明确认流程发生过,无法让审查不充分的操作变得无害。
MCP 上游是受信任的接收方
远程服务器会收到其已配置的 API 密钥或 OAuth 令牌。本地 stdio 子进程会收到已绑定的凭证和 App 环境。Sallyport 不会对这两类服务器进行沙盒隔离。
目录元数据是不受信任的内容
initialize 和 tools/list 会绕过调用阶梯和意图审计。工具名称、描述和 schema 仍是由上游任意控制的内容,不会筛查其中是否含有凭证;文档所述的大小和描述限制仍然适用。
Sallyport 之外的流量不在范围内
App 无法管控直接网络调用、Shell 命令、其他凭证存储,或绕过其 MCP 接口的工具。
执行器结果可能包含敏感数据
HTTP、MCP 和 SSH 的结果与错误信息不会被检查或重写。目标可能返回凭证或其他敏感数据,SSH 录制内容也会保留目标输出。
审计预览可能包含调用方数据
Sallyport 不会将解析后的凭证添加到批准请求或审计记录,但调用方提供的命令和参数会出现在摘要及有长度限制的预览中。请将解密后的审计数据视为敏感数据。
这是交互式 Mac 产品
受支持的部署方式是在 Apple Silicon Mac 上运行具有本地界面和 Touch ID 的已签名 macOS App。不提供 Linux、容器、服务器、云运行器或无头 CI 模式。