GCP - AppEngine Privesc

htARTE (HackTricks AWS Red Team Expert)에서 **제로부터 영웅까지 AWS 해킹 배우기**!

다른 방법으로 HackTricks를 지원하는 방법:

App Engine

App Engine에 대한 자세한 정보는 다음을 확인하세요:

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

gcloud cli를 사용하여 App를 배포하는 데 필요한 권한입니다. getlist 권한은 회피할 수 있습니다.

Python 코드 예제는 https://github.com/GoogleCloudPlatform/python-docs-samples/tree/main/appengine에서 찾을 수 있습니다.

기본적으로 App 서비스의 이름은 **default**이며, 동일한 이름을 가진 인스턴스는 1개만 있을 수 있습니다. 이를 변경하고 두 번째 App을 만들려면 **app.yaml**에서 루트 키의 값을 **service: my-second-app**과 같이 변경하세요.

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

적어도 10-15분 기다려보세요. 작동하지 않으면 여러 번 배포를 시도하고 몇 분 기다리세요.

사용할 서비스 계정을 지정하는 것이 가능하지만 기본적으로 App Engine 기본 SA가 사용됩니다.

애플리케이션의 URL은 https://<proj-name>.oa.r.appspot.com/ 또는 https://<service_name>-dot-<proj-name>.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

이러한 권한을 가지고 있으면 유연 유형의 App Engine 인스턴스에 ssh로 로그인할 수 있습니다. 일부 listget 권한은 실제로 필요하지 않을 수 있습니다.

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

appengine.applications.update, appengine.operations.get

이것은 배경 SA를 변경하여 애플리케이션을 설정할 때 Google이 사용할 것으로 생각되므로 서비스 계정을 훔치기 위해 이를 남용할 수 없을 것 같습니다.

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

appengine.versions.getFileContents, appengine.versions.update

이 권한을 어떻게 사용해야 하는지 확실하지 않거나 유용한지 모릅니다 (코드를 변경하면 새 버전이 생성되므로 코드를 업데이트하거나 하나의 IAM 역할을 업데이트할 수 있는지 모르겠습니다. 그러나 아마도 버킷 내부의 코드를 변경할 수 있을 것입니다??).

버킷에 대한 쓰기 액세스

소스 코드가 있는 버킷에 대한 쓰기 액세스가 있더라도 소스 코드와 manifest.json을 수정하여 임의의 코드를 실행하는 것은 불가능했습니다. 새 버전이 생성되고 소스 코드와 매니페스트가 업로드되는 시점을 감지하고, 그것들을 변경하여 새 버전이 백도어된 것을 사용하도록 할 수 있다면 가능할 수도 있습니다??

컨테이너 레이어도 버킷에 저장되어 있는 것으로 보이는데, 아마도 그것들을 변경할 수 있을까요?

最終更新