Skip to content
reverseshell

Reverse shells dans les conteneurs : le namespace réseau est le piège

Les tests reverse shell en conteneur échouent souvent à cause des namespaces, images minimales, outils absents et politiques Kubernetes.

Publié le 2 min de lecture

Les conteneurs rendent les tests reverse shell plus étranges qu'ils n'en ont l'air. Le processus ressemble à Linux, mais réseau, filesystem, outils, privilèges et identité sont tous placés dans un contexte limité. Si vous oubliez ça, vous déboguez la mauvaise machine.

Le shell arrive dans un namespace, pas dans votre représentation mentale de l'hôte.

Les images minimales ont peu d'outils

Beaucoup d'images de production n'incluent ni Bash, ni Python, ni netcat, ni curl, parfois même aucun package manager. C'est une bonne pratique. C'est aussi la raison pour laquelle des payloads copiées depuis une distribution complète échouent immédiatement.

Vérifiez les bases :

ls /bin /usr/bin
cat /etc/os-release
which sh bash python3 nc curl wget

Les images BusyBox demandent d'autres réflexes. Les images distroless peuvent ne fournir aucun shell. Dans un test autorisé, ce résultat est déjà intéressant : le design du workload réduit les options interactives après exécution de code.

L'IP source peut surprendre

Depuis un conteneur, le trafic sortant peut apparaître comme venant du noeud, d'une gateway NAT, d'un sidecar service mesh ou d'un proxy egress. Le listener voit le chemin réseau, pas l'abstraction Kubernetes. NetworkPolicy, DNS policy, service account et sidecars modifient tous ce qu'un callback peut atteindre.

C'est pour ça qu'il faut corréler capture réseau et métadonnées cluster. Un callback depuis une IP de noeud, sans pod ni namespace, vaut peu dans une investigation.

Un shell conteneur n'est pas un accès hôte

Un reverse shell dans un conteneur prouve l'exécution de code dans ce conteneur. Pas une compromission hôte automatique. Les vraies questions portent sur les secrets montés, les permissions du service account, les volumes écrits, les capabilities, les montages hostPath et les chemins réseau accessibles depuis le pod.

Les rapports imprécis surestiment vite l'impact. "Nous avons un shell" ne suffit pas. Quel namespace ? Quel utilisateur ? Quels mounts ? Quelles permissions Kubernetes ? Quels chemins egress ?

L'app doit demander le contexte runtime

Une app reverseshell utile peut pousser l'opérateur à préciser OS, shell disponible, contexte conteneur et chemin listener attendu. Elle n'a pas besoin de devenir un scanner Kubernetes. Elle doit surtout éviter de prétendre que toutes les cibles Linux se ressemblent.

Les conteneurs récompensent les hypothèses précises et punissent les payloads copiées sans réflexion.

Articles liés

Un workflow concret pour générer des reverse shells en environnement autorisé, préparer le listener et diagnostiquer les échecs.
Routage, filtrage sortant, listener, quoting, runtime absent : une méthode propre pour diagnostiquer un reverse shell qui ne revient pas.
La détection des reverse shells demande du contexte processus, réseau et workload. Les signatures seules ratent trop de cas réels.