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
| Composant | Valeur |
|---|---|
| Langage | Python 3 |
| Modes | remote (depuis l'extérieur), local (depuis un pod), network (subnet scan) |
| Cibles | API server, kubelet, etcd, dashboard, registry |
| Output | Table (terminal), JSON, YAML |
| Exploitation | Mode hunter (actif) - teste l'exploitabilité réelle |
Modes de scan
| Mode | Description | Usage |
|---|---|---|
| remote | Scan depuis l'extérieur du cluster via IP/hostname | Audit surface d'attaque externe |
| local | Scan depuis l'intérieur du cluster (pod existant) | Audit depuis un workload compromis |
| network | Discovery automatique via scan de sous-réseau | Découverte d'endpoints K8s non documentés |
| hunter | Exploitation active des vulnérabilités trouvées | Validation de l'exploitabilité réelle |
Prérequis
| Ressource | Valeur |
|---|---|
| Python | 3.7+ |
| pip | Pour l'installation |
| Autorisation | Utiliser 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
- GitHub : https://github.com/aquasecurity/kube-hunter
- Releases : https://github.com/aquasecurity/kube-hunter/releases
- KubeHunter.aquasec.com (base de vulnérabilités K8s) : https://kubehunter.aquasec.com/