GCP - Container 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)
container.clusters.get
이 권한은 Kubernetes 클러스터에 대한 자격 증명을 수집할 수 있게 해줍니다.
추가 권한 없이 자격 증명은 기본적이며 일부 리소스를 나열할 수 있습니다, 그러나 이는 환경에서 잘못 구성된 부분을 찾는 데 유용합니다.
쿠버네티스 클러스터가 비공식적으로 구성될 수 있습니다. 이는 인터넷에서 Kube-API 서버에 대한 접근을 허용하지 않습니다.
이 권한이 없더라도 클러스터에 접근할 수 있지만, 클러스터 정보를 포함한 자신의 kubectl 구성 파일을 생성해야 합니다. 새로 생성된 파일은 다음과 같습니다:
container.roles.escalate
| container.clusterRoles.escalate
Kubernetes는 기본적으로 주체가 더 많은 권한을 가진 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/ClusterRolesBindings를 생성/업데이트할 수 있어, 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의 토큰을 서버로 유출하는 이미지를 실행할 수 있어, 어떤 서비스 계정으로도 권한 상승이 가능합니다. 자세한 정보는 확인하세요:
GCP 환경에 있으므로, 메타데이터 서비스에서 nodepool GCP SA를 가져오고 GCP에서 권한을 상승시킬 수 있습니다 (기본적으로 컴퓨트 SA가 사용됩니다).
container.secrets.get
| container.secrets.list
이 페이지에서 설명한 바와 같이 이 권한으로 모든 Kubernetes의 SA의 토큰을 읽을 수 있어, 이들로 권한을 상승시킬 수 있습니다.
container.pods.exec
이 권한으로 pod에 exec할 수 있어, Kubernetes SAs에 접근하여 K8s 내에서 권한을 상승시킬 수 있으며, 또한 NodePool의 GCP 서비스 계정을 탈취하여 GCP에서 권한을 상승시킬 수 있습니다.
container.pods.portForward
이 페이지에서 설명한 바와 같이 이 권한으로 pod에서 실행 중인 로컬 서비스에 접근할 수 있어, Kubernetes에서 권한을 상승시킬 수 있습니다 (그리고 GCP에서 메타데이터 서비스와 통신할 수 있다면).
container.serviceAccounts.createToken
권한의 이름 때문에, K8s 서비스 계정의 토큰을 생성할 수 있을 것처럼 보입니다. 따라서 Kubernetes 내의 어떤 SA로도 권한 상승이 가능할 것입니다. 그러나 이를 사용할 API 엔드포인트를 찾을 수 없으니, 발견하면 알려주세요.
container.mutatingWebhookConfigurations.create
| container.mutatingWebhookConfigurations.update
이 권한은 Kubernetes에서 권한을 상승시킬 수 있지만, 더 가능성이 높은 것은 클러스터에 지속적으로 남아있기 위해 악용할 수 있습니다. 자세한 정보는 이 링크를 따라가세요.
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)