← retour aux outils back to tools

# Peirates

Outil de test d'intrusion Kubernetes pour la post-exploitation au sein d'un cluster : abus de tokens de service account, élévation de privilèges et évasions de pod. Kubernetes penetration testing tool for post-exploitation inside a cluster — service account token abuse, privilege escalation, and pod escapes.

↗ https://github.com/inguardians/peirates

## Overview

Peirates is a Kubernetes-focused post-exploitation tool built for the scenario where an attacker already has a foothold inside a pod or cluster. It automates the abuse chain that’s normally manual and tedious — harvesting service account tokens, enumerating RBAC permissions, escalating privileges via misconfigured roles, pivoting between namespaces, and escaping to the underlying node — all from an interactive menu-driven CLI.

## Common Usage

Launch Peirates from inside a compromised pod (uses in-pod service account by default)

    ./peirates

Point it at a specific cluster/token from outside the pod

    ./peirates -s https://<k8s-api-server>:6443 -t <service-account-token>

Non-interactive mode: run a single action and exit

    ./peirates -i=false -c list-namespaces

## Typical Interactive Session

    [Peirates] -> list-namespaces
    [Peirates] -> get-secrets
    [Peirates] -> list-service-accounts
    [Peirates] -> switch-service-accounts     # pivot to a more privileged SA token found
    [Peirates] -> can-i                        # check current permissions (like kubectl auth can-i)
    [Peirates] -> get-pods -A
    [Peirates] -> exec-into-pod                # shell into another pod
    [Peirates] -> make-privileged-pod          # deploy a hostPath/privileged pod for node escape

## Common Escalation Paths It Automates

Enumerate all secrets reachable with the current token

    [Peirates] -> get-secrets

Check if the current SA can create pods (often => full node compromise)

    [Peirates] -> can-i create pods

Deploy an attacker-controlled privileged pod to break out to the host

    [Peirates] -> make-privileged-pod

## Tips

- Peirates assumes it’s running with at least a low-privilege service account token — the first priority is usually enumerating and pivoting to a more privileged one via `list-service-accounts` / `switch-service-accounts`.
- A service account able to `create pods` in most default RBAC setups is a straight path to node-level compromise via a privileged/hostPath pod.
- Pair findings with `kubectl auth can-i --list` for cross-verification when RBAC behavior looks ambiguous.

Help / Man page

    Usage: peirates [options]

      -s, --server URL          Kubernetes API server URL
      -t, --token TOKEN         service account token to use
      -c, --cert FILE           client certificate for authentication
      -i, --interactive BOOL     run in interactive menu mode (default: true)
      --run-command CMD          execute a single Peirates command and exit
      -h, --help                 display this help and exit

    Interactive commands include:
      list-namespaces, list-service-accounts, switch-service-accounts,
      get-secrets, get-pods, exec-into-pod, can-i, make-privileged-pod,
      get-kubernetes-secrets-from-container, mount-hostPath-volume

## Vue d’ensemble

Peirates est un outil de post-exploitation axé sur Kubernetes, conçu pour le scénario où un attaquant dispose déjà d’un point d’ancrage à l’intérieur d’un pod ou d’un cluster. Il automatise la chaîne d’abus normalement manuelle et fastidieuse : récupération des tokens de service account, énumération des permissions RBAC, élévation de privilèges via des rôles mal configurés, pivot entre namespaces, et évasion vers le nœud sous-jacent, le tout depuis une CLI interactive pilotée par menu.

## Utilisation courante

    # Lancer Peirates depuis un pod compromis (utilise par défaut le service account du pod)
    ./peirates

    # Cibler un cluster/token spécifique depuis l'extérieur du pod
    ./peirates -s https://<k8s-api-server>:6443 -t <service-account-token>

    # Mode non interactif : exécuter une seule action puis quitter
    ./peirates -i=false -c list-namespaces

## Session interactive typique

    [Peirates] -> list-namespaces
    [Peirates] -> get-secrets
    [Peirates] -> list-service-accounts
    [Peirates] -> switch-service-accounts     # pivoter vers un token de SA plus privilégié trouvé
    [Peirates] -> can-i                        # vérifier les permissions actuelles (comme kubectl auth can-i)
    [Peirates] -> get-pods -A
    [Peirates] -> exec-into-pod                # obtenir un shell dans un autre pod
    [Peirates] -> make-privileged-pod          # déployer un pod hostPath/privileged pour une évasion de nœud

## Chemins d’escalade courants automatisés

    # Énumérer tous les secrets accessibles avec le token actuel
    [Peirates] -> get-secrets

    # Vérifier si le SA actuel peut créer des pods (souvent => compromission complète du nœud)
    [Peirates] -> can-i create pods

    # Déployer un pod privilégié contrôlé par l'attaquant pour s'évader vers l'hôte
    [Peirates] -> make-privileged-pod

## Conseils

- Peirates part du principe qu’il s’exécute avec au moins un token de service account faiblement privilégié : la première priorité consiste généralement à énumérer puis pivoter vers un token plus privilégié via `list-service-accounts` / `switch-service-accounts`.
- Un service account capable de `create pods` dans la plupart des configurations RBAC par défaut constitue une voie directe vers une compromission au niveau du nœud via un pod privileged/hostPath.
- Recouper les résultats avec `kubectl auth can-i --list` en cas de comportement RBAC ambigu.

Aide / Page de manuel

    Usage: peirates [options]

      -s, --server URL          Kubernetes API server URL
      -t, --token TOKEN         service account token to use
      -c, --cert FILE           client certificate for authentication
      -i, --interactive BOOL     run in interactive menu mode (default: true)
      --run-command CMD          execute a single Peirates command and exit
      -h, --help                 display this help and exit

    Interactive commands include:
      list-namespaces, list-service-accounts, switch-service-accounts,
      get-secrets, get-pods, exec-into-pod, can-i, make-privileged-pod,
      get-kubernetes-secrets-from-container, mount-hostPath-volume