Sécurité

kube-hunter

Outil de penetration testing Kubernetes par Aqua Security. Scan actif ou passif des APIs exposées, RBAC, misconfigurations exploitables. Python, CLI ou pod.

kube-hunter est un outil de penetration testing pour clusters Kubernetes développé par Aqua Security. Contrairement aux outils d'audit statique (kube-bench, Polaris), il adopte une approche offensive : il scanne activement le réseau pour découvrir les endpoints Kubernetes exposés, teste leur vulnérabilité, et peut en mode "hunter" tenter d'exploiter les failles découvertes. Il simule le comportement d'un attaquant ayant accès au réseau interne ou externe pour identifier ce qui est réellement exploitable.

Note : kube-hunter est peu actif depuis 2022 (dernière release significative : v0.6.8 en 2022). Pour du pentesting K8s en production, il reste utile pour un premier audit rapide, mais des outils plus récents (Kubescape, Checkov) peuvent compléter l'analyse.


Informations essentielles

Origine : Aqua Security  ·  Licence : Apache 2.0  ·  Architectures : x86_64

Liens : Documentation  ·  GitHub  ·  Releases

Support : Maintenance minimale depuis 2022. Fonctionnel sur Kubernetes 1.20+.

Stack par défaut

ComposantValeur
LangagePython 3
Modesremote (depuis l'extérieur), local (depuis un pod), network (subnet scan)
CiblesAPI server, kubelet, etcd, dashboard, registry
OutputTable (terminal), JSON, YAML
ExploitationMode hunter (actif) - teste l'exploitabilité réelle

Modes de scan

ModeDescriptionUsage
remoteScan depuis l'extérieur du cluster via IP/hostnameAudit surface d'attaque externe
localScan depuis l'intérieur du cluster (pod existant)Audit depuis un workload compromis
networkDiscovery automatique via scan de sous-réseauDécouverte d'endpoints K8s non documentés
hunterExploitation active des vulnérabilités trouvéesValidation de l'exploitabilité réelle

Prérequis

RessourceValeur
Python3.7+
pipPour l'installation
AutorisationUtiliser uniquement sur des clusters dont vous êtes responsable

Installation

Via pip (recommandé)

# Créer un environnement virtuel
python3 -m venv kube-hunter-env
source kube-hunter-env/bin/activate

pip install kube-hunter

# Vérifier
kube-hunter --help

Via Docker

docker run -it aquasec/kube-hunter:latest --help

Via Pod Kubernetes (scan interne)

# kube-hunter-pod.yaml
apiVersion: v1
kind: Pod
metadata:
  name: kube-hunter
spec:
  automountServiceAccountToken: false
  containers:
  - name: kube-hunter
    image: aquasec/kube-hunter:latest
    command: ["/bin/sh", "-c"]
    args: ["kube-hunter --pod --report json 2>&1 | tee /tmp/report.json && sleep 300"]
  restartPolicy: Never
kubectl apply -f kube-hunter-pod.yaml
kubectl wait --for=condition=ready pod/kube-hunter --timeout=60s
kubectl logs kube-hunter -f
kubectl delete pod kube-hunter

Vérification de l'installation

# 1. Vérifier l'installation
kube-hunter --help
# Doit afficher les options disponibles

# 2. Scan passif d'un endpoint (sans exploitation)
kube-hunter --remote <cluster-ip> --statistics
# Affiche les checks effectués et les vulnérabilités trouvées sans les exploiter

# 3. Rapport JSON
kube-hunter --remote <cluster-ip> --report json > report.json
cat report.json | jq '.vulnerabilities | length'
# Nombre de vulnérabilités détectées

Utilisation

Scan externe (depuis l'extérieur du cluster)

# Scan d'un cluster par IP (passif)
kube-hunter --remote <api-server-ip>

# Scan d'un range de sous-réseau
kube-hunter --cidr 10.0.0.0/24

# Scan avec rapport JSON
kube-hunter --remote <api-server-ip> --report json > report.json

Scan interne (depuis un pod dans le cluster)

# Depuis l'intérieur du cluster
kube-hunter --pod

# Depuis un pod existant (kubectl exec)
kubectl exec -it my-pod -- /bin/sh
pip install kube-hunter
kube-hunter --pod

Mode actif (exploitation)

# ATTENTION : peut impacter les services - utiliser uniquement en test
# Mode hunter : tente d'exploiter les vulnérabilités trouvées
kube-hunter --remote <api-server-ip> --active

Exemple de sortie

Nodes
+-------------+----+
| TYPE        | IP |
+-------------+----+
| Node/Master | 10.0.0.1 |
+-------------+----+

Detected Services
+------------+------+----------------------+
| SERVICE    | PORT | DESCRIPTION          |
+------------+------+----------------------+
| API Server | 6443 | The API server is... |
| Kubelet    | 10250| Kubelet service      |
+------------+------+----------------------+

Vulnerabilities
+--------+------------------------+--------+
| ID     | LOCATION               | RISK   |
+--------+------------------------+--------+
| KHV002 | 10.0.0.1:6443          | HIGH   |
| KHV005 | 10.0.0.1:10250         | MEDIUM |
+--------+------------------------+--------+

Mise à jour

pip install --upgrade kube-hunter

# Docker
docker pull aquasec/kube-hunter:latest

Troubleshooting

# Mode debug
kube-hunter --remote <ip> --log DEBUG

# Timeout sur des scans longs
kube-hunter --remote <ip> --network-timeout 5

# Si les résultats semblent incomplets
kube-hunter --remote <ip> --statistics
# Affiche le nombre de hunters exécutés

Commandes utiles

kube-hunter --remote <ip>              # Scan externe passif
kube-hunter --pod                      # Scan depuis l'intérieur du cluster
kube-hunter --cidr <x.x.x.x/24>      # Scan d'un sous-réseau
kube-hunter --active                   # Mode exploitation (attention !)
kube-hunter --report json > r.json    # Sortie JSON
kube-hunter --list                     # Lister tous les hunters disponibles
kube-hunter --enable-cve-hunting      # Inclure les CVE connues K8s

Ressources

Newsletter · 2 000+ abonnés

Reste au courant de ce qui bouge en prod

RudeOps veille devops hebdo, droit au but.

Gratuit · Sans spam · Désinscription en un clic