4P by GN⁺ | ★ favorite | 댓글과 토론
  • AI를 시켜 Google의 API를 끊임없이 자동으로 찔러보게 한 결과, 3개월 만에 50만 달러의 버그 바운티 수익을 올린 보안 연구 사례
  • 60,000개 이상의 Android 앱에서 긁어모은 API 키와 Google의 API 명세서(discovery document) 를 결합해, 외부에 잘 알려지지 않은 것까지 1,500개 이상의 API를 테스트 대상으로 확보
  • Claude 기반 AI에 API 테스트 도구를 연결해 사람처럼 요청을 보내고, 권한 확인이 빠진 접근 제어 취약점을 자동으로 찾아내도록 구성
  • Google Voice 계정 탈취, YouTube 비공개 영상 유출, Widevine DRM 키 노출, Nest 기기 소유자 신원 추적 등 심각한 취약점 다수 발견
  • 대부분은 정교한 공격이 아니라 권한 검사 누락, 인증 없는 API, 실제 데이터를 그대로 노출한 테스트 환경 같은 반복되는 기본 실수에서 비롯

연구의 출발점

  • 2025년 10월 bugSWAT Mexico 초청을 계기로 Google 대상 연구에 다시 집중, Google 소스 코드를 일부 들여다볼 수 있다는 점이 흥미를 자극
  • 지난 1년간 Claude로 소규모 프로젝트를 만들며, AI로 Google API를 대규모로 자동 테스트하는 데 활용 여지가 크다고 판단
  • 핵심 진입점은 discovery document — Google판 Swagger 문서로, 모든 엔드포인트·파라미터·메서드를 기계가 읽을 수 있게 기술
    • YouTube Data API처럼 공개된 것도 있으나, Internal People API 같은 내부 API에도 존재
    • 일부는 그냥 접근 가능하지만, 대부분은 유효한 API 키 필요

API 키 모으기

  • 한 서비스에서 찾은 키가 같은 GCP 프로젝트의 여러 다른 API에도 활성화되어 있는 경우가 많아, 키를 많이 모을수록 접근 가능한 API 범위 확대
  • 친구 Michael과 협력해 키 수집 진행
    • 모든 버전의 모든 Google 앱을 포함한 61,200개의 Android APK를 내려받아 압축 해제 후 API 키를 검색
    • Chrome Debugger API 기반 확장 프로그램으로 트래픽을 가로채, 알려진 2,800여 개 Google 웹 도메인을 방문하며 실시간 요청에서 키 수집
    • Google iOS 앱(IPA) 복호화와 입수 가능한 Google 바이너리 분석도 병행
  • Google 키만 골라내기

    • VRP 범위를 지키기 위해 Cloud Marketplace API로 키에 연결된 프로젝트 정보를 조회해 비-Google 키 제거
    • 키를 권한 없는 API에 써보면 반환되는 오류에 프로젝트 번호가 노출됨 (예: "...in project 244648151629...")
    • 이 번호로 조회하면 company 필드가 프로젝트 소유 도메인을 알려줘, google.com(및 nest.com·fitbit.com·wing.com 등 인수 기업) 외 키를 폐기

살아있는 Google API 도메인 찾기

  • 확장 프로그램이 기록한 도메인, 키워드 기반 무차별 생성, 인증서 투명성 로그(certificate transparency) 를 조합해 후보 도메인 확보
  • 각 도메인에 요청을 보내 Server 헤더가 ESF·GSE·scaffolding on HTTPServer2 중 하나면, 살아있는 유효 Google API로 판정

숨겨진 명세서까지 긁어내기

  • 2025년 7월 Google이 대부분 API에서 /$discovery/rest 경로를 제거했으나, 일부는 우회 가능
  • Visibility Label로 숨겨진 엔드포인트

    • 특정 프로젝트는 visibility label이 켜져 있어, labels 파라미터를 줘야만 보이는 숨겨진 엔드포인트 접근 가능
    • Service Management API 명세서를 라벨 없이 받으면 253KB, ?labels=GOOGLE_INTERNAL을 붙이면 329KB로 늘며 숨겨진 문서가 대량 노출
    • 라벨은 한 번에 하나만 받아, 모든 라벨·모든 키·모든 API 조합을 시험하는 막대한 요청량 필요
  • 이렇게 1,500개 이상의 API 명세서를 확보하고, 과거 연구에서 모아둔 문서와 합쳐 AI 자동 테스트 준비 완료

