AWS - Cognito Privesc
Cognito
有关 Cognito 的更多信息,请查看:
从身份池收集凭证
由于 Cognito 可以向 已认证 和 未认证 用户 授予 IAM 角色凭证,如果您找到应用程序的 身份池 ID(应该是硬编码在其中),您可以获得新的凭证,从而实现权限提升(在您可能之前没有任何凭证的 AWS 账户内)。
有关更多信息,请 查看此页面。
潜在影响: 直接权限提升到附加给未认证用户的服务角色(可能也包括附加给已认证用户的角色)。
cognito-identity:SetIdentityPoolRoles
, iam:PassRole
cognito-identity:SetIdentityPoolRoles
, iam:PassRole
通过此权限,您可以 授予任何 Cognito 角色 给 Cognito 应用的已认证/未认证用户。
如果 Cognito 应用 没有启用未认证用户,您可能还需要权限 cognito-identity:UpdateIdentityPool
来启用它。
潜在影响: 直接提升到任何 Cognito 角色。
cognito-identity:update-identity-pool
cognito-identity:update-identity-pool
拥有此权限的攻击者可以设置例如一个在其控制下的 Cognito 用户池或任何其他身份提供者,在那里他可以登录 以访问此 Cognito 身份池。然后,只需在该用户提供者上 登录 就会 允许他访问身份池中配置的认证角色。
这也可以滥用此权限以允许基本身份验证:
潜在影响:危害身份池中配置的经过身份验证的 IAM 角色。
cognito-idp:AdminAddUserToGroup
cognito-idp:AdminAddUserToGroup
此权限允许将 Cognito 用户添加到 Cognito 组,因此攻击者可以滥用此权限将其控制下的用户添加到具有更好权限或不同 IAM 角色的其他组中:
潜在影响: 提升权限到其他Cognito组和附加到用户池组的IAM角色。
(cognito-idp:CreateGroup
| cognito-idp:UpdateGroup
), iam:PassRole
cognito-idp:CreateGroup
| cognito-idp:UpdateGroup
), iam:PassRole
拥有这些权限的攻击者可以创建/更新组,并使用被攻陷的Cognito身份提供者可以使用的每个IAM角色,使被攻陷的用户成为该组的一部分,从而访问所有这些角色:
潜在影响: 提升到其他Cognito IAM角色。
cognito-idp:AdminConfirmSignUp
cognito-idp:AdminConfirmSignUp
此权限允许验证注册。默认情况下,任何人都可以登录Cognito应用程序,如果不加限制,用户可以使用任何数据创建帐户并通过此权限进行验证。
潜在影响: 如果您可以注册新用户,则对经过身份验证的用户的身份池 IAM 角色的间接权限提升。能够确认任何帐户会导致对其他应用功能的间接权限提升。
cognito-idp:AdminCreateUser
cognito-idp:AdminCreateUser
此权限将允许攻击者在用户池中创建新用户。新用户被创建为启用状态,但需要更改其密码。
潜在影响: 直接提升到身份池 IAM 角色的认证用户权限。间接提升到其他应用功能,能够创建任何用户。
cognito-idp:AdminEnableUser
cognito-idp:AdminEnableUser
此权限可以在非常边缘的情况下提供帮助,攻击者发现了一个禁用用户的凭证,并且他需要重新启用它。
潜在影响: 对于经过身份验证的用户,间接提升到身份池 IAM 角色和用户权限,如果攻击者拥有禁用用户的凭据。
cognito-idp:AdminInitiateAuth
, cognito-idp:AdminRespondToAuthChallenge
cognito-idp:AdminInitiateAuth
, cognito-idp:AdminRespondToAuthChallenge
此权限允许使用 方法 ADMIN_USER_PASSWORD_AUTH** 登录。** 有关更多信息,请访问链接。
cognito-idp:AdminSetUserPassword
cognito-idp:AdminSetUserPassword
此权限将允许攻击者 更改任何用户的密码,使其能够冒充任何用户(不启用 MFA 的用户)。
潜在影响: 直接的权限提升,可能影响任何用户,因此可以访问每个用户所属于的所有组以及访问身份池认证的 IAM 角色。
cognito-idp:AdminSetUserSettings
| cognito-idp:SetUserMFAPreference
| cognito-idp:SetUserPoolMfaConfig
| cognito-idp:UpdateUserPool
cognito-idp:AdminSetUserSettings
| cognito-idp:SetUserMFAPreference
| cognito-idp:SetUserPoolMfaConfig
| cognito-idp:UpdateUserPool
AdminSetUserSettings:攻击者可能会滥用此权限,将其控制的手机设置为 用户的 SMS MFA。
SetUserMFAPreference: 类似于前一个权限,此权限可用于设置用户的 MFA 偏好,以绕过 MFA 保护。
SetUserPoolMfaConfig: 类似于前一个权限,此权限可用于设置用户池的 MFA 首选项,以绕过 MFA 保护。
UpdateUserPool: 也可以更新用户池以更改 MFA 策略。 在这里查看 cli。
Potential Impact: 间接的权限提升,可能针对攻击者知道凭据的任何用户,这可能允许绕过 MFA 保护。
cognito-idp:AdminUpdateUserAttributes
cognito-idp:AdminUpdateUserAttributes
拥有此权限的攻击者可以更改其控制下用户的电子邮件或电话号码或任何其他属性,以尝试在基础应用程序中获得更多权限。 这允许更改电子邮件或电话号码并将其设置为已验证。
潜在影响: 通过使用 Cognito 用户池在基础应用程序中可能间接提升权限,基于用户属性授予权限。
cognito-idp:CreateUserPoolClient
| cognito-idp:UpdateUserPoolClient
cognito-idp:CreateUserPoolClient
| cognito-idp:UpdateUserPoolClient
拥有此权限的攻击者可以创建一个新的用户池客户端,其限制低于现有的池客户端。例如,新的客户端可以允许任何类型的方法进行身份验证,没有任何秘密,禁用令牌撤销,允许令牌有效期更长...
如果不是创建一个新客户端,而是修改一个现有的客户端,也可以做到这一点。
在 命令行(或 更新一个)中,您可以查看所有选项,检查一下!
潜在影响: 通过创建一个放宽安全措施的新客户端,可能间接提升对用户池使用的身份池授权用户的权限,使攻击者能够使用他能够创建的用户登录。
cognito-idp:CreateUserImportJob
| cognito-idp:StartUserImportJob
cognito-idp:CreateUserImportJob
| cognito-idp:StartUserImportJob
攻击者可以利用此权限通过上传包含新用户的csv文件来创建用户。
(在创建新的导入作业的情况下,您可能还需要 iam passrole 权限,我还没有测试过)。
潜在影响: 直接提升到经过身份验证的用户的身份池 IAM 角色。间接提升到其他应用功能,能够创建任何用户。
cognito-idp:CreateIdentityProvider
| cognito-idp:UpdateIdentityProvider
cognito-idp:CreateIdentityProvider
| cognito-idp:UpdateIdentityProvider
攻击者可以创建一个新的身份提供者,从而能够通过该提供者登录。
潜在影响: 直接提升到身份池 IAM 角色的认证用户。间接提升到其他应用功能,能够创建任何用户。
cognito-sync:* 分析
这是 Cognito 身份池角色中默认的非常常见的权限。即使权限中的通配符看起来总是不好(特别是来自 AWS),给定的权限从攻击者的角度来看并不是特别有用。
此权限允许读取身份池中的用户信息和身份 ID(这不是敏感信息)。 身份 ID 可能有 数据集 分配给它们,这些是会话的信息(AWS 将其定义为 保存的游戏)。这可能包含某种敏感信息(但概率相当低)。您可以在 枚举页面 找到如何访问这些信息。
攻击者还可以使用这些权限来 注册自己到一个 Cognito 流,以发布这些数据集上的更改 或 在 Cognito 事件上触发的 lambda。我没有见过这种用法,我也不期望这里有敏感信息,但这并不是不可能的。
自动化工具
Pacu,AWS 利用框架,现在包括 "cognito__enum" 和 "cognito__attack" 模块,这些模块自动枚举账户中的所有 Cognito 资产并标记弱配置、用于访问控制的用户属性等,同时还自动创建用户(包括 MFA 支持)和基于可修改自定义属性、可用身份池凭证、可假设角色的 ID 令牌等的权限提升。
有关模块功能的描述,请参见 博客文章 的第 2 部分。有关安装说明,请参见主 Pacu 页面。
用法
示例 cognito__attack 用法,尝试用户创建和针对给定身份池和用户池客户端的所有权限提升向量:
示例 cognito__enum 用法,以收集当前 AWS 账户中可见的所有用户池、用户池客户端、身份池、用户等:
Cognito Scanner 是一个用 Python 编写的 CLI 工具,实施对 Cognito 的不同攻击,包括权限提升。
安装
使用
有关更多信息,请查看 https://github.com/padok-team/cognito-scanner
Last updated