GCP - local privilege escalation ssh pivoting

HackTricks 지원하기

이 시나리오에서는 Compute Engine 프로젝트 내의 VM에서 비특권 계정을 침해했다고 가정합니다.

놀랍게도, 침해한 Compute Engine의 GCP 권한이 머신 내에서 로컬 권한을 상승시키는 데 도움이 될 수 있습니다. 클라우드 환경에서는 항상 유용하지 않을 수 있지만, 가능하다는 것을 아는 것은 좋습니다.

스크립트 읽기

Compute Instances는 아마도 서비스 계정으로 작업을 수행하기 위해 스크립트를 실행하기 위해 존재합니다.

IAM이 세분화되어 있기 때문에, 계정은 리소스에 대해 읽기/쓰기 권한을 가질 수 있지만 목록 권한은 없을 수 있습니다.

이의 훌륭한 가상 예는 instance82736-long-term-xyz-archive-0332893라는 스토리지 버킷에 백업을 읽고 쓸 수 있는 권한이 있는 Compute Instance입니다.

명령줄에서 gsutil ls를 실행하면 아무것도 반환되지 않으며, 서비스 계정이 storage.buckets.list IAM 권한이 부족하기 때문입니다. 그러나 gsutil ls gs://instance82736-long-term-xyz-archive-0332893를 실행하면, 로컬 Linux 계정이 부족한 데이터에 대한 평문 접근을 제공하는 전체 파일 시스템 백업을 찾을 수 있습니다.

이 버킷 이름은 스크립트(예: bash, Python, Ruby 등) 내에서 찾을 수 있습니다.

사용자 정의 메타데이터

관리자는 인스턴스프로젝트 수준에서 사용자 정의 메타데이터를 추가할 수 있습니다. 이는 임의의 키/값 쌍을 인스턴스로 전달하는 방법이며, 환경 변수 및 시작/종료 스크립트에 일반적으로 사용됩니다.

또한, 사용자 데이터를 추가할 수 있으며, 이는 머신이 시작되거나 재시작될 때마다 실행되는 스크립트이며, 메타데이터 엔드포인트에서도 접근할 수 있습니다.

자세한 정보는 다음을 확인하세요:

IAM 권한 남용하기

다음에 제안된 대부분의 권한은 기본 Compute SA에 부여됩니다. 유일한 문제는 기본 액세스 범위가 SA가 이를 사용하는 것을 방지한다는 것입니다. 그러나 cloud-platform 범위가 활성화되거나 compute 범위만 활성화되면, 이를 남용할 수 있습니다.

다음 권한을 확인하세요:

파일 시스템에서 키 검색하기

다른 사용자가 박스 내에서 gcloud에 로그인하고 파일 시스템에 자격 증명을 남겼는지 확인하세요:

sudo find / -name "gcloud"

이것들은 가장 흥미로운 파일들입니다:

  • ~/.config/gcloud/credentials.db

  • ~/.config/gcloud/legacy_credentials/[ACCOUNT]/adc.json

  • ~/.config/gcloud/legacy_credentials/[ACCOUNT]/.boto

  • ~/.credentials.json

더 많은 API 키 정규 표현식

TARGET_DIR="/path/to/whatever"

# Service account keys
grep -Pzr "(?s){[^{}]*?service_account[^{}]*?private_key.*?}" \
"$TARGET_DIR"

# Legacy GCP creds
grep -Pzr "(?s){[^{}]*?client_id[^{}]*?client_secret.*?}" \
"$TARGET_DIR"

# Google API keys
grep -Pr "AIza[a-zA-Z0-9\\-_]{35}" \
"$TARGET_DIR"

# Google OAuth tokens
grep -Pr "ya29\.[a-zA-Z0-9_-]{100,200}" \
"$TARGET_DIR"

# Generic SSH keys
grep -Pzr "(?s)-----BEGIN[ A-Z]*?PRIVATE KEY[a-zA-Z0-9/\+=\n-]*?END[ A-Z]*?PRIVATE KEY-----" \
"$TARGET_DIR"

# Signed storage URLs
grep -Pir "storage.googleapis.com.*?Goog-Signature=[a-f0-9]+" \
"$TARGET_DIR"

# Signed policy documents in HTML
grep -Pzr '(?s)<form action.*?googleapis.com.*?name="signature" value=".*?">' \
"$TARGET_DIR"

References

HackTricks 지원하기

Last updated