무슨 일이 있었나
Palo Alto Networks Unit 42는 Google Cloud의 Vertex AI Python SDK의 설계 결함을 발견하고 책임감 있게 공시했습니다(2026년 3월 5일 보고, 2026년 4월 15일 패치, ~2026년 6월 16일 공개 공시). 영향을 받는 SDK 버전 1.139.0 및 1.140.0은 버킷 소유권을 확인하지 않고 결정적 GCS 스테이징 버킷 이름을 생성했습니다. Python의 ML 모델 로딩에서 안전하지 않은 pickle 역직렬화와 결합하면, 공격자는 버킷을 선제적으로 클레임하고, 경쟁 조건 윈도우에서 악성 모델 아티팩트를 주입하며, Google의 다중 테넌트 서빙 인프라 내에서 코드 실행을 달성할 수 있습니다. Unit 42는 BigQuery 메타데이터 및 기타 내부 리소스에 대한 액세스 권한을 부여하는 OAuth 토큰의 유출을 입증했습니다.
왜 중요한가
이 공격은 피해자의 클라우드 프로젝트에 대한 액세스를 요구하지 않습니다. 단지 공개 프로젝트 ID와 지역만 필요합니다. 이는 ML 모델 업로드 파이프라인이 새로운 RCE 표면임을 입증합니다. 서빙 컨테이너에서의 pickle 역직렬화는 클라우드 서비스 계정 권한으로 임의 코드를 실행하며, 관리형 AI 플랫폼에서 테넌트 격리를 훼손합니다. 이 기법(명명 규칙 스쿼팅 + pickle RCE)은 예측 가능한 저장소 경로를 자동 생성하는 다른 ML 플랫폼으로 일반화할 수 있습니다.
공격 경로
Vertex AI Python SDK(버전 1.139.0~1.140.0)는 피해자의 프로젝트 ID와 지역에서 예측 가능한 스테이징 GCS 버킷 이름을 생성합니다(형식: project-vertex-staging-region). 자신의 Google Cloud 프로젝트를 가진 공격자는 이 버킷 이름을 선제적으로 등록합니다(버킷 스쿼팅). 피해자가 모델을 업로드할 때, SDK는 자동으로 아티팩트를 공격자의 버킷에 업로드합니다. Cloud Function이 업로드 시 트리거되어 ~2.5초의 경쟁 윈도우 내에 합법적인 모델을 악성 pickle/joblib 페이로드로 스왑합니다. Vertex AI는 독성 모델을 역직렬화하여 Google의 서빙 컨테이너 내에서 공격자의 코드를 실행하고 메타데이터 서버에서 OAuth 토큰을 유출합니다.
영향받는 시스템
google-cloud-aiplatform(Vertex AI Python SDK) 버전 1.139.0 – 1.140.0; 버전 1.144.0 및 1.148.0에서 완전히 패치됨
완화 방안
google-cloud-aiplatform을 1.148.0 이상으로 업그레이드하세요. 모델 업로드 시 자동 생성 이름에 의존하기보다는 항상 명시적으로 staging_bucket 매개변수를 설정하세요. 권고: https://unit42.paloaltonetworks.com/hijacking-vertex-ai-model/