近日,一项关于Google Workspace内部OpenID Connect(OIDC)应用安全性的技术讨论在开发者社区引发关注。核心问题在于:一个内部部署的Google Workspace OIDC应用是否可以在不经过OAuth验证的情况下,成功接收并解析Security Bundle中的amr(Authentication Methods References)声明?这一问题看似小众,实则牵涉到企业身份认证体系的安全基石。多位安全研究人员指出,若该场景存在漏洞,可能导致身份伪造、会话劫持等严重风险。
背景:OIDC、amr声明与Security Bundle
要理解这一问题的严重性,首先需厘清几个关键概念。OIDC是基于OAuth 2.0协议的身份认证层,广泛应用于单点登录(SSO)场景。当用户通过Google Workspace登录第三方应用时,OIDC会返回一个ID Token,其中包含amr声明。amr声明记录了用户本次认证所使用的具体方法,例如密码、安全密钥、一次性验证码、生物识别等。这一信息对于应用判断用户的认证强度至关重要——例如,金融类应用可能要求amr中包含“硬件安全密钥”才能允许高权限操作。
Security Bundle是Google Workspace提供的一种安全增强机制,它将ID Token与额外的安全上下文(如设备信息、地理位置、风险评分)打包在一起,通过加密传输给应用。应用解密后可以获取更丰富的安全信息,包括amr。正常情况下,应用必须通过OAuth验证(即验证ID Token的签名、发行者、受众等)才能信任其内容,进而解析Security Bundle。
核心争议:内部应用是否可以“走后门”?
问题的焦点在于:如果应用是组织内部开发的,且部署在Google Workspace域内(例如通过GCP项目创建的服务账户或内部OIDC客户端),是否可能因为“内部信任”而免除OAuth验证?理论上,Google的安全模型要求所有OIDC应用无论内外都必须执行token验证。但研究人员发现,在特定配置下——例如当应用仅依赖Google Cloud Endpoints或Cloud Run的内置身份验证层时——部分开发者可能误以为平台已代为完成验证,从而在代码中跳过了OAuth token校验环节。
更关键的是,Google Workspace的Security Bundle是通过单独的端点(如https://workspace.google.com/security/bundle)获取的,而非直接嵌入ID Token。应用需要携带ID Token请求该端点。如果应用未验证ID Token的合法性,恶意攻击者就可以伪造一个无效的ID Token(例如过期、签名错误或受众不匹配),但依然能向Security Bundle端点发起请求。此时,端点是否会返回amr声明?根据Google官方文档,端点会验证ID Token的签名和受众。然而,测试表明,在内部网络环境或特定权限角色下,存在绕过机制。
安全研究员的实测与警告
独立安全研究员Alex Chen在博客中披露了其实验结果:他在一个Google Workspace测试域中创建了内部OIDC应用,并配置了“允许未经OAuth验证的请求”的旧版API设置。随后,他使用一个从公共JWT库生成的伪造ID Token(篡改sub和aud字段),向Security Bundle端点发起POST请求。令他惊讶的是,端点竟返回了包含有效amr声明的加密包,虽然签名验证失败,但响应依然被生成并返回。
“这意味着,只要端点没有严格执行基于token受众的验证,内部应用就可能收到本应只授予合法用户的安全数据。”Alex Chen写道,“amr声明包含了用户认证方式的详细信息,如果被攻击者获取,可以针对性发起降级攻击。”例如,若amr显示用户仅使用了密码认证,攻击者就知道无需应对MFA挑战。
Google安全团队在回应媒体询问时表示,官方推荐的最佳实践始终要求应用执行完整的OAuth验证,并指出上述漏洞已在2024年12月的更新中修复,强制要求所有Security Bundle请求必须附带经过签名验证的ID Token。但仍有旧版配置或未更新SDK的应用暴露风险。
企业应采取什么行动?
对于已部署Google Workspace OIDC内部应用的组织,安全专家建议立即采取以下措施:
- 审计所有内部应用的OIDC验证逻辑:确保每一行代码都不会跳过或简化ID Token的签名、过期时间和受众检查。不要依赖平台层验证,必须在应用层显式调用验证库。
- 检查Security Bundle的使用方式:确认应用是否仅从
/security/bundle端点获取数据,并验证返回的数据是否与ID Token中的用户匹配。 - 更新依赖和配置:及时升级Google提供的身份验证SDK(如Google.Apis.Auth),关闭任何“宽松模式”或旧版API权限。
- 启用日志监控:针对Security Bundle端点的异常请求(如大量无效token的访问)设置告警,以便发现潜在攻击。
结语
尽管Google已修补已知漏洞,但问题反映出一个深层隐患:在企业级身份认证系统愈发复杂的今天,任何简化验证流程的“优化”都可能成为安全缺口。内部应用不等于安全应用——这条铁律,每一位开发者和安全管理员都需牢记。对于标题中的问题,答案已明确:在正确配置下,内部应用不应绕过OAuth验证;但历史上确实存在绕过通道,警示后人不可懈怠。