GCP - Storage Privesc
Storage
기본 정보:
GCP - Storage Enumstorage.objects.get
storage.objects.get
이 권한은 Cloud Storage에 저장된 파일을 다운로드할 수 있게 해줍니다. 이는 경우에 따라 민감한 정보가 저장되어 있기 때문에 권한 상승을 가능하게 할 수 있습니다. 게다가, 일부 GCP 서비스는 정보를 버킷에 저장합니다:
GCP Composer: Composer 환경을 생성할 때 모든 DAG의 코드가 버킷 안에 저장됩니다. 이 작업들은 코드 안에 흥미로운 정보를 포함할 수 있습니다.
GCR (Container Registry): 컨테이너의 이미지는 버킷 안에 저장되며, 이는 버킷을 읽을 수 있다면 이미지를 다운로드하고 정보 유출 및/또는 소스 코드를 검색할 수 있음을 의미합니다.
storage.objects.setIamPolicy
storage.objects.setIamPolicy
이 권한을 통해 이 섹션의 이전 시나리오를 악용할 수 있는 권한을 부여할 수 있습니다.
storage.buckets.setIamPolicy
storage.buckets.setIamPolicy
이 권한으로 권한을 수정하는 방법에 대한 예시는 이 페이지를 확인하세요:
GCP - Public Buckets Privilege Escalationstorage.hmacKeys.create
storage.hmacKeys.create
Cloud Storage의 "상호 운용성" 기능은 AWS S3와 같은 크로스 클라우드 상호 작용을 위해 설계되었으며, 서비스 계정 및 사용자에 대한 HMAC 키 생성을 포함합니다. 공격자는 상승된 권한을 가진 서비스 계정에 대한 HMAC 키를 생성하여 Cloud Storage 내에서 권한을 상승시킬 수 있습니다. 사용자와 연결된 HMAC 키는 웹 콘솔을 통해서만 검색할 수 있지만, 접근 및 비밀 키는 영구적으로 접근 가능하여 잠재적인 백업 접근 저장소를 허용합니다. 반면, 서비스 계정에 연결된 HMAC 키는 API를 통해 접근할 수 있지만, 생성 후에는 접근 및 비밀 키를 검색할 수 없어 지속적인 접근에 대한 복잡성을 더합니다.
이 방법에 대한 또 다른 익스플로잇 스크립트는 여기에서 찾을 수 있습니다.
storage.objects.create
, storage.objects.delete
= 스토리지 쓰기 권한
storage.objects.create
, storage.objects.delete
= 스토리지 쓰기 권한버킷 내에 새 객체를 생성하려면 storage.objects.create
가 필요하며, 문서에 따르면 존재하는 객체를 수정하려면 storage.objects.delete
도 필요합니다.
클라우드에서 쓸 수 있는 버킷의 일반적인 익스플로잇은 버킷이 웹 서버 파일을 저장하는 경우로, 웹 애플리케이션에서 사용될 새 코드를 저장할 수 있습니다.
Composer
Composer는 GCP 내에서 관리되는 Apache Airflow입니다. 여러 흥미로운 기능이 있습니다:
GKE 클러스터 내에서 실행되므로, 클러스터가 사용하는 SA는 Composer 내에서 실행되는 코드에 의해 접근 가능합니다.
코드를 버킷에 저장하므로, 해당 버킷에 쓰기 권한이 있는 사람은 DGA 코드를 변경/추가할 수 있습니다 (Apache Airflow가 실행할 코드) 그런 다음, 코드 저장을 위해 Composer가 사용하는 버킷에 쓰기 권한이 있다면, GKE 클러스터에서 실행 중인 SA로 권한 상승을 할 수 있습니다.
Cloud Functions
Cloud Functions 코드는 스토리지에 저장되므로, 이를 덮어쓰면 임의의 코드를 실행할 수 있습니다.
App Engine
App Engine 소스 코드는 버킷에 저장되며, 코드를 덮어쓰면 임의의 코드를 실행할 수 있습니다. 이는 불가능합니다.
컨테이너 레이어가 버킷에 저장되는 것 같으며, 이를 변경할 수 있을까요?
GCR
Google Container Registry는 이미지를 버킷에 저장하며, 이 버킷에 쓸 수 있다면 이 버킷이 실행되는 곳으로 수평 이동할 수 있습니다.
GCR에서 사용하는 버킷의 URL은
gs://<eu/usa/asia/nothing>.artifacts.<project>.appspot.com
과 유사합니다 (최상위 하위 도메인은 여기에서 지정됩니다).
참고문헌
Last updated