이 권한을 가진 공격자는 Docker 이미지와 같은 악성 코드가 포함된 아티팩트의 새 버전을 업로드할 수 있습니다:
# Configure docker to use gcloud to authenticate with Artifact Registrygcloudauthconfigure-docker<location>-docker.pkg.dev# tag the image to upload itdockertag<local-img-name>:<local-tag><location>-docker.pkg.dev/<proj-name>/<repo-name>/<img-name>:<tag># Upload itdockerpush<location>-docker.pkg.dev/<proj-name>/<repo-name>/<img-name>:<tag>
이미 존재하는 것과 동일한 이름과 태그를 가진 새로운 악성 docker 이미지를 업로드하는 것이 가능하다는 것이 확인되었습니다, 따라서 이전 이미지는 태그를 잃게 되고 다음에 해당 태그로 다운로드될 때 악성 이미지가 다운로드됩니다.
Python 라이브러리 업로드
업로드할 라이브러리를 생성하는 것부터 시작합니다 (레지스트리에서 최신 버전을 다운로드할 수 있다면 이 단계를 건너뛸 수 있습니다):
프로젝트 구조 설정:
라이브러리를 위한 새 디렉토리를 생성합니다, 예: hello_world_library.
이 디렉토리 안에 패키지 이름으로 또 다른 디렉토리를 생성합니다, 예: hello_world.
패키지 디렉토리 안에 __init__.py 파일을 생성합니다. 이 파일은 비어있거나 패키지 초기화를 포함할 수 있습니다.
이미 존재하는 버전과 동일한 버전의 파이썬 라이브러리를 업로드하는 것은 불가능하지만, 더 높은 버전을 업로드하거나 (작동한다면 버전 끝에 .0을 추가할 수 있음 - 파이썬에서는 아님), 또는 마지막 버전을 삭제하고 새로운 버전을 업로드할 수 있습니다 (필요한 artifactregistry.versions.delete):
# Configure docker to use gcloud to authenticate with Artifact Registrygcloudauthconfigure-docker<location>-docker.pkg.dev# Dowload imagedockerpull<location>-docker.pkg.dev/<proj-name>/<repo-name>/<img-name>:<tag>
이 권한을 가진 공격자는 이전에 언급된 일부 리포지토리 공격을 수행할 수 있는 권한을 스스로 부여할 수 있습니다.
Artifact Registry 읽기 및 쓰기를 통한 다른 서비스로의 피벗
Cloud Functions
Cloud Function이 생성될 때 새로운 도커 이미지가 프로젝트의 Artifact Registry에 푸시됩니다. 나는 이미지를 새로운 것으로 수정하려고 시도했으며, 현재 이미지를 삭제하고(cache 이미지도) 아무것도 변경되지 않았습니다. 클라우드 함수는 계속 작동합니다. 따라서, 아마도 버킷과 같은 경쟁 조건 공격을 악용하여 실행될 도커 컨테이너를 변경할 수 있을지도 모릅니다. 그러나 저장된 이미지를 수정하는 것만으로는 Cloud Function을 손상시킬 수 없습니다.
App Engine
App Engine이 Artifact Registry 내에서 도커 이미지를 생성하더라도, 이 서비스 내에서 이미지를 수정하고 App Engine 인스턴스를 제거(새 인스턴스가 배포됨)하더라도실행되는 코드는 변경되지 않습니다.
버킷과 같은 경쟁 조건 공격을 수행하면 실행되는 코드를 덮어쓸 수 있을지도 모르지만, 이는 테스트되지 않았습니다.