OpenShift - Tekton

Questa pagina mostra uno scenario di escalation dei privilegi considerando che tekton è installato nel cluster e che è possibile creare uno spazio dei nomi (a volte i diritti di modifica sono sufficie

L'autore originale di questa pagina è Haroun

Cos'è tekton

Secondo la documentazione: Tekton è un framework open-source potente e flessibile per la creazione di sistemi CI/CD, che consente agli sviluppatori di creare, testare e distribuire su fornitori di servizi cloud e sistemi on-premise. Sia Jenkins che Tekton possono essere utilizzati per testare, compilare e distribuire applicazioni, tuttavia Tekton è nativo del cloud.

Con Tekton tutto è rappresentato da file YAML. Gli sviluppatori possono creare Risorse Personalizzate (CR) di tipo Pipelines e specificare più Tasks in esse che desiderano eseguire. Per eseguire una risorsa di tipo Pipeline, devono essere create risorse di tipo PipelineRun.

Quando tekton è installato, viene creato un account di servizio (sa) chiamato pipeline in ogni spazio dei nomi. Quando viene eseguita una Pipeline, verrà generato un pod utilizzando questo sa chiamato pipeline per eseguire i task definiti nel file YAML.

Le capacità dell'account di servizio Pipeline

Per impostazione predefinita, l'account di servizio pipeline può utilizzare la capacità pipelines-scc. Questo è dovuto alla configurazione predefinita globale di tekton. In realtà, la configurazione globale di tekton è anche un file YAML in un oggetto openshift chiamato TektonConfig che può essere visualizzato se si dispone di alcuni ruoli di lettura nel cluster.

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

La configurazione errata

Il problema è che l'SCC predefinito che il service account della pipeline può utilizzare è controllabile dall'utente. Questo può essere fatto utilizzando un'etichetta nella definizione del namespace. Ad esempio, se posso creare un namespace con la seguente definizione yaml:

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

Il tekton operator darà all'account del servizio di pipeline nel test-namespace la capacità di utilizzare il scc privilegiato. Ciò consentirà il mounting del nodo.

La soluzione

I documenti di Tekton riguardano come limitare l'override di scc aggiungendo un'etichetta nell'oggetto TektonConfig.

Questa etichetta si chiama max-allowed

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

Last updated