인증 문제 해결

  • API 키로 "권한"은 해결됐지만, 다수 엔드포인트는 호출자가 누구인지 확인하는 인증(authentication) 도 별도로 요구
  • Bearer 토큰은 GCP 프로젝트에 묶여 있어 API 키와 섞으면 "서로 다른 프로젝트" 오류 발생, 알려진 우회법 없음
  • First Party Authentication (FPA)

    • 다수 API가 지원하는 Google 독자 인증 방식 FPA는 API 키와 함께 작동
    • 웹 요청은 세션 Cookie와 그로부터 계산한 Authorization 값을 포함하며, *.clients6.google.com 호스트로 전송
    • drivefrontend-pa 같은 일부 API는 이메일 등 사용자 식별자를 해시에 넣는 더 완전한 FPA v2 헤더 요구
    • Michael이 Google이 한동안 실수로 유출한 sourcemap을 발견, 내부 gapix 라이브러리에서 FPA v2 헤더 생성 코드 확보
  • 토큰 구조와 Gaia ID

    • 토큰 형식은 <timestamp>_<hash>_<식별자키>이며, SHA1 입력은 "email:gaiaId timestamp sessionCookie origin"
    • 식별자 키는 e(이메일)·u(난독화 Gaia ID)·a(Workspace 도메인) 세 개뿐이고, 다른 글자는 백엔드가 무시
    • Gaia는 "Google Accounts and ID Administration"의 약자로, 모든 계정은 순차적인 unobfuscated Gaia ID(예: 131337133377)와 긴 난독화 ID 보유
  • Origin 화이트리스트와 키 제한

    • 다수 API는 허용 Origin 목록을 두며, 비허용 origin 사용 시 쿠키 문제로 오해되는 SESSION_COOKIE_INVALID 오류 반환
    • 키에는 Server·Browser·Android·iOS 네 가지 제한이 있어, Browser는 Referer, iOS는 X-Ios-Bundle-Identifier, Android는 X-Android-Package와 인증서 지문 일치 필요
    • 키 수집 시 이 값들도 함께 저장해 무차별 대입을 동일 프로그램에 통합
    • *.corp.google.com origin은 제한이 없어, 이런 API는 공개 의도가 아닌 내부 API일 가능성이 높고 버그도 많음 — 한 사례는 접근 제어 취약점으로 $9,000 수상

요청 흐름 지도와 자체 테스트 도구

  • 요청이 어느 단계(메서드 해석 → 키 유효성 → 키 제한 → 인증 → origin 검사 → label 등)에서 거부되는지 분류하는 프로그램을 만들어, 어떤 키가 어떤 API에 통하는지의 대응표 확보
  • Google의 API Explorer는 공개 API만 지원하고 비공개라 직접 쓸 수 없어, FPA v2까지 지원하는 자체 API Explorer를 약 일주일에 걸쳐 제작
    • 명세서를 클라이언트에서 파싱해 유효 요청/응답 JSON을 자동 구성, 임의 페이로드를 빠르게 시험하는 UI 제공
    • 데모에 쓰인 엔드포인트는 assignedTams(기술 계정 관리자) 를 유출하는 접근 제어 버그로 $6,000 수상

AI 자동 테스트 구성

  • 목표는 기본적인 접근 제어 이슈를 AI가 자동 발견하고, 이후 사람이 더 심각한 취약점으로 확대하는 것
  • 프론트엔드의 JSON 파싱 코드를 MCP 도구로 AI에 연결해, 사람처럼 API를 테스트하게 구성
  • 더 철저하게, 더 조용하게

    • 초기엔 AI가 몇 번 찔러보고 일찍 끝내, Ralph Wiggum loop로 모든 엔드포인트를 최소 1회 테스트해야 종료 가능하도록 강제
    • 엔드포인트를 논리적 그룹으로 먼저 분류해 그룹 단위로 테스트하고, 앞 그룹의 발견을 뒷 그룹에 공유
    • probe_api 입력을 endpoint·path·body 중심으로 단순화하고, 복잡한 FPA 인증은 백엔드가 처리해 AI는 페이로드 작성에만 집중
    • 키마다 응답이 다를 수 있어 모든 키로 동일 요청을 자동 전송하고, 같은 응답은 해시로 묶어 정리
    • "Method not found" 같은 헷갈리는 오류를 MISSING_REQUIRED_VISIBILITY_LABEL 등으로 번역해 AI 혼란 방지
  • 잡음과 검증 문제 해결

    • 초기엔 진짜 버그가 90% 잡음에 묻혀, 검증의 어려움과도한 오탐 두 가지가 핵심 문제로 부상
    • 보고서에 실제 요청을 가리키는 operation ID를 넣어, 프론트엔드에서 "Play"로 재현 가능하게 만들어 조작 불가능한 증거 확보
    • 한 달 넘게 시스템 프롬프트를 다듬어 보고 기준을 명확화 — 타 사용자 데이터 접근이나 4xx가 와야 할 곳의 2xx만 보고, 단순 존재 열거(existence enumeration) 는 취약점에서 제외
    • 이후 AI가 50% 이상 정확도로 버그를 대량 발견, 유일한 제약은 보유 API 키 수량

