GCP - Container Privesc
Last updated
Last updated
AWSハッキングを学び、実践する: GCPハッキングを学び、実践する:
container.clusters.get
この権限は、次のような方法でKubernetesクラスターの資格情報を収集することを許可します:
追加の権限がなくても、資格情報は非常に基本的で、いくつかのリソースをリストすることができますが、環境内の設定ミスを見つけるのに役立ちます。
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のプリンシパルは、実際には自分が持っている権限よりも多くの権限を持つ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
これらのすべての権限は、リソースを作成または更新することを可能にし、podを定義することができます。podを定義することで、SAを添付し、実行されるイメージを指定できるため、SAのトークンをあなたのサーバーにエクスフィルトレートするイメージを実行することができ、任意のサービスアカウントに昇格することができます。 詳細については、次を確認してください:
GCP環境にいるため、メタデータサービスからノードプールのGCP SAを取得し、GCPで権限を昇格することもできます(デフォルトではコンピュートSAが使用されます)。
container.secrets.get
| container.secrets.list
container.pods.exec
この権限を持つことで、podにexecすることができ、これによりKubernetesのSAにアクセスしてK8s内で権限を昇格することができますが、NodePoolのGCPサービスアカウントをも盗むことができ、GCPで権限を昇格することもできます。
container.pods.portForward
container.serviceAccounts.createToken
権限の名前から、K8sサービスアカウントのトークンを生成することを許可するように見えますので、Kubernetes内の任意のSAに昇格することができるでしょう。しかし、使用するAPIエンドポイントを見つけることができなかったので、見つけたら教えてください。
container.mutatingWebhookConfigurations.create
| container.mutatingWebhookConfigurations.update
、これらの権限を使用すると、すべてのKubernetesのSAのトークンを読み取ることができるため、それらに昇格することができます。
、これらの権限を使用すると、podで実行されているローカルサービスにアクセスでき、これによりKubernetesで権限を昇格することができるかもしれません(そして、GCPでメタデータサービスにアクセスできる場合)。
これらの権限はKubernetesで権限を昇格することを可能にするかもしれませんが、より可能性が高いのは、これらを悪用してクラスターに持続することです。 詳細については、。
Learn & practice AWS Hacking: Learn & practice GCP Hacking:
Check the !
Join the 💬 or the or follow us on Twitter 🐦 .
Share hacking tricks by submitting PRs to the and github repos.