GCP - Container Privesc
Tip
AWS 해킹 배우기 및 연습하기:
HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기:HackTricks Training GCP Red Team Expert (GRTE)
Azure 해킹 배우기 및 연습하기:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks 지원하기
- 구독 계획 확인하기!
- **💬 Discord 그룹 또는 텔레그램 그룹에 참여하거나 Twitter 🐦 @hacktricks_live를 팔로우하세요.
- HackTricks 및 HackTricks Cloud 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.
container
container.clusters.get
이 권한은 다음과 같은 방법으로 Kubernetes 클러스터의 자격 증명 정보를 수집할 수 있게 해줍니다:
Kubernetes 클러스터 자격 증명 가져오기
```bash gcloud container clusters get-credentials추가 권한이 없으면 자격 증명은 매우 기본적입니다. 리소스를 나열하기만 할 수 있지만, 환경의 잘못된 구성을 찾는 데 유용합니다.
Note
kubernetes clusters가 비공개로 구성되어 있을 수 있습니다, 이 경우 Internet에서 Kube-API server로의 접근이 차단됩니다.
이 권한이 없어도 클러스터에 접근할 수 있지만, 클러스터 정보를 사용해 자신의 kubectl config 파일을 생성해야 합니다. 새로 생성된 파일은 다음과 같습니다:
GKE 클러스터용 예제 kubectl config 파일
```yaml apiVersion: v1 clusters: - cluster: certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUVMRENDQXBTZ0F3SUJBZ0lRRzNaQmJTSVlzeVRPR1FYODRyNDF3REFOQmdrcWhraUc5dzBCQVFzRkFEQXYKTVMwd0t3WURWUVFERXlRMk9UQXhZVEZoWlMweE56ZGxMVFF5TkdZdE9HVmhOaTAzWVdFM01qVmhNR05tTkdFdwpJQmNOTWpJeE1qQTBNakl4T1RJMFdoZ1BNakExTWpFeE1qWXlNekU1TWpSYU1DOHhMVEFyQmdOVkJBTVRKRFk1Ck1ERmhNV0ZsTFRFM04yVXROREkwWmkwNFpXRTJMVGRoWVRjeU5XRXdZMlkwWVRDQ0FhSXdEUVlKS29aSWh2Y04KQVFFQkJRQURnZ0dQQURDQ0FZb0NnZ0dCQU00TWhGemJ3Y3VEQXhiNGt5WndrNEdGNXRHaTZmb0pydExUWkI4Rgo5TDM4a2V2SUVWTHpqVmtoSklpNllnSHg4SytBUHl4RHJQaEhXMk5PczFNMmpyUXJLSHV6M0dXUEtRUmtUWElRClBoMy9MMDVtbURwRGxQK3hKdzI2SFFqdkE2Zy84MFNLakZjRXdKRVhZbkNMMy8yaFBFMzdxN3hZbktwTWdKVWYKVnoxOVhwNEhvbURvOEhUN2JXUTJKWTVESVZPTWNpbDhkdDZQd3FUYmlLNjJoQzNRTHozNzNIbFZxaiszNy90RgpmMmVwUUdFOG90a0VVOFlHQ3FsRTdzaVllWEFqbUQ4bFZENVc5dk1RNXJ0TW8vRHBTVGNxRVZUSzJQWk1rc0hyCmMwbGVPTS9LeXhnaS93TlBRdW5oQ2hnRUJIZTVzRmNxdmRLQ1pmUFovZVI1Qk0vc0w1WFNmTE9sWWJLa2xFL1YKNFBLNHRMVmpiYVg1VU9zMUZIVXMrL3IyL1BKQ2hJTkRaVTV2VjU0L1c5NWk4RnJZaUpEYUVGN0pveXJvUGNuMwpmTmNjQ2x1eGpOY1NsZ01ISGZKRzZqb0FXLzB0b2U3ek05RHlQOFh3NW44Zm5lQm5aVTFnYXNKREZIYVlZbXpGCitoQzFETmVaWXNibWNxOGVPVG9LOFBKRjZ3SURBUUFCbzBJd1FEQU9CZ05WSFE4QkFmOEVCQU1DQWdRd0R3WUQKVlIwVEFRSC9CQVV3QXdFQi96QWRCZ05WSFE0RUZnUVU5UkhvQXlxY3RWSDVIcmhQZ1BjYzF6Sm9kWFV3RFFZSgpLb1pJaHZjTkFRRUxCUUFEZ2dHQkFLbnp3VEx0QlJBVE1KRVB4TlBNbmU2UUNqZDJZTDgxcC9oeVc1eWpYb2w5CllkMTRRNFVlVUJJVXI0QmJadzl0LzRBQ3ZlYUttVENaRCswZ2wyNXVzNzB3VlFvZCtleVhEK2I1RFBwUUR3Z1gKbkJLcFFCY1NEMkpvZ29tT3M3U1lPdWVQUHNrODVvdWEwREpXLytQRkY1WU5ublc3Z1VLT2hNZEtKcnhuYUVGZAprVVl1TVdPT0d4U29qVndmNUsyOVNCbGJ5YXhDNS9tOWkxSUtXV2piWnZPN0s4TTlYLytkcDVSMVJobDZOSVNqCi91SmQ3TDF2R0crSjNlSjZneGs4U2g2L28yRnhxZWFNdDladWw4MFk4STBZaGxXVmlnSFMwZmVBUU1NSzUrNzkKNmozOWtTZHFBYlhPaUVOMzduOWp2dVlNN1ZvQzlNUk1oYUNyQVNhR2ZqWEhtQThCdlIyQW5iQThTVGpQKzlSMQp6VWRpK3dsZ0V4bnFvVFpBcUVHRktuUTlQcjZDaDYvR0xWWStqYXhuR3lyUHFPYlpNZTVXUDFOUGs4NkxHSlhCCjc1elFvanEyRUpxanBNSjgxT0gzSkxOeXRTdmt4UDFwYklxTzV4QUV0OWxRMjh4N28vbnRuaWh1WmR6M0lCRU8KODdjMDdPRGxYNUJQd0hIdzZtKzZjUT09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K server: https://34.123.141.28 name: gke_security-devbox_us-central1_autopilot-cluster-1 contexts: - context: cluster: gke_security-devbox_us-central1_autopilot-cluster-1 user: gke_security-devbox_us-central1_autopilot-cluster-1 name: gke_security-devbox_us-central1_autopilot-cluster-1 current-context: gke_security-devbox_us-central1_autopilot-cluster-1 kind: Config preferences: {} users: - name: gke_security-devbox_us-central1_autopilot-cluster-1 user: auth-provider: config: access-token:container.roles.escalate | container.clusterRoles.escalate
Kubernetes는 기본적으로 주체(principal)가 자신이 보유한 권한보다 더 많은 권한을 가진 Roles 및 ClusterRoles를 생성하거나 업데이트하지 못하도록 차단합니다. 그러나 해당 권한을 가진 GCP 주체는 자신이 가진 것보다 더 많은 권한을 가진 Roles/ClusterRoles를 생성/업데이트할 수 있어, Kubernetes의 이러한 보호를 우회할 수 있습니다.
container.roles.create 및/또는 container.roles.update 혹은 container.clusterRoles.create 및/또는 container.clusterRoles.update 는 각각 이러한 권한 상승 행위를 수행하는 데 또한 필요합니다.
container.roles.bind | container.clusterRoles.bind
Kubernetes는 기본적으로 주체가 자신이 가진 권한보다 더 많은 권한을 부여하기 위해 RoleBindings 및 ClusterRoleBindings을 생성하거나 업데이트하지 못하도록 차단합니다. 그러나 해당 권한을 가진 GCP 주체는 자신이 가진 것보다 더 많은 권한을 가진 RoleBindings/ClusterRoleBindings를 생성/업데이트할 수 있어 Kubernetes의 이러한 보호를 우회할 수 있습니다.
container.roleBindings.create 및/또는 container.roleBindings.update 혹은 container.clusterRoleBindings.create 및/또는 container.clusterRoleBindings.update 는 각각 이러한 권한 상승 행위를 수행하는 데 또한 필요합니다.
container.cronJobs.create | container.cronJobs.update | container.daemonSets.create | container.daemonSets.update | container.deployments.create | container.deployments.update | container.jobs.create | container.jobs.update | container.pods.create | container.pods.update | container.replicaSets.create | container.replicaSets.update | container.replicationControllers.create | container.replicationControllers.update | container.scheduledJobs.create | container.scheduledJobs.update | container.statefulSets.create | container.statefulSets.update
이 권한들은 모두 pod를 정의할 수 있는 리소스를 생성하거나 업데이트할 수 있게 해줍니다. pod를 정의할 때 연결될 SA와 실행할 이미지를 지정할 수 있으므로, SA의 토큰을 당신의 서버로 exfiltrate 하는 이미지를 실행해 어떤 서비스 계정으로도 권한 상승할 수 있습니다.
자세한 내용은 확인하세요:
현재 우리는 GCP 환경에 있으므로, metadata 서비스에서 nodepool GCP SA를 얻어 GCP에서 권한을 상승시킬 수도 있습니다(기본적으로 compute SA가 사용됩니다).
container.secrets.get | container.secrets.list
As 이 페이지에 설명된 것처럼, 이 권한들로 kubernetes의 모든 SA 토큰을 읽을 수 있으므로 해당 SA로 권한 상승할 수 있습니다.
container.pods.exec
이 권한으로 pods에 exec할 수 있으며, 이는 pods에서 실행 중인 모든 Kubernetes SA에 접근해 K8s 내에서 권한을 상승시킬 수 있게 합니다. 또한 NodePool의 GCP Service Account를 훔쳐 GCP에서 권한을 상승시킬 수도 있습니다.
container.pods.portForward
As explained in this page, 이 권한들로 pods에서 실행 중인 로컬 서비스에 접근할 수 있으며 이는 Kubernetes에서 권한 상승을 허용할 수 있습니다 (그리고 메타데이터 서비스와 통신할 수 있다면 GCP에서도 권한 상승이 가능할 수 있습니다).
container.serviceAccounts.createToken
권한 이름 때문에 K8s Service Accounts의 토큰을 생성할 수 있어 Kubernetes 내부의 어떤 SA로든 privesc할 수 있을 것처럼 보입니다. 그러나 이를 사용하기 위한 API 엔드포인트를 찾지 못했습니다. 찾으시면 알려주세요.
container.mutatingWebhookConfigurations.create | container.mutatingWebhookConfigurations.update
이 권한들은 Kubernetes에서 권한 상승을 허용할 수 있지만, 더 가능성 높은 시나리오는 이를 남용해 클러스터에 지속성(persistence)을 확보하는 것입니다.
자세한 내용은 이 링크를 따라가세요.
Tip
AWS 해킹 배우기 및 연습하기:
HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기:HackTricks Training GCP Red Team Expert (GRTE)
Azure 해킹 배우기 및 연습하기:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks 지원하기
- 구독 계획 확인하기!
- **💬 Discord 그룹 또는 텔레그램 그룹에 참여하거나 Twitter 🐦 @hacktricks_live를 팔로우하세요.
- HackTricks 및 HackTricks Cloud 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.
HackTricks Cloud