발견된 주요 취약점

  • 3개월 미만 실행으로 $500,000 상당 버그 발견, 아래는 수정 완료된 대표 사례
  • Google Voice 계정 탈취

    • gfibervoice-pa에 접근 제어가 전혀 없어, 인증조차 없는 한 줄 curl로 피해자의 unobfuscated Gaia ID만 알면 전화번호·알림 주소 등 PII 전체 덤프
    • 응답에서 피해자의 Google 계정 복구 전화번호까지 확인 가능 (특정 조건에서만 노출, 정확한 조건은 Google 비공개)
    • 임의 계정에 Voice 번호를 강제 할당하는 엔드포인트도 존재 (500 오류가 떠도 번호는 실제 추가됨), SIM 스왑 가능성 있는 엔드포인트도 발견
    • P0/S0 분류 후 수시간 내 패치, $20,000 수상
    • 패치 직후 /btz 등 인트라넷 전용 zhandler 노출 발견, /flagz 도달 시 실행 서비스에서 API 키 추출 가능
  • AdExchange 계정 탈취

    • 단일 요청으로 전체 AdExchange 계정 목록을 덤프하는 엔드포인트 발견
    • 프로덕션에서 막힌 계정 엔드포인트가 스테이징 환경에서 접근 제어 없이 작동했고, 그 스테이징이 실제 프로덕션 데이터를 가리킴
    • 임의 계정에 자신을 ADMIN으로 추가하는 것도 가능, 두 건 보고로 총 $30,000 수상
  • eldar.corp.google.com

    • 내부 프라이버시 평가 관리용 Googler 전용 사이트 Eldar의 API가 외부에 노출되어, 비-Googler가 내부 로그 접근 요청 등 민감 정보 조회 가능
    • 차단 후에도 다른 샌드박스 주소로 도달 가능함을 추가 통보, 총 $26,674 수상
  • YouTube 비공개 영상 유출

    • 영상 업로드 시 만들어지는 asset 이름이 Auto generated asset - <video_id> 형식이라, 검색만으로 비공개 영상 ID가 유출되어 시청 가능
    • 30초마다 요청하면 파트너 업로드 비공개 영상의 실시간 피드 확보 가능 — 기업이 제품 발표 영상을 사전 비공개로 올리는 점을 이용해 예측 시장에서 내부자 베팅에 악용될 수 있는 실질적 위협
    • $12,000 수상 (보고서 품질 우수)
  • Widevine DRM 키 노출

    • Disney·Netflix 등이 쓰는 세계 최대 규모 DRM Widevine의 파트너 포털 API가 공개 접근 가능
    • 전체 조직 목록 덤프, 특정 조직의 PGP·AES 키 조회 및 복호화, 임의 조직에 자신을 추가해 기기 관리까지 가능
    • $16,004.40 수상 (보고서 품질 우수)
  • plx.corp.google.com

    • 직원 전용 내부 분석 플랫폼 PLX의 기반 DataHub API가 노출되어, 활성 직원 정보 테이블 메타데이터 조회 가능
    • 스테이징 API에서 setIamPolicy데이터셋 admin을 자가 추가해, 기밀 YouTube 데이터(최대 2.1PB 규모 테이블 포함) 덤프 가능
    • 1시간 내 P0/S0 인정, 두 취약점 각 $12,000씩 수상

