
k8scout v0.1.2
Déposez un seul binaire dans un pod Kubernetes compromis et cartographiez instantanément chaque chemin d'attaque réaliste vers cluster-admin, node escape, secret theft et cloud IAM takeover.
k8scout
Bêta — Un moteur de chemins d'attaque Kubernetes en binaire unique pour les évaluations de sécurité autorisées.
Déposez-le dans un pod compromis, exécutez-le, et obtenez une cartographie de chaque chemin d'escalade réaliste, depuis votre point d'ancrage actuel jusqu'à cluster-admin, l'accès aux nœuds, le vol de secrets et les rôles IAM cloud.
L'idée
Vous avez une RCE dans un pod Kubernetes. Et maintenant ?
k8scout répond à cette question. Il découvre automatiquement ce que le service account du pod compromis peut faire, cartographie le graphe RBAC, et trace les chemins d'attaque multi-étapes depuis votre point d'ancrage exact jusqu'aux cibles à haute valeur.
Il fonctionne selon trois modes :
- Mode offensif (par défaut) — exécuté depuis l'intérieur d'un pod compromis. Découvre votre identité, vos permissions, et tous les chemins d'escalade atteignables depuis votre position actuelle.
- Mode reviewer (
--reviewer-mode) — exécuté avec un SA en lecture seule pour auditer la surface d'attaque complète du cluster pour toutes les identités. - Mode recon (
--recon) — un examen rapide et discret de votre identité, de vos permissions effectives, et des ressources auxquelles vous pouvez accéder. Pas de graphe ni de recherche de chemins. Ajoutez--bruteforce-nspour découvrir les namespaces que vous ne pouvez pas lister à l'échelle du cluster.
Démo
Ce qu'il détecte
k8scout construit un graphe de permissions pondéré et exécute une recherche de chemins basée sur Dijkstra pour découvrir des chaînes d'attaque multi-étapes réalistes :
- Du pod au cluster-admin — via les bindings RBAC, la mutation de workloads, ou la création de CRB
- De l'évasion de conteneur au nœud — via des conteneurs privilégiés, hostPID, hostNetwork, des capabilities dangereuses, ou des montages hostPath
- Mouvement latéral — exec dans d'autres pods, vol de leurs jetons SA, pivot via leurs permissions
- Vol de secrets et d'identifiants — jetons SA montés, secrets, configmaps avec identifiants fuités, jetons orphelins
- Escalade IAM cloud — IRSA (AWS), GKE Workload Identity, Azure Workload Identity, abus d'audience de jeton projeté
- Chaînes d'usurpation — prise de contrôle SA-vers-SA via les permissions d'impersonation
- Mutation de workloads — patcher un deployment pour changer son SA, puis hériter des permissions de ce SA
- Injection de webhook — contrôle d'un webhook mutating pour injecter dans les futurs workloads
- Abus d'opérateurs GitOps — escalade de privilèges via ArgoCD, Flux, External Secrets et l'opérateur Vault
- Détection de mauvaise configuration — bindings orphelins, verbes wildcard, jetons auto-montés, secrets en clair dans les variables d'environnement
Chaque constat inclut les identifiants de techniques MITRE ATT&CK, un score de risque, et un chemin d'attaque étape par étape avec les nœuds de graphe réels impliqués. 50 règles de détection au total.
Démarrage rapide
Depuis un pod compromis (cas d'usage principal)
# Copier le binaire dans le pod
kubectl cp k8scout-linux-amd64 <ns>/<pod>:/tmp/k8scout
# L'exécuter
kubectl exec -it <ns>/<pod> -- chmod +x /tmp/k8scout
kubectl exec -it <ns>/<pod> -- /tmp/k8scout --out /tmp/result.json
# Récupérer les résultats
kubectl cp <ns>/<pod>:/tmp/result.json ./result.json
# Ce flux fonctionne exactement comme ça dans votre revshell !
Le binaire détecte automatiquement qu'il s'exécute dans le cluster, identifie le pod et le SA, et démarre la recherche de chemins depuis votre point d'ancrage exact.
Usage prévu : Missions de test d'intrusion, opérations red team, revues de sécurité internes, et audits de durcissement de cluster. Obtenez toujours une autorisation appropriée avant d'exécuter contre un cluster.
Depuis votre machine locale
# Utilise ~/.kube/config ou $KUBECONFIG
k8scout --all-namespaces --out result.json
# Cibler un seul namespace
k8scout --namespace production --out result.json
Mode recon (vérification rapide des permissions et ressources)
# Qui suis-je, que puis-je faire, et à quelles ressources puis-je accéder ?
k8scout --recon
# Découvrir les namespaces que vous ne pouvez pas lister à l'échelle du cluster (wordlist intégrée)
k8scout --recon --bruteforce-ns
# Bruteforce avec votre propre wordlist de namespaces (un nom par ligne)
k8scout --recon --bruteforce-ns --ns-wordlist ./namespaces.txt
Le recon saute la construction du graphe, l'inférence et l'IA — c'est le moyen le plus rapide de répondre à
« que possède réellement ce jeton ? ». Il rapporte l'identité actuelle, ses
permissions effectives (SelfSubjectRulesReview), et une matrice de capacités
par ressource (SelfSubjectAccessReview). --bruteforce-ns confirme qu'un namespace existe
en lisant des objets bien connus que chaque namespace possède (l'objet namespace, son
ServiceAccount default, ou le ConfigMap kube-root-ca.crt) — utile quand
l'identité ne peut pas lister les namespaces mais peut toujours accéder à certains d'entre eux.
Mode reviewer (audit complet du cluster)
# Déployer le RBAC en lecture seule et le job
kubectl apply -f deploy/rbac.yaml
kubectl apply -f deploy/job.yaml
# Ou exécuter directement avec les permissions reviewer
k8scout --reviewer-mode --all-namespaces --out result.json
Avec narration IA
export OPENAI_API_KEY="sk-..."
k8scout --all-namespaces --out result.json
Installation
Binaires précompilés
Téléchargez depuis la page Releases. Tous les binaires sont liés statiquement sans dépendances.
| Binaire | Plateforme |
|---|---|
k8scout-linux-amd64 | Linux x86-64 |
k8scout-linux-arm64 | Linux ARM64 |
k8scout-darwin-amd64 | macOS Intel |
k8scout-darwin-arm64 | macOS Apple Silicon |
Compiler depuis les sources
Nécessite Go 1.22+.
git clone https://github.com/hac01/k8scout
cd k8scout
make build # binaire natif
make build-linux # binaire Linux amd64 statique
make build-all # les quatre cibles de release