GCP - Understanding Domain-Wide Delegation

Support HackTricks

이 게시물은 https://www.hunters.security/en/blog/delefriend-a-newly-discovered-design-flaw-in-domain-wide-delegation-could-leave-google-workspace-vulnerable-for-takeover의 소개입니다. 더 많은 세부정보는 해당 링크를 참조하십시오.

Understanding Domain-Wide Delegation

Google Workspace의 Domain-Wide delegation은 Google Workspace Marketplace외부 앱 또는 내부 GCP Service Account와 같은 아이덴티티 객체가 사용자를 대신하여 Workspace 전반의 데이터에 접근할 수 있도록 합니다. 이 기능은 Google API 또는 사용자 가장이 필요한 서비스와 상호작용하는 앱에 필수적이며, 작업을 자동화하여 효율성을 높이고 인적 오류를 최소화합니다. OAuth 2.0을 사용하여 앱 개발자와 관리자는 개별 사용자 동의 없이 이러한 서비스 계정에 사용자 데이터 접근 권한을 부여할 수 있습니다. Google Workspace는 두 가지 주요 유형의 글로벌 위임 객체 아이덴티티 생성을 허용합니다:

  • GWS Applications: Workspace Marketplace의 애플리케이션은 위임된 아이덴티티로 설정될 수 있습니다. 각 Workspace 애플리케이션은 마켓플레이스에 제공되기 전에 Google의 검토를 거쳐 잠재적인 남용을 최소화합니다. 이는 남용의 위험을 완전히 제거하지는 않지만, 이러한 사건이 발생할 가능성을 크게 증가시킵니다.

Domain-Wide Delegation: Under the Hood

GCP Service Account가 Google Workspace의 다른 아이덴티티를 대신하여 Google API에 접근하는 방법은 다음과 같습니다:

  1. 아이덴티티가 JWT를 생성합니다: 아이덴티티는 서비스 계정의 개인 키( JSON 키 쌍 파일의 일부)를 사용하여 JWT에 서명합니다. 이 JWT는 서비스 계정, 가장할 대상 사용자 및 요청된 REST API에 대한 OAuth 범위에 대한 클레임을 포함합니다.

  2. 아이덴티티가 JWT를 사용하여 액세스 토큰을 요청합니다: 애플리케이션/사용자는 JWT를 사용하여 Google의 OAuth 2.0 서비스에서 액세스 토큰을 요청합니다. 요청에는 가장할 대상 사용자(사용자의 Workspace 이메일)와 요청된 액세스 범위도 포함됩니다.

  3. Google의 OAuth 2.0 서비스가 액세스 토큰을 반환합니다: 액세스 토큰은 지정된 범위에 대해 사용자를 대신하여 행동할 수 있는 서비스 계정의 권한을 나타냅니다. 이 토큰은 일반적으로 단기적이며 주기적으로 갱신해야 합니다(애플리케이션의 필요에 따라). JWT 토큰에 지정된 OAuth 범위는 유효성이 있으며 결과 액세스 토큰에 영향을 미친다는 것을 이해하는 것이 중요합니다. 예를 들어, 여러 범위를 가진 액세스 토큰은 여러 REST API 애플리케이션에 대해 유효성을 가집니다.

  4. 아이덴티티가 액세스 토큰을 사용하여 Google API를 호출합니다: 이제 관련 액세스 토큰을 사용하여 서비스는 필요한 REST API에 접근할 수 있습니다. 애플리케이션은 Google API를 대상으로 하는 HTTP 요청의 "Authorization" 헤더에 이 액세스 토큰을 사용합니다. 이러한 API는 토큰을 사용하여 가장된 아이덴티티를 확인하고 필요한 권한이 있는지 확인합니다.

  5. Google API가 요청된 데이터를 반환합니다: 액세스 토큰이 유효하고 서비스 계정이 적절한 권한을 가진 경우 Google API는 요청된 데이터를 반환합니다. 예를 들어, 다음 그림에서는 users.messages.list 메서드를 활용하여 대상 Workspace 사용자와 관련된 모든 Gmail 메시지 ID를 나열했습니다.

Support HackTricks

Last updated