GCP - Cloudfunctions Privesc
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Mais informações sobre Cloud Functions:
GCP - Cloud Functions Enumcloudfunctions.functions.create
, cloudfunctions.functions.sourceCodeSet
, iam.serviceAccounts.actAs
Um atacante com esses privilégios pode criar uma nova Cloud Function com código arbitrário (malicioso) e atribuí-la a uma Service Account. Em seguida, vazar o token da Service Account a partir dos metadados para escalar privilégios para ela. Alguns privilégios para acionar a função podem ser necessários.
Scripts de exploração para este método podem ser encontrados aqui e aqui e o arquivo .zip pré-construído pode ser encontrado aqui.
cloudfunctions.functions.update
, cloudfunctions.functions.sourceCodeSet
, iam.serviceAccounts.actAs
Um atacante com esses privilégios pode modificar o código de uma Function e até mesmo modificar a service account anexada com o objetivo de exfiltrar o token.
Para implantar funções em nuvem, você também precisará de permissões actAs sobre a service account padrão de computação ou sobre a service account que é usada para construir a imagem.
Alguns privilégios extras, como a permissão .call
para a versão 1 de cloudfunctions ou o papel role/run.invoker
para acionar a função, podem ser necessários.
Se você receber o erro Permission 'run.services.setIamPolicy' denied on resource...
é porque você está usando o parâmetro --allow-unauthenticated
e não tem permissões suficientes para isso.
O script de exploração para este método pode ser encontrado aqui.
cloudfunctions.functions.sourceCodeSet
Com esta permissão, você pode obter uma URL assinada para poder fazer o upload de um arquivo para um bucket de função (mas o código da função não será alterado, você ainda precisa atualizá-lo)
Não tenho certeza de quão útil apenas esta permissão é do ponto de vista de um atacante, mas é bom saber.
cloudfunctions.functions.setIamPolicy
, iam.serviceAccounts.actAs
Dê a si mesmo qualquer um dos privilégios anteriores .update
ou .create
para escalar.
cloudfunctions.functions.update
Ter apenas permissões de cloudfunctions
, sem iam.serviceAccounts.actAs
, você não poderá atualizar a função, ENTÃO ISTO NÃO É UM VÁLIDO PRIVESC.
Se você tiver acesso de leitura e escrita sobre o bucket, pode monitorar mudanças no código e sempre que uma atualização no bucket acontecer, você pode atualizar o novo código com seu próprio código para que a nova versão da Cloud Function seja executada com o código backdoored enviado.
Você pode verificar mais sobre o ataque em:
GCP - Storage PrivescNo entanto, você não pode usar isso para pré-comprometer Cloud Functions de terceiros, porque se você criar o bucket em sua conta e der permissões públicas para que o projeto externo possa escrever sobre ele, você recebe o seguinte erro:
No entanto, isso pode ser usado para ataques DoS.
Quando uma Cloud Function é criada, uma nova imagem docker é enviada para o Artifact Registry do projeto. Tentei modificar a imagem com uma nova e até mesmo excluir a imagem atual (e a imagem cache
), e nada mudou, a cloud function continuou funcionando. Portanto, talvez possa ser possível abusar de um ataque de Condição de Corrida como com o bucket para mudar o contêiner docker que será executado, mas apenas modificar a imagem armazenada não é possível para comprometer a Cloud Function.
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)