# 구글을 AI로 해킹해서 7억원 벌기

> Clean Markdown view of GeekNews topic #30741. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=30741](https://news.hada.io/topic?id=30741)
- GeekNews Markdown: [https://news.hada.io/topic/30741.md](https://news.hada.io/topic/30741.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2026-06-23T09:15:02+09:00
- Updated: 2026-06-23T09:15:02+09:00
- Original source: [brutecat.com](https://brutecat.com/articles/hacking-google-with-ai/)
- Points: 8
- Comments: 1

## Topic Body

- 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  
  - 토큰 형식은 `&lt;timestamp&gt;_&lt;hash&gt;_<식별자키>`이며, 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 테스트에 더 집중 가능

## Comments



### Comment 60205

- Author: j2sus91
- Created: 2026-06-23T13:09:59+09:00
- Points: 1

바이브코딩의 진정한 신개념 수익이네요
