Un pool de nœuds AKS s'exécute sur des VM qui portent une identité managée kubelet et l'identité propre du nœud. Un pod capable d'atteindre le point de terminaison de métadonnées d'instance du nœud (souvent non bloqué) génère le jeton Azure de cette identité et s'évade du cluster pour atteindre l'abonnement.
D'un pod à un jeton Azure#
# inside a pod on the node, hit IMDS for the node/kubelet identity token
curl -s -H Metadata:true \
"http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https://management.azure.com/"
Notes d'exploitation#
- Bloquer l'accès des pods à
169.254.169.254est un contrôle fréquemment oublié ; là où il manque, n'importe quelle RCE dans un pod devient une identité Azure. - L'identité kubelet détient généralement les droits
AcrPullet de gestion du nœud, une porte d'entrée vers le Container Registry et le groupe de ressources du nœud. - Les pods en workload-identity (fédérée) assument un rôle via OIDC au lieu de cela ; lisez le jeton projeté et échangez-le plutôt que d'interroger IMDS.
Outils#
- curl depuis un pod compromis ; Peirates automatise les pivots d'identité de nœud et de cloud.
- Azure CLI une fois le jeton exporté.