Comment trouver les endpoints d'API d'Hashicorp Vault qui demandent une autorisation sudo
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}
Soyez le premier à commenter! 🥇