AWS Cognito用户池中的用户属性篡改漏洞分析

本文详细分析了AWS Cognito用户池中存在的用户属性篡改漏洞,解释了攻击者如何利用默认权限配置篡改关键属性,并提供了相应的防御措施和Terraform修复方案。

AWS Cognito用户池中的用户属性篡改

背景介绍

Amazon Cognito是AWS提供的用户身份验证服务,主要包含两个组件:

  • 用户池:处理用户注册/登录并管理用户属性
  • 身份池:控制用户对其他AWS服务的访问权限

漏洞发现

在某Web平台中发现关键漏洞:平台使用custom:X_platform_user_id属性作为第三方平台X的用户标识符,但该属性可通过标准API直接修改。

攻击过程

  1. 获取用户访问令牌(JWT)
  2. 使用AWS CLI执行属性修改:
1
2
3
aws --region us-east-1 cognito-idp update-user-attributes \
--user-attributes "Name=custom:X_platform_user_id,Value=[攻击者ID]" \
--access-token [用户JWT]
  1. 平台信任被篡改的属性,导致显示其他用户数据

根本原因

AWS Cognito应用客户端默认对所有用户属性具备读写权限。新建应用集成时的默认配置如下图所示:

修复建议

安全审计建议

  • 检查Cognito JWT中的用户属性
  • 确认哪些属性可通过JWT直接修改
  • 评估平台对这些属性的信任程度

开发修复方案

  1. 通过Terraform显式设置属性权限:
1
2
3
4
5
6
7
resource "aws_cognito_user_pool_client" "client" {
  name = "secure_client"
  user_pool_id = aws_cognito_user_pool.pool.id
  
  read_attributes = ["email"]
  write_attributes = ["email"]
}
  1. 启用RequireAttributesVerifiedBeforeUpdate参数强制验证关键属性

实践实验室

作者提供了Terraform实验室环境供测试: https://github.com/doyensec/cloudsec-tidbits/

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计