OpenShift - Tekton

Cette page montre un scénario d'escalade de privilèges étant donné que tekton est installé dans le cluster et que vous pouvez créer un espace de noms (parfois les droits de modification sont suffisant

L'auteur original de cette page est Haroun

Qu'est-ce que tekton

Selon la documentation : Tekton est un framework open source puissant et flexible pour créer des systèmes CI/CD, permettant aux développeurs de construire, tester et déployer sur des fournisseurs de cloud et des systèmes sur site. Jenkins et Tekton peuvent être utilisés pour tester, construire et déployer des applications, cependant Tekton est Cloud Native.

Avec Tekton, tout est représenté par des fichiers YAML. Les développeurs peuvent créer des Ressources Personnalisées (CR) de type Pipelines et spécifier plusieurs Tasks qu'ils souhaitent exécuter. Pour exécuter une ressource Pipeline de type PipelineRun doit être créée.

Lorsque tekton est installé, un compte de service (sa) appelé pipeline est créé dans chaque espace de noms. Lorsqu'un Pipeline est exécuté, un pod sera créé en utilisant ce sa appelé pipeline pour exécuter les tâches définies dans le fichier YAML.

Les capacités du compte de service Pipeline

Par défaut, le compte de service pipeline peut utiliser la capacité pipelines-scc. Cela est dû à la configuration par défaut globale de tekton. En fait, la configuration globale de tekton est également un fichier YAML dans un objet openshift appelé TektonConfig qui peut être consulté si vous avez des rôles de lecteur dans le cluster.

apiVersion: operator.tekton.dev/v1alpha1
kind: TektonConfig
metadata:
name: config
spec:
...
...
platforms:
openshift:
scc:
default: "pipelines-scc"

Dans n'importe quel espace de noms, si vous parvenez à obtenir le jeton du compte de service de pipeline, vous pourrez utiliser pipelines-scc.

La Mauvaise Configuration

Le problème est que le scc par défaut que le compte de service de pipeline peut utiliser est contrôlable par l'utilisateur. Cela peut être fait en utilisant une étiquette dans la définition de l'espace de noms. Par exemple, si je peux créer un espace de noms avec la définition yaml suivante :

apiVersion: v1
kind: Namespace
metadata:
name: test-namespace
annotations:
operator.tekton.dev/scc: privileged

Le l'opérateur tekton donnera au compte de service de pipeline dans test-namespace la capacité d'utiliser le scc privileged. Cela permettra le montage du nœud.

La solution

Les documents de Tekton expliquent comment restreindre le remplacement de scc en ajoutant une étiquette dans l'objet TektonConfig.

Cette étiquette s'appelle max-allowed

apiVersion: operator.tekton.dev/v1alpha1
kind: TektonConfig
metadata:
name: config
spec:
...
...
platforms:
openshift:
scc:
default: "restricted-v2"
maxAllowed: "privileged"

Last updated