GCP - AppEngine Privesc

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

Outras maneiras de apoiar o HackTricks:

App Engine

Para mais informações sobre o App Engine, consulte:

pageGCP - App Engine Enum

appengine.applications.get, appengine.instances.get, appengine.instances.list, appengine.operations.get, appengine.operations.list, appengine.services.get, appengine.services.list, appengine.versions.create, appengine.versions.get, appengine.versions.list, cloudbuild.builds.get,iam.serviceAccounts.actAs, resourcemanager.projects.get, storage.objects.create, storage.objects.list

Essas são as permissões necessárias para implantar um App usando o gcloud cli. Talvez as permissões get e list possam ser evitadas.

Você pode encontrar exemplos de código em Python em https://github.com/GoogleCloudPlatform/python-docs-samples/tree/main/appengine

Por padrão, o nome do serviço do App será default, e pode haver apenas 1 instância com o mesmo nome. Para alterá-lo e criar um segundo App, em app.yaml, altere o valor da chave raiz para algo como service: my-second-app

cd python-docs-samples/appengine/flexible/hello_world
gcloud app deploy #Upload and start application inside the folder

Dê pelo menos 10-15 minutos, se não funcionar chame implantar outra vez algumas vezes e espere alguns minutos.

É possível indicar a Conta de Serviço a ser usada, mas por padrão, a Conta de Serviço padrão do App Engine é usada.

A URL da aplicação é algo como https://<nome-proj>.oa.r.appspot.com/ ou https://<nome-servico>-dot-<nome-proj>.oa.r.appspot.com

appengine.instances.enableDebug, appengine.instances.get, appengine.instances.list, appengine.operations.get, appengine.services.get, appengine.services.list, appengine.versions.get, appengine.versions.list, compute.projects.get

Com essas permissões, é possível fazer login via ssh nas instâncias do App Engine do tipo flexível (não padrão). Algumas das permissões de list e get podem não ser realmente necessárias.

gcloud app instances ssh --service <app-name> --version <version-id> <ID>

appengine.applications.update, appengine.operations.get

Acredito que isso apenas altera o SA de fundo que o Google usará para configurar as aplicações, então não acho que você possa abusar disso para roubar a conta de serviço.

gcloud app update --service-account=<sa_email>

appengine.versions.getFileContents, appengine.versions.update

Não tenho certeza de como usar essas permissões ou se são úteis (observe que ao alterar o código uma nova versão é criada, então não sei se você pode simplesmente atualizar o código ou a função IAM de um, mas acredito que você deveria ser capaz de, talvez alterando o código dentro do bucket??).

Acesso de escrita sobre os buckets

Mesmo com acesso de escrita sobre os buckets onde o código-fonte está localizado NÃO FOI possível executar código arbitrário modificando o código-fonte e o manifest.json. Talvez se você estiver monitorando o bucket e detectar o momento em que uma nova versão é criada e o código-fonte e o manifesto são enviados, talvez seja possível alterá-los para que a nova versão use os comprometidos??

Também parece que as camadas de contêiner são armazenadas no bucket, talvez alterando essas?

Última actualización