Files
hacktricks-cloud/src/pentesting-cloud/openshift-pentesting/openshift-privilege-escalation/openshift-tekton.md

72 lines
2.8 KiB
Markdown

# OpenShift - Tekton
**El autor original de esta página es** [**Haroun**](https://www.linkedin.com/in/haroun-al-mounayar-571830211)
### Qué es tekton
Según la documentación: _Tekton es un marco de código abierto poderoso y flexible para crear sistemas CI/CD, permitiendo a los desarrolladores construir, probar y desplegar en proveedores de nube y sistemas locales._ Tanto Jenkins como Tekton se pueden usar para probar, construir y desplegar aplicaciones, sin embargo, Tekton es Cloud Native. 
Con Tekton, todo está representado por archivos YAML. Los desarrolladores pueden crear Recursos Personalizados (CR) de tipo `Pipelines` y especificar múltiples `Tasks` en ellos que desean ejecutar. Para ejecutar un Pipeline, deben crearse recursos de tipo `PipelineRun`.
Cuando se instala tekton, se crea una cuenta de servicio (sa) llamada pipeline en cada namespace. Cuando se ejecuta un Pipeline, se generará un pod utilizando esta sa llamada `pipeline` para ejecutar las tareas definidas en el archivo YAML.
{{#ref}}
https://tekton.dev/docs/getting-started/pipelines/
{{#endref}}
### Las capacidades de la cuenta de servicio del Pipeline
Por defecto, la cuenta de servicio del pipeline puede usar la capacidad `pipelines-scc`. Esto se debe a la configuración predeterminada global de tekton. De hecho, la configuración global de tekton también es un YAML en un objeto de openshift llamado `TektonConfig` que se puede ver si tienes algunos roles de lector en el clúster.
```yaml
apiVersion: operator.tekton.dev/v1alpha1
kind: TektonConfig
metadata:
name: config
spec:
...
...
platforms:
openshift:
scc:
default: "pipelines-scc"
```
En cualquier espacio de nombres, si puedes obtener el token de la cuenta de servicio del pipeline, podrás usar `pipelines-scc`.
### La mala configuración
El problema es que el scc predeterminado que la cuenta de servicio del pipeline puede usar es controlable por el usuario. Esto se puede hacer utilizando una etiqueta en la definición del espacio de nombres. Por ejemplo, si puedo crear un espacio de nombres con la siguiente definición yaml:
```yaml
apiVersion: v1
kind: Namespace
metadata:
name: test-namespace
annotations:
operator.tekton.dev/scc: privileged
```
El operador tekton otorgará a la cuenta de servicio del pipeline en `test-namespace` la capacidad de usar el scc privilegiado. Esto permitirá el montaje del nodo.
### La solución
Los documentos de Tekton sobre cómo restringir la anulación de scc añadiendo una etiqueta en el objeto `TektonConfig`.
{{#ref}}
https://tekton.dev/docs/operator/sccconfig/
{{#endref}}
Esta etiqueta se llama `max-allowed` 
```yaml
apiVersion: operator.tekton.dev/v1alpha1
kind: TektonConfig
metadata:
name: config
spec:
...
...
platforms:
openshift:
scc:
default: "restricted-v2"
maxAllowed: "privileged"
```