OpenShift - Tekton

Diese Seite zeigt ein Szenario zur Privilegieneskalation, vorausgesetzt Tekton ist im Cluster installiert und Sie können einen Namespace erstellen (manchmal sind auch Bearbeitungsrechte ausreichend)

Der ursprüngliche Autor dieser Seite ist Haroun

Was ist Tekton

Laut der Dokumentation: Tekton ist ein leistungsstarkes und flexibles Open-Source-Framework zur Erstellung von CI/CD-Systemen, das es Entwicklern ermöglicht, über Cloud-Anbieter und lokale Systeme hinweg zu erstellen, zu testen und bereitzustellen. Sowohl Jenkins als auch Tekton können zum Testen, Erstellen und Bereitstellen von Anwendungen verwendet werden, wobei Tekton jedoch Cloud-Native ist.

Bei Tekton wird alles durch YAML-Dateien dargestellt. Entwickler können benutzerdefinierte Ressourcen (CR) vom Typ Pipelines erstellen und mehrere Tasks darin angeben, die sie ausführen möchten. Um eine Pipeline auszuführen, müssen Ressourcen vom Typ PipelineRun erstellt werden.

Wenn Tekton installiert ist, wird ein Servicekonto (sa) namens pipeline in jedem Namespace erstellt. Wenn eine Pipeline ausgeführt wird, wird ein Pod unter Verwendung dieses sa mit dem Namen pipeline erstellt, um die in der YAML-Datei definierten Aufgaben auszuführen.

Die Fähigkeiten des Pipeline-Servicekontos

Standardmäßig kann das Pipeline-Servicekonto die pipelines-scc-Fähigkeit nutzen. Dies liegt an der globalen Standardkonfiguration von Tekton. Tatsächlich ist die globale Konfiguration von Tekton auch eine YAML-Datei in einem OpenShift-Objekt namens TektonConfig, die eingesehen werden kann, wenn Sie einige Leserollen im Cluster haben.

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

Das Misskonfiguration

Das Problem besteht darin, dass die Standard-SCC, die der Pipeline-Service-Account verwenden kann, vom Benutzer gesteuert werden kann. Dies kann mithilfe eines Labels in der Namespace-Definition erreicht werden. Wenn ich beispielsweise einen Namespace mit der folgenden YAML-Definition erstellen kann:

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

Der Tekton-Operator wird dem Pipeline-Service-Konto im test-namespace die Berechtigung geben, das SCC-Privileg zu verwenden. Dies ermöglicht das Einhängen des Knotens.

Die Lösung

Tekton-Dokumente beschreiben, wie man das Überschreiben des SCC einschränkt, indem man ein Label im TektonConfig-Objekt hinzufügt.

Dieses Label heißt max-allowed

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

Last updated