GCP - KMS Privesc
KMS
Informações sobre KMS:
pageGCP - KMS EnumNote que no KMS as permissões não são apenas herdadas de Organizações, Pastas e Projetos, mas também de Keyrings.
cloudkms.cryptoKeyVersions.useToDecrypt
cloudkms.cryptoKeyVersions.useToDecrypt
Você pode usar esta permissão para descriptografar informações com a chave sobre a qual você tem essa permissão.
cloudkms.cryptoKeys.setIamPolicy
cloudkms.cryptoKeys.setIamPolicy
Um atacante com essa permissão poderia conceder a si mesmo permissões para usar a chave para descriptografar informações.
cloudkms.cryptoKeyVersions.useToDecryptViaDelegation
cloudkms.cryptoKeyVersions.useToDecryptViaDelegation
Aqui está uma explicação conceitual de como essa delegação funciona:
Service Account A tem acesso direto para descriptografar usando uma chave específica no KMS.
Service Account B recebe a permissão
useToDecryptViaDelegation
. Isso permite que ela solicite ao KMS para descriptografar dados em nome do Service Account A.
O uso desta permissão é implícito na forma como o serviço KMS verifica as permissões quando uma solicitação de descriptografia é feita.
Quando você faz uma solicitação de descriptografia padrão usando a API do Google Cloud KMS (em Python ou outra linguagem), o serviço verifica se a service account solicitante possui as permissões necessárias. Se a solicitação for feita por uma service account com a permissão useToDecryptViaDelegation
, o KMS verifica se esta conta está autorizada a solicitar descriptografia em nome da entidade que possui a chave.
Configurando para Delegação
Defina o Custom Role: Crie um arquivo YAML (por exemplo,
custom_role.yaml
) que define o custom role. Este arquivo deve incluir a permissãocloudkms.cryptoKeyVersions.useToDecryptViaDelegation
. Aqui está um exemplo de como este arquivo pode parecer:
Criar o Papel Personalizado Usando o gcloud CLI: Use o seguinte comando para criar o papel personalizado no seu projeto Google Cloud:
Substitua [YOUR_PROJECT_ID]
pelo ID do seu projeto Google Cloud.
Conceder a Função Personalizada a uma Conta de Serviço: Atribua sua função personalizada a uma conta de serviço que usará essa permissão. Use o seguinte comando:
Substitua [YOUR_PROJECT_ID]
e [SERVICE_ACCOUNT_EMAIL]
pelo seu ID de projeto e pelo email da conta de serviço, respectivamente.
Última actualización