AWS - Cognito Privesc
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Cognito에 대한 자세한 정보는 다음을 확인하세요:
AWS - Cognito EnumCognito는 인증된 및 비인증된 사용자 모두에게 IAM 역할 자격 증명을 부여할 수 있으므로, 애플리케이션의 Identity Pool ID를 찾으면 (애플리케이션에 하드코딩되어 있어야 함) 새로운 자격 증명을 얻을 수 있으며, 따라서 권한 상승이 가능합니다 (이전에 자격 증명이 없었던 AWS 계정 내에서).
자세한 정보는 이 페이지를 확인하세요.
잠재적 영향: 비인증 사용자에게 연결된 서비스 역할로의 직접적인 권한 상승 (아마도 인증 사용자에게 연결된 역할에도).
cognito-identity:SetIdentityPoolRoles
, iam:PassRole
이 권한을 사용하면 Cognito 앱의 인증된/비인증된 사용자에게 모든 Cognito 역할을 부여할 수 있습니다.
If the cognito app unauthenticated users가 활성화되어 있지 않다면 cognito-identity:UpdateIdentityPool
권한이 필요할 수 있습니다.
잠재적 영향: 모든 cognito 역할에 대한 직접적인 권한 상승.
cognito-identity:update-identity-pool
이 권한을 가진 공격자는 예를 들어 자신의 제어 하에 있는 Cognito 사용자 풀 또는 로그인할 수 있는 다른 신원 제공자를 설정할 수 있습니다. 그런 다음, 해당 사용자 제공자에서 로그인하면 Identity Pool에서 구성된 인증된 역할에 접근할 수 있게 됩니다.
이 권한을 악용하여 기본 인증을 허용하는 것도 가능합니다:
잠재적 영향: 아이덴티티 풀 내에서 구성된 인증된 IAM 역할이 손상됩니다.
cognito-idp:AdminAddUserToGroup
이 권한은 Cognito 사용자를 Cognito 그룹에 추가할 수 있게 해줍니다. 따라서 공격자는 이 권한을 악용하여 자신의 통제 하에 있는 사용자를 더 나은 권한이나 다른 IAM 역할이 있는 그룹에 추가할 수 있습니다.
잠재적 영향: 다른 Cognito 그룹 및 사용자 풀 그룹에 연결된 IAM 역할로의 권한 상승.
cognito-idp:CreateGroup
| cognito-idp:UpdateGroup
), iam:PassRole
이 권한을 가진 공격자는 손상된 Cognito ID 공급자에서 사용할 수 있는 모든 IAM 역할로 그룹을 생성/업데이트하고 손상된 사용자를 그룹의 일원으로 만들어 모든 역할에 접근할 수 있습니다:
잠재적 영향: 다른 Cognito IAM 역할로의 권한 상승.
cognito-idp:AdminConfirmSignUp
이 권한은 가입을 확인할 수 있게 해줍니다. 기본적으로 누구나 Cognito 애플리케이션에 로그인할 수 있으며, 이를 방치하면 사용자가 임의의 데이터로 계정을 생성하고 이 권한으로 확인할 수 있습니다.
잠재적 영향: 새로운 사용자를 등록할 수 있는 경우 인증된 사용자에 대한 ID 풀 IAM 역할로의 간접적인 권한 상승. 모든 계정을 확인할 수 있는 다른 앱 기능에 대한 간접적인 권한 상승.
cognito-idp:AdminCreateUser
이 권한은 공격자가 사용자 풀 내에 새로운 사용자를 생성할 수 있도록 허용합니다. 새로운 사용자는 활성화된 상태로 생성되지만 비밀번호를 변경해야 합니다.
잠재적 영향: 인증된 사용자에 대한 ID 풀 IAM 역할로의 직접적인 권한 상승. 모든 사용자를 생성할 수 있는 다른 앱 기능에 대한 간접적인 권한 상승.
cognito-idp:AdminEnableUser
이 권한은 공격자가 비활성화된 사용자의 자격 증명을 발견하고 다시 활성화해야 하는 매우 극단적인 경우에 도움이 될 수 있습니다.
잠재적 영향: 공격자가 비활성 사용자에 대한 자격 증명을 가지고 있다면 인증된 사용자의 ID 풀 IAM 역할 및 사용자 권한에 대한 간접적인 권한 상승.
cognito-idp:AdminInitiateAuth
, cognito-idp:AdminRespondToAuthChallenge
이 권한은 ADMIN_USER_PASSWORD_AUTH** 방법으로 로그인할 수 있게 해줍니다.** 더 많은 정보는 링크를 따라가세요.
cognito-idp:AdminSetUserPassword
이 권한은 공격자가 모든 사용자의 비밀번호를 변경할 수 있게 해주며, 이를 통해 MFA가 활성화되지 않은 사용자를 가장할 수 있게 됩니다.
잠재적 영향: 직접적인 권한 상승으로 잠재적으로 모든 사용자에게 접근할 수 있으며, 각 사용자가 속한 모든 그룹에 대한 접근과 Identity Pool 인증된 IAM 역할에 대한 접근이 가능합니다.
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 사용자 풀을 사용하는 기본 애플리케이션에서 잠재적인 간접 권한 상승.
cognito-idp:CreateUserPoolClient
| cognito-idp:UpdateUserPoolClient
이 권한을 가진 공격자는 기존 풀 클라이언트보다 제한이 덜한 새로운 사용자 풀 클라이언트를 생성할 수 있습니다. 예를 들어, 새로운 클라이언트는 인증을 위한 모든 종류의 방법을 허용하고, 비밀이 없으며, 토큰 폐기를 비활성화하고, 토큰이 더 긴 기간 동안 유효하도록 허용할 수 있습니다...
새로운 클라이언트를 생성하는 대신 기존 클라이언트를 수정해도 동일한 작업을 수행할 수 있습니다.
명령줄 (또는 업데이트)에서 모든 옵션을 확인할 수 있습니다. 확인해 보세요!
Potential Impact: 잠재적인 간접적인 권한 상승은 사용자 풀에 의해 사용되는 Identity Pool의 권한 있는 사용자에게 영향을 미치며, 보안 조치를 완화하는 새로운 클라이언트를 생성하여 공격자가 자신이 생성할 수 있는 사용자로 로그인할 수 있게 합니다.
cognito-idp:CreateUserImportJob
| cognito-idp:StartUserImportJob
공격자는 이 권한을 악용하여 새로운 사용자가 포함된 csv 파일을 업로드하여 사용자를 생성할 수 있습니다.
(새로운 가져오기 작업을 생성하는 경우 iam passrole 권한이 필요할 수 있습니다. 아직 테스트하지 않았습니다).
잠재적 영향: 인증된 사용자에 대한 ID 풀 IAM 역할로의 직접적인 권한 상승. 모든 사용자를 생성할 수 있는 다른 앱 기능에 대한 간접적인 권한 상승.
cognito-idp:CreateIdentityProvider
| cognito-idp:UpdateIdentityProvider
공격자는 새로운 ID 공급자를 생성하여 이 공급자를 통해 로그인할 수 있습니다.
Potential Impact: 인증된 사용자에 대한 아이덴티티 풀 IAM 역할로의 직접적인 권한 상승. 사용자를 생성할 수 있는 다른 앱 기능에 대한 간접적인 권한 상승.
이것은 Cognito 아이덴티티 풀의 역할에서 기본적으로 매우 일반적인 권한입니다. 권한에 와일드카드가 있는 것은 항상 좋지 않게 보이지만 (특히 AWS에서 오는 경우), 주어진 권한은 공격자의 관점에서 그리 유용하지 않습니다.
이 권한은 아이덴티티 풀의 사용자 정보와 아이덴티티 ID를 읽을 수 있게 해줍니다 (이는 민감한 정보가 아닙니다). 아이덴티티 ID는 세션의 정보인 데이터 세트가 할당될 수 있으며 (AWS는 이를 저장된 게임으로 정의합니다), 이 데이터 세트에 민감한 정보가 포함될 가능성이 있지만 (확률은 매우 낮습니다). 이 정보를 액세스하는 방법은 열거 페이지에서 확인할 수 있습니다.
공격자는 이러한 권한을 사용하여 이 데이터 세트에서 변경 사항을 게시하는 Cognito 스트림에 자신을 등록하거나 Cognito 이벤트에서 트리거되는 람다를 사용할 수 있습니다. 나는 이것이 사용되는 것을 본 적이 없으며, 여기서 민감한 정보가 있을 것이라고 기대하지 않지만, 불가능한 것은 아닙니다.
Pacu, AWS 악용 프레임워크는 이제 계정의 모든 Cognito 자산을 열거하고 약한 구성, 액세스 제어에 사용되는 사용자 속성 등을 플래그하고, 사용자 생성(여기에는 MFA 지원 포함) 및 수정 가능한 사용자 정의 속성, 사용 가능한 아이덴티티 풀 자격 증명, ID 토큰에서 가정 가능한 역할에 기반한 권한 상승을 자동화하는 "cognito__enum" 및 "cognito__attack" 모듈을 포함합니다.
모듈 기능에 대한 설명은 블로그 게시물 2부를 참조하십시오. 설치 지침은 주요 Pacu 페이지를 참조하십시오.
주어진 아이덴티티 풀 및 사용자 풀 클라이언트에 대한 사용자 생성 및 모든 권한 상승 벡터를 시도하기 위한 샘플 cognito__attack 사용법:
샘플 cognito__enum 사용법으로 현재 AWS 계정에서 볼 수 있는 모든 사용자 풀, 사용자 풀 클라이언트, 아이덴티티 풀, 사용자 등을 수집합니다:
Cognito Scanner 는 privesc 상승을 포함하여 Cognito에 대한 다양한 공격을 구현하는 파이썬 CLI 도구입니다.
더 많은 정보는 https://github.com/padok-team/cognito-scanner에서 확인하세요.
AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE) GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE)