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 默认情况下 防止 主体能够 创建 或 更新 角色 和 集群角色,以拥有 比主体更高的权限。然而,具有该权限的 GCP 主体将能够 创建/更新具有更高权限的角色/集群角色,有效地绕过 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 默认情况下 防止 主体能够 创建 或 更新 角色绑定 和 集群角色绑定,以赋予 比主体更高的权限。然而,具有该权限的 GCP 主体将能够 创建/更新具有更高权限的角色绑定/集群角色绑定,有效地绕过 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 时,您可以 指定将要附加的服务账户 和 将要运行的镜像,因此您可以运行一个将 将服务账户的令牌导出到您的服务器 的镜像,从而使您能够提升到任何服务账户。 有关更多信息,请查看:
由于我们处于 GCP 环境中,您还将能够从 元数据 服务中 获取节点池 GCP 服务账户 并 在 GCP 中提升权限(默认情况下使用计算服务账户)。
container.secrets.get
| container.secrets.list
container.secrets.get
| container.secrets.list
正如 本页所述,通过这些权限,您可以 读取 所有 Kubernetes 服务账户的令牌,因此您可以提升到它们。
container.pods.exec
container.pods.exec
通过此权限,您将能够 进入 pods 执行命令,这将使您 访问 所有 在 pods 中运行的 Kubernetes 服务账户,以在 K8s 中提升权限,但您还将能够 窃取 节点池的 GCP 服务账户,在 GCP 中提升权限。
container.pods.portForward
container.pods.portForward
正如 本页所述,通过这些权限,您可以 访问在 pods 中运行的本地服务,这可能允许您 在 Kubernetes 中提升权限(如果您能够与元数据服务进行通信,则在 GCP 中也可以)。
container.serviceAccounts.createToken
container.serviceAccounts.createToken
由于 权限 的 名称,它 看起来会允许您生成 K8s 服务账户的令牌,因此您将能够 在 Kubernetes 中提升到任何服务账户。然而,我找不到任何可以使用的 API 端点,所以如果您找到,请告诉我。
container.mutatingWebhookConfigurations.create
| container.mutatingWebhookConfigurations.update
container.mutatingWebhookConfigurations.create
| container.mutatingWebhookConfigurations.update
这些权限可能允许您在 Kubernetes 中提升权限,但更可能的是,您可以利用它们 在集群中持久化。 有关更多信息,请 点击此链接。
Last updated