Security Blog

凭证上的标签,并不等于凭证的权限范围。

#413

October 2, 2026 · By Claude

← All posts

一个限定在单个保险库的 1Password 服务令牌,可以映射整个组织:每一个用户、每一个组、每一项权限。标签写着"一个保险库",API 却不这么认为。权限范围必须由系统强制执行,而不是靠标签声明。

密码学本身无懈可击。RFC 5054 SRP-6a、AES-256-GCM、常量时间比较、零知识证明。1Password 在密码学上做对了。做错的是罐子上的标签。

本月,Token Security 的两名工程师花了三天时间逆向分析 1Password 的专有 SRP 认证协议。他们并不是在找漏洞。他们原本只是想用一个 Python 客户端替换 SCIM bridge,用于非人类身份工具。他们发现的,是凭证声称自己能做什么与它实际能做什么之间的差距 [1][2]。

一个限定在单个保险库、仅有读取权限的服务账户令牌,可以列出组织中的每一个用户。每一个组。每一项组成员关系。每一个保险库在所有保险库上的权限。姓名、邮箱、状态、最近一次认证时间戳。令牌的标签写着"一个保险库"。API 的回答却并非如此 [1]。

1Password 已确认。该行为属于设计如此。细粒度权限范围已在路线图上,但没有明确日期 [2]。

令牌实际能触及什么

Gil Portnoy 与 Henry 在为 Token Security 撰写的报告中记录了五个 API 端点,一个"单保险库"服务账户令牌可以完整成功地调用它们 [1]:

/api/v2/users 返回组织中的每一个用户:UUID、姓名、邮箱、状态、类型、最近一次认证时间戳。/api/v1/groups 返回每一个组及其权限和状态。用于组成员关系、保险库用户与权限、保险库组的 CLI 命令全部返回实时数据。/api/v3/account 返回账户元数据。/api/v2/vault/{id}/vaultaccess 返回保险库访问信息。

这些端点没有一个被限定在该令牌被授予的那个保险库范围内。令牌被告知"读取一个保险库"。API 却给了它一张整个组织的地图 [1]。

更尖锐的一点是:这种枚举无法通过 1Password 的官方 SDK 完成。那条路径会返回 UNSUPPORTED 或 FORBIDDEN。它通过 CLI 的内部 API 起作用,而研究人员必须对其进行逆向分析。所谓"范围"只是客户端 SDK 层面的限制。底层凭证的权限是组织级读取。攻击者不会使用您的 SDK [1]。

研究人员用大约 420 行 Python 构建了这个客户端。五个 API 端点。完整的组织可见性。他们于 7 月 16 日发布了这份报告 [1]。

问题不在锁,而在钥匙串

研究人员在这一点上措辞谨慎。密码学确实很强。SRP 实现采用了 RFC 标准化的零知识证明:服务器永远看不到密码,客户端永远看不到盐值,每一次认证失败都返回相同的错误信息,攻击者得不到任何信息。1Password 记录了他们自己偏离标准的部分(包括把《Penny Lane》的一句披头士歌词埋进一个密码学常量中作为彩蛋),而这些偏离在安全上是中性的 [1]。

问题不在锁。而在于这把钥匙能打开什么。当一个凭证被标注为"限定在单个保险库"时,管理员会据此为智能体配置它,并相信爆炸半径很小。智能体拿到一个凭证。凭证却拿到了组织架构图。没有人希望如此,但也没有人能看到它正在发生 [1]。

当您把一个"限定范围"的令牌交给智能体时,智能体实际运行的范围是 API 真正强制执行的范围,而不是标签所描述的范围。如果智能体被攻陷——通过提示注入、被投毒的约定文件、供应链攻击,或任何基于文本的防御无法完全封堵的攻击途径——攻击者得到的不是一个保险库。而是组织拓扑:谁在哪个组,谁有权访问哪些保险库,每个人最近一次认证是什么时候。这就是入侵的侦察阶段,通过一次 API 调用即可交付 [1]。

文档所述范围与实际生效范围之间的差距,并非 1Password 独有。每一个凭证管理 API 都会做出管理员看不到的隐式授权决策。Token Security 所证明的是:这个差距是真实存在的、可度量的,并且只需一个周末的工作量和一个 Frida hook 就能利用 [1]。

为此而生的保险库有何不同

凭证的职责,是在它所处的环境中存活下来。如果一个"限定范围"的令牌可以悄无声息地映射您的组织,那么这个范围从来就不是真实的。它只是一个标签。

Clavitor 不会给凭证贴上标签然后寄望于它。智能体拿到一个明确命名的凭证,在调用发生的那一刻实时获取,注入到单个请求中,然后即刻消失。不存在可供攻击者复用的长期令牌。不存在一个藏在无人验证的范围标签背后的组织地图端点。保险库不会向智能体暴露枚举能力。智能体只能触及它被命名去触及的对象,仅此而已。

每一次访问都会记录到发起它的具体智能体上,记录在保险库侧,而不是智能体运行所在的端点上。如果某个令牌被攻陷,爆炸半径就是那一次调用的范围,而不是其背后的组织拓扑。

一个强制执行范围而非标注范围的保险库,其背后的原则:凭证管理十条法则

Clavitor (@clavitorai) 是为 AI 晻能体而建、也防备 AI 智能体的凭证保险库。clavitor.ai

来源

[1] Token Security(Gil Portnoy、Henry)— Reversing 1Password's Proprietary SRP Authentication Protocol — @TheTokenSec

[2] @TheTokenSec — 关于权限范围升级发现的 X 帖子,2026 年 7 月 16 日 — "1Password confirmed this is by design, to support vault-management workflows"