Translation Hub의 교차 테넌트 취약점

  • 대규모 문서 번역 관리 제품 Translation Hub에서 다수의 접근 제어 이슈 발견
  • ListOperations가 OAuth 토큰 없이 작동해, 내부 서비스 계정명·GCS 버킷명·내부 테이블명 유출
  • 아무 Google 계정의 bearer 토큰만으로 번역가 이메일·작업 기밀 파일명 등 타 프로젝트 데이터 조회 가능
  • UpdateProjectConfig로 피해자 설정을 임의 GCS 경로로 바꾸면, 공유 서비스 계정 권한을 악용해 비공개 GCS 객체를 base64로 빼내기 가능
  • 세 버그 합산 총 $36,500 수상

YouTube TV CMS

  • 임의 영상을 strike·claim·monetize할 수 있는 YouTube CMS 계정용 API에서, campaign 엔드포인트가 호출자 관계를 전혀 검사하지 않음
  • GET /v1/campaigns가 스코핑 없이 시스템의 모든 campaign을 전역 덤프하고, 수정·복사·삭제도 ID만으로 가능
  • 부산물로 민감한 CMS 계정 이메일이 유출, $24,000 수상 (보고서 품질 우수)

Vertex AI Search for Commerce

  • 리테일 검색·추천 제품의 conversationalSearchCustomizationConfig가 접근 제어 없이 임의 프로젝트 설정을 읽기·수정 허용
  • 읽기 시 고객의 시스템 프롬프트(모델 preamble) 와 내부 정책 메모가 달린 분류 예시 노출
  • 쓰기 시 고객 대면 검색 AI의 시스템 프롬프트에 프롬프트 인젝션 페이로드 주입 가능, $30,000 수상

Cloud Console GraphQL

  • 인터넷에 미공개인 내부 서비스도 프록시 표면을 통해 간접 도달 가능하며, Cloud Console(코드명 Pantheon)은 GraphQL로 gRPC 백엔드를 프록시
  • 서명 검증 우회

    • 각 요청은 쿼리 서명(querySignature)을 검증해 조작이 어려우나, 스테이징의 인증 없는 쿼리는 서명을 검증하지 않음을 발견
    • introspection으로 3,448개 스키마를 긁어 GitHub에 아카이브하고, "query path" 개념을 도입해 기존 AI 퍼징 인프라에 GraphQL 통합
  • App Engine 요청 로그

    • GetDashboardAppStats가 IAM 검증 없이(인증조차 불필요) 임의 프로젝트의 24시간 App Engine 로그 반환
    • 요청 URL에 비밀번호 재설정 링크·토큰 등이 포함될 수 있어, $18,000 수상 및 CVE-2026-8934 할당
  • Vertex Assistant

    • 5GB 프론트엔드 JS를 분석해 숨겨진 실험 기능 Vertex Assistant를 특정, 피처 플래그를 DevTools에서 강제 활성화
    • 관련 쿼리 전부가 인증 없이 userId만으로 작동해, 대상 이메일만 알면 세션 목록·전체 대화 기록 조회 및 변경 가능, $30,000 수상
  • Maps Platform 빌링 크레딧

    • ListBillingAccountCredits가 권한 검사 없이 작동, 와일드카드로 다수 고객의 크레딧 정보 반환
    • Google 직원이 승인 시 적은 고객 PII가 justification 필드에 그대로 노출, $12,000 수상

마무리와 교훈

  • 3개월간 이 설정으로 $500,000 이상의 바운티 확보, 게재된 것은 일부에 불과
  • 대부분의 Google 버그는 정교한 익스플로잇이 아닌 인내가 핵심이며, 동일한 깨진 패턴이 도처에 반복 — IAM 체크 누락, 인증 없는 GraphQL, 프로덕션의 디버그 엔드포인트, 실제 데이터를 가리키는 샌드박스
  • AI의 역할은 참신함이 아니라, 사람이 끝까지 다루기엔 너무 넓은 표면에서 명백한 것을 지치지 않고 반복 검증하는 것
  • 핵심 시사점
    • operation_id 재현 시스템이 워크플로를 생산적으로 만든 결정적 요소 — 원클릭 확인 없이는 AI 출력은 쓸모없는 잡음
    • discovery doc·GraphQL SDL·proto를 확보하면 AI가 의미 있게 테스트할 입력을 파악
    • Google의 서버 사이드 표면은 매우 표준화되어 있어, 인프라 특이점을 AI에서 추상화하면 실제 API 테스트에 더 집중 가능

댓글과 토론