GCP - Cloud Functions Enum

Aprenda hacking na AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!

Outras maneiras de apoiar o HackTricks:

Funções na Nuvem

Google Cloud Functions são projetadas para hospedar seu código, que é executado em resposta a eventos, sem a necessidade de gerenciar um sistema operacional hospedeiro. Além disso, essas funções suportam o armazenamento de variáveis de ambiente, que o código pode utilizar.

Armazenamento

O código das Cloud Functions é armazenado no GCP Storage. Portanto, qualquer pessoa com acesso de leitura aos buckets no GCP poderá ler o código das Cloud Functions. O código é armazenado em um bucket como:

gcf-sources-<número>-<região>/<nome-da-função>-<uuid>/versão-<n>/código-da-função.zip por exemplo: gcf-sources-645468741258-us-central1/function-1-003dcbdf-32e1-430f-a5ff-785a6e238c76/version-4/código-da-função.zip

Qualquer usuário com privilégios de escrita sobre o bucket que armazena a Cloud Function poderia sobrescrever o código executado.

SA

Se não especificado, por padrão a Conta de Serviço Padrão do App Engine com permissões de Editor sobre o projeto será anexada à Cloud Function.

Disparadores, URL e Autenticação

Quando uma Cloud Function é criada, o disparador precisa ser especificado. Um comum é HTTPS, isso irá criar uma URL onde a função pode ser acionada via navegação na web. Outros disparadores são pub/sub, Storage, Filestore...

O formato da URL é https://<região>-<nome-do-projeto-gcp>.cloudfunctions.net/<nome_da_func>

Quando o disparador HTTPS é usado, também é indicado se o chamador precisa ter autorização IAM para chamar a Função ou se qualquer pessoa pode simplesmente chamá-la:

Dentro da Cloud Function

O código é baixado dentro da pasta /workspace com os mesmos nomes de arquivo que os arquivos têm na Cloud Function e é executado com o usuário www-data. O disco não é montado como somente leitura.

Enumeração

# List functions
gcloud functions list
gcloud functions describe <func_name> # Check triggers to see how is this function invoked
gcloud functions get-iam-policy <func_name>

# Get logs of previous runs. By default, limits to 10 lines
gcloud functions logs read <func_name> --limit [NUMBER]

# Call a function
curl https://<region>-<project>.cloudfunctions.net/<func_name>
gcloud functions call <func_name> --data='{"message": "Hello World!"}'

# If you know the name of projects you could try to BF cloud functions names

# Get events that could be used to trigger a cloud function
gcloud functions event-types list

# Access function with authentication
curl -X POST https://<region>-<project>.cloudfunctions.net/<func_name> \
-H "Authorization: bearer $(gcloud auth print-identity-token)" \
-H "Content-Type: application/json" \
-d '{}'

Escalação de Privilégios

Na página a seguir, você pode verificar como abusar das permissões da função na nuvem para escalar privilégios:

pageGCP - Cloudfunctions Privesc

Acesso não autenticado

pageGCP - Cloud Functions Unauthenticated Enum

Pós-Exploração

pageGCP - Cloud Functions Post Exploitation

Persistência

pageGCP - Cloud Functions Persistence

Referências

Aprenda hacking AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!

Outras maneiras de apoiar o HackTricks:

Última actualización