Comment trouver les endpoints d’API d’Hashicorp Vault qui demandent une autorisation sudo ?

Table des matières

Solution rapide découverte en Septembre 2023

Les chemins d’API demandant sudo peuvent être trouvés dans le code source de l’API vault à https://github.com/hashicorp/vault/blob/main/api/sudo_paths.go.

Guide étape par étape

Etape 1 - Vous connecter à votre instance Vault

$ vault login ...

Etape 2 - Obtenir la description OpenAPI

$ vault read -format=json sys/internal/specs/openapi > vault-openapi-spec.json

Cela va créer un fichier vault-openapi-spec.json dans votre répertoire courant.

Ce fichier décrit tous les endpoints d’API de Vault selon le format du standard OpenAPI.

Etape 3 - Parser le fichier vault-openapi-spec.json

Si vous lisez avec attention le fichier vault-openapi-spec.json, vous trouverez des ressources ayant x-vault-sudo positionné à true.

Un petit script python permet d’extraire les paths d’API ayant cet attribut:

#!/usr/bin/env python3

import json
import sys

OPENAPI_SPEC_FILE = "vault-openapi-spec.json"


def main() -> int:
    with open(OPENAPI_SPEC_FILE, "r", encoding="utf-8") as openapi_spec_fd:
        spec = json.load(openapi_spec_fd)

    paths = spec["data"]["paths"]

    path_sudo_protected: list[str] = []
    for api_path, path_spec in paths.items():
        if "x-vault-sudo" in path_spec and path_spec["x-vault-sudo"] is True:
            path_sudo_protected.append(api_path)

    path_sudo_protected.sort()

    print("\n".join(path_sudo_protected))

    return 0


if __name__ == "__main__":
    sys.exit(main())

Voici la liste que j’obtiens sur mon instance Vault 1.14.1 fraîchement déployée:

  • /auth/token/accessors
  • /sys/audit
  • /sys/audit/{path}
  • /sys/auth/{path}
  • /sys/auth/{path}/tune
  • /sys/config/auditing/request-headers
  • /sys/config/auditing/request-headers/{header}
  • /sys/config/cors
  • /sys/config/ui/headers/{header}
  • /sys/internal/inspect/router/{tag}
  • /sys/leases
  • /sys/leases/lookup/
  • /sys/leases/lookup/{prefix}
  • /sys/leases/revoke-force/{prefix}
  • /sys/leases/revoke-prefix/{prefix}
  • /sys/plugins/catalog/{name}
  • /sys/plugins/catalog/{type}
  • /sys/plugins/catalog/{type}/{name}
  • /sys/remount
  • /sys/replication/dr/primary/secondary-token
  • /sys/replication/performance/primary/secondary-token
  • /sys/replication/primary/secondary-token
  • /sys/replication/reindex
  • /sys/revoke-force/{prefix}
  • /sys/revoke-prefix/{prefix}
  • /sys/rotate
  • /sys/storage/raft/snapshot-auto/config/
  • /sys/storage/raft/snapshot-auto/config/{name}

Liens utiles