AWS Cognito用户池中的用户属性篡改
背景介绍
Amazon Cognito是AWS提供的用户身份验证服务,主要包含两个组件:
- 用户池:处理用户注册/登录并管理用户属性
- 身份池:控制用户对其他AWS服务的访问权限
漏洞发现
在某Web平台中发现关键漏洞:平台使用custom:X_platform_user_id
属性作为第三方平台X的用户标识符,但该属性可通过标准API直接修改。
攻击过程
- 获取用户访问令牌(JWT)
- 使用AWS CLI执行属性修改:
|
|
- 平台信任被篡改的属性,导致显示其他用户数据
根本原因
AWS Cognito应用客户端默认对所有用户属性具备读写权限。新建应用集成时的默认配置如下图所示:
修复建议
安全审计建议
- 检查Cognito JWT中的用户属性
- 确认哪些属性可通过JWT直接修改
- 评估平台对这些属性的信任程度
开发修复方案
- 通过Terraform显式设置属性权限:
|
|
- 启用
RequireAttributesVerifiedBeforeUpdate
参数强制验证关键属性
实践实验室
作者提供了Terraform实验室环境供测试: https://github.com/doyensec/cloudsec-tidbits/