GCP - Container Privesc
container
container.clusters.get
container.clusters.get
此权限允许使用类似以下方式收集Kubernetes集群的凭据:
没有额外权限的情况下,凭证相当基本,你只能列出一些资源,但它们对于发现环境中的配置错误很有用。
请注意,Kubernetes 集群可能配置为私有,这将阻止从互联网访问 Kube-API 服务器。
如果你没有这个权限,仍然可以访问集群,但需要创建自己的 kubectl 配置文件,其中包含集群信息。一个新生成的配置文件如下所示:
container.roles.escalate
| container.clusterRoles.escalate
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
container.roles.bind
| container.clusterRoles.bind
Kubernetes默认情况下阻止主体能够创建或更新RoleBindings和ClusterRoleBindings以赋予比主体拥有的权限更多的权限。然而,具有该权限的GCP主体将能够创建/更新具有比其拥有的权限更多的RolesBindings/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
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环境中,您还将能够从元数据服务中获取节点池GCP SA并在GC中提升权限(默认情况下使用计算SA)。
container.secrets.get
| container.secrets.list
container.secrets.get
| container.secrets.list
根据此页面的解释,具有这些权限的您可以读取所有Kubernetes的SA的令牌,因此您可以升级到它们。
container.pods.exec
container.pods.exec
有了这个权限,您将能够执行进入pods,这将使您能够访问在pods中运行的所有Kubernetes SA,以在K8s内提升权限,但您还将能够窃取 NodePool的GCP服务帐户,从而提升GCP中的权限。
container.pods.portForward
container.pods.portForward
根据此页面的解释,具有这些权限的您可以访问在pods中运行的本地服务,这可能使您能够在Kubernetes中提升权限(如果您设法与元数据服务通信,则还可以在GCP中提升权限)。
container.serviceAccounts.createToken
container.serviceAccounts.createToken
由于权限的名称,看起来它将允许您生成K8s服务帐户的令牌,因此您将能够提升到Kubernetes中的任何SA。但是,我找不到任何可用于使用它的API端点,请告诉我如果您找到了。
container.mutatingWebhookConfigurations.create
| container.mutatingWebhookConfigurations.update
container.mutatingWebhookConfigurations.create
| container.mutatingWebhookConfigurations.update
这些权限可能允许您在Kubernetes中提升权限,但更有可能,您可以滥用它们来在集群中持久存在。 有关更多信息,请点击此链接。
Last updated