AI 버그 바운티 실전: 구글을 해킹해 7억 번 진짜 방법 완벽 분석

Claude에 API 테스트 도구를 붙여 구글의 내부 API를 자동으로 찔러본 결과, 단 3개월 만에 50만 달러(약 7억 원)의 버그 바운티를 받은 실전 사례를 원문 기준으로 분석합니다. 어떻게 가능했는지, 그리고 우리 서비스도 같은 함정에 빠져 있는 건 아닌지 함께 짚어볼게요.


AI 버그 바운티로 7억을 벌었다는데, 정교한 0day였을까요?

보안 리포트를 보다 보면 늘 기대하게 되는 장면이 있어요. 메모리 커럽션, 정교한 익스플로잇 체인, 며칠 밤을 새운 리버스 엔지니어링 같은 거요. 그런데 이번에 화제가 된 사례는 정반대였습니다. 거의 대부분이 “권한 검사를 깜빡한 API” 한 줄짜리 실수에서 터졌거든요.

한 보안 연구자가 2025년 10월부터 약 3개월간 구글을 대상으로 진행한 연구인데, 핵심은 사람이 일일이 찌른 게 아니라 Claude 기반 AI에게 API 테스트를 시켰다는 점이에요. 최근 보안 업계에서 이 글이 크게 회자됐는데, 저도 원문을 끝까지 읽으면서 “이건 자동화의 방향성 자체가 바뀌는 신호”라는 생각이 들더라고요. 단순 요약을 넘어, 실제 수치와 방법론을 하나씩 뜯어보겠습니다.


⚡ 이 글의 핵심만 먼저 보기 (Key Takeaways)

  • 총 수익: 약 3개월 만에 50만 달러(약 7억 원)의 구글 버그 바운티 획득
  • 수집 규모: 61,200개 Android APK에서 API 키 3,600개를 긁어모으고, 1,500개 이상의 API 명세서를 확보
  • 핵심 도구: Claude에 API 테스트용 MCP 도구를 연결해 권한 검사 누락(접근 제어 취약점)을 자동으로 탐색
  • 가장 충격적인 점: 대부분이 0day가 아니라 인증 없는 API·테스트 환경의 실데이터 노출 같은 반복되는 기본 실수
  • 최대 단일 보상: Translation Hub 취약점 묶음이 $36,500으로 가장 컸음
  • 실무 액션: 우리 서비스의 스테이징·내부 API가 프로덕션 데이터를 보고 있지 않은지 지금 점검할 것

📌 목차

  1. 50만 달러는 어떻게 가능했나 — 전체 그림
  2. 출발점: API 키 6만 개와 숨겨진 명세서 사냥
  3. 인증의 벽 넘기: FPA v2 리버스 엔지니어링
  4. Claude를 자동 해커로 만든 5단계 셋업
  5. 실제로 터진 취약점 케이스 분석
  6. 진짜 교훈: 반복되는 기본 실수
  7. 이런 분들께 적극 추천합니다
  8. 자주 묻는 질문 (FAQ)

1. 50만 달러는 어떻게 가능했나 — 전체 그림

먼저 큰 그림부터요. 이 연구는 2025년 10월 bugSWAT Mexico 초청을 계기로 다시 불붙었고, 약 3개월간의 집중 테스트 끝에 총 50만 달러의 보상으로 이어졌어요. 출발점은 화려한 기술이 아니라 단순한 가정 하나였습니다. “구글에는 외부에 잘 알려지지 않은 API가 엄청나게 많고, 그중 일부는 권한 검사가 비어 있을 것이다.”

문제는 그 “엄청나게 많은 API”를 사람이 다 못 본다는 거예요. 그래서 등장한 게 AI입니다. 키를 모으고, 살아있는 API 도메인을 찾고, 명세서를 확보한 뒤, Claude에게 사람처럼 요청을 보내며 접근 제어 구멍을 찾게 한 거죠.

① Scale over depth — 깊이보다 규모로 승부한 전략

이 연구의 본질은 “한 방의 천재적 익스플로잇”이 아니라 지치지 않는 반복이에요. 1,500개 API × 수천 개 키 × 여러 인증 조합을 사람이 손으로 돌리면 평생 걸리지만, AI는 밤새 묵묵히 돌릴 수 있거든요.

💡 실제 활용 시나리오 예시:
보안팀이 수백 개 마이크로서비스를 운영 중이라면, 사람 펜테스터가 전수 점검하는 데만 몇 주가 걸려요. 여기에 AI 에이전트를 붙여 “모든 엔드포인트에 인증 없이 요청 → 2xx + 민감 데이터 응답만 보고”로 1차 스크리닝을 돌리면, 사람은 진짜 의심 케이스만 검증하면 됩니다.


2. 출발점: API 키 6만 개와 숨겨진 명세서 사냥

공격 표면을 넓히는 게 첫 단계였어요. 핵심 진입점은 discovery document, 쉽게 말해 구글판 Swagger 문서입니다. 모든 엔드포인트·파라미터·메서드를 기계가 읽을 수 있게 기술해 둔 거라, AI 자동 테스트의 입력으로 완벽했죠.

① 61,200 APKs — 앱을 통째로 분해해 키 줍기

친구 Michael과 협력해 모든 버전의 모든 구글 안드로이드 앱 61,200개 APK를 내려받아 압축을 풀고 API 키를 검색했어요. 여기에 Chrome Debugger API 기반 확장으로 실시간 트래픽에서 키를 가로채고, iOS 앱(IPA) 복호화까지 병행해 총 3,600개 키를 확보했습니다. 한 서비스에서 찾은 키가 같은 GCP 프로젝트의 다른 API에도 살아있는 경우가 많아서, 키를 많이 모을수록 접근 범위가 폭발적으로 넓어졌어요.

② Visibility Label — labels 파라미터로 숨은 API 캐내기

2025년 7월 구글이 대부분 API에서 /$discovery/rest 경로를 막았지만, 우회로가 있었어요. 일부 프로젝트는 visibility label이 켜져 있어서 ?labels=GOOGLE_INTERNAL을 붙여야만 숨은 엔드포인트가 보였거든요. 실제로 Service Management API 명세서가 라벨 없이는 253KB였는데, 라벨을 붙이자 329KB로 늘면서 숨겨진 문서가 대량으로 노출됐습니다.

💡 실제 활용 시나리오 예시:
“우리 내부 API는 문서를 공개 안 했으니 안전해”라고 믿는 팀이 많아요. 하지만 이 사례처럼 인증서 투명성 로그(CT log)와 키워드 브루트포스만으로도 숨은 도메인이 드러납니다. 보안은 “안 알려줬다”가 아니라 “권한으로 막혔다”여야 합니다.


3. 인증의 벽 넘기: FPA v2 리버스 엔지니어링

API 키로 “권한”은 해결됐지만, 많은 엔드포인트는 “호출자가 누구인지” 확인하는 인증(authentication)도 따로 요구했어요. 여기서 막혔다면 연구는 절반에서 끝났을 텐데, 돌파구가 있었습니다.

① First Party Authentication — 구글 독자 인증의 구조

구글의 웹 요청은 세션 쿠키와 그로부터 계산한 Authorization 값을 함께 *.clients6.google.com으로 보냅니다. 이게 FPA(First Party Authentication)예요. 일부 API는 이메일 등 사용자 식별자까지 해시에 넣는 더 완전한 FPA v2를 요구했는데, 결정적으로 Michael이 구글이 한동안 실수로 유출한 sourcemap에서 내부 gapix 라이브러리의 FPA v2 헤더 생성 코드를 찾아냈습니다.

② Gaia ID — 순차적 숫자가 만든 추적의 단서

토큰 형식은 <timestamp>_<hash>_<식별자키>이고, SHA-1 입력은 “email:gaiaId timestamp sessionCookie origin”이에요. 여기서 중요한 게 Gaia ID입니다. 모든 구글 계정은 순차적인(예: 131337133377) unobfuscated Gaia ID를 가지는데, 이 “순차적”이라는 성질이 나중에 Nest 기기 소유자 신원 추적의 핵심 단서가 됐어요.

AI 버그 바운티 보안 연구 관련 이미지

💡 실제 활용 시나리오 예시:
식별자를 1, 2, 3처럼 순차 정수로 발급하면 enumeration(연속 추측)에 그대로 노출돼요. 신규 서비스를 설계한다면 사용자 ID는 UUID나 난독화된 값으로 발급하고, 순차 내부 ID는 절대 외부 응답에 노출하지 않는 게 기본 중의 기본입니다.


4. Claude를 자동 해커로 만든 5단계 셋업

저는 이 챕터가 가장 흥미로웠어요. AI에게 그냥 “취약점 찾아”라고 던지면 절대 안 됩니다. 처음엔 거대한 컨텍스트를 한 번에 던졌더니 AI가 중간에 멈춰버렸거든요. 그래서 단계적으로 구조를 잡았습니다.

① 그룹 분류 + Ralph Wiggum 루프

엔드포인트를 기능별로 묶어 컨텍스트 부담을 줄이고, AI가 “다 했어요”라고 거짓 종료하지 못하도록 confirm_testing_complete() 검증을 강제했어요. 일명 Ralph Wiggum 루프인데, AI가 끝났다고 우겨도 실제로 모든 케이스를 돌렸는지 확인하고서야 종료되게 한 거죠.

② 멀티 키 프로빙 + 표준 에러 분류

같은 요청을 모든 API 키로 돌리며 응답을 중복 제거(dedup)하고, 구글의 난해한 오류 메시지를 standardErrorType으로 표준화했어요. 이게 핵심인데, 에러를 일관되게 분류해야 AI가 “권한 없음”과 “데이터 노출”을 구분할 수 있거든요.

# AI에게 가르친 판단 기준 (의역)
1) 순차 ID 추측 → 테스트 기법일 뿐, 취약점 아님
2) 존재 여부 노출(enumeration) ≠ 데이터 노출
3) 2xx 응답 + 기밀 데이터 → 진짜 취약점
4) 확인 즉시 보고 (confirm_testing_complete)

💡 실제 활용 시나리오 예시:
AI 에이전트로 반복 작업을 자동화할 때 가장 큰 적은 “그럴듯한 거짓 보고”예요. 출력 스키마를 강제하고(여기선 표준 에러 타입), 완료 조건을 코드로 검증하게 하면 false positive가 확 줄어듭니다. 사내 QA 자동화에도 그대로 적용 가능한 패턴이에요.

참고로 이런 “AI에 도구를 붙여 자동화”하는 흐름이 궁금하다면 Claude Code 확장 완벽 정리: 스킬·플러그인·MCP 3종 글도 함께 보면 그림이 잘 그려져요.


5. 실제로 터진 취약점 케이스 분석

이제 AI가 실제로 찾아낸 것들을 볼게요. 보상 금액과 함께 보면 “아, 이게 이렇게 큰일이구나” 싶어집니다.

취약점 핵심 원인 보상
Google Voice 계정 탈취 인증 없는 엔드포인트가 전화번호·복구 연락처 노출 $20,000
AdExchange 권한 상승 스테이징이 프로덕션 데이터를 가리킴 $30,000
Widevine DRM 키 노출 PGP·서명 키와 파트너 명부 접근 $16,004.40
YouTube 비공개 영상 유출 Content ID가 미공개 영상 식별자 누출 $12,000
Translation Hub 인증 없는 ListOperations + 교차 테넌트 쓰기 $36,500
Vertex AI Search 프롬프트 인젝션 설정 API에 읽기·쓰기 권한 검사 누락 $30,000

① Nest 기기 소유자 추적 — 조합의 무서움

단일 버그보다 무서운 건 조합이에요. Nest 인증 프록시에서 순차 unobfuscated Gaia ID를 enumeration하고, 여기에 Play Books 라이선스 관리 기능을 엮어 이메일까지 역추적했습니다. 결국 “이 Nest 기기 주인은 누구”라는 신원 매칭이 가능해진 거죠.

② 스테이징의 배신 — test 환경이 진짜 데이터를 봤다

AdExchange는 test-adexchangebuyer-googleapis.sandbox.google.com이라는 스테이징이 프로덕션 데이터를 가리켰고, PLX/DataHub에서는 스테이징의 setIamPolicy가 인증 없이 열려 1,592개 이상의 유튜브 분석 테이블(페타바이트급)을 노출했어요. “테스트니까 괜찮아”가 가장 위험한 말이었던 셈입니다.

💡 실제 활용 시나리오 예시:
많은 회사가 스테이징 DB를 프로덕션 스냅샷으로 채우면서 접근 제어는 느슨하게 둬요. 실데이터를 쓸 거면 프로덕션과 동일한 인증·권한을 적용하거나, 아예 마스킹된 합성 데이터를 쓰는 게 맞습니다. 이 사례만으로도 사내 스테이징 정책을 다시 볼 이유가 충분해요.


6. 진짜 교훈: 반복되는 기본 실수

50만 달러짜리 결론이 허무할 정도로 단순해요. 거의 모든 취약점이 세 가지 기본 실수로 수렴했거든요.

  • 권한 검사 누락: 인증은 받아놓고 “이 사용자가 이 데이터를 볼 자격이 있나”를 안 봄
  • 인증 없는 API: 내부용이라 믿고 아예 인증을 안 건 엔드포인트
  • 테스트 환경의 실데이터 노출: 스테이징이 프로덕션을 그대로 바라봄

여기서 핵심이 있어요. AI가 한 일은 “새로운 공격 기법 발명”이 아니라 지치지 않고 전수 검사한 것뿐이에요. 즉, AI 버그 바운티의 위력은 창의성이 아니라 규모와 끈기에서 나옵니다. 공격자가 이미 이 무기를 들었다면, 방어자도 같은 무기로 우리 표면을 먼저 훑어봐야 한다는 뜻이고요.

💡 실제 활용 시나리오 예시:
다음 스프린트에 “접근 제어 회귀 테스트”를 넣어보세요. 권한 없는 토큰으로 모든 주요 엔드포인트를 호출했을 때 401/403이 아니라 200이 나오면 즉시 실패하는 자동 테스트요. 이 단순한 게이트 하나가 위 케이스의 70% 이상을 사전에 잡습니다.


7. 이런 분들께 적극 추천합니다

  • API를 다수 운영하며 접근 제어(IDOR/BOLA)가 늘 불안한 백엔드 개발자
  • 스테이징·내부 환경의 보안 정책을 책임지는 DevOps·SRE 담당자
  • AI 에이전트로 보안 테스트·QA 자동화를 실험해보고 싶은 분
  • 버그 바운티에 입문하려는데 “뭘 어디서부터”가 막막한 주니어 보안 연구자
  • AI가 실제 업무를 어디까지 자동화하는지 사례로 확인하고 싶은 기획자·PM
  • 사내 API 거버넌스·문서 노출 정책을 점검해야 하는 아키텍트

8. 자주 묻는 질문 (FAQ)

Q. AI만 있으면 누구나 이렇게 버그 바운티로 돈을 벌 수 있나요?

A. 그렇게 단순하진 않아요. AI는 전수 테스트와 패턴 탐색을 대신해줄 뿐, 키 수집·인증 우회·결과 검증 같은 핵심 판단은 연구자의 깊은 도메인 지식에서 나왔습니다. 다만 진입 장벽이 크게 낮아진 건 분명해요. AI에게 “무엇을 시키고, 어떻게 검증할지”를 설계하는 능력이 새로운 핵심 역량이 됩니다.

Q. 우리 서비스도 같은 위험에 노출돼 있을까요?

A. 안타깝게도 가능성이 높아요. 이 사례의 취약점은 특별한 게 아니라 어디서나 흔한 “권한 검사 누락”이었거든요. 권한 없는 토큰으로 주요 API를 호출하는 회귀 테스트를 추가하고, 스테이징이 프로덕션 데이터를 보지 않게 분리하는 것부터 시작하면 위험을 크게 줄일 수 있습니다.

Q. 이렇게 구글을 테스트해도 법적으로 괜찮은 건가요?

A. 이 연구는 구글의 공식 취약점 보상 프로그램(VRP) 범위 안에서 진행됐기 때문에 합법이에요. 실제로 연구자는 비-구글 키를 폐기하며 범위를 철저히 지켰습니다. 허가 범위(scope) 밖을 건드리면 그건 범죄가 됩니다. 반드시 공식 프로그램 규정을 먼저 확인하세요.


✍️ 글을 마치며

이번 사례의 진짜 메시지는 “AI가 천재 해커가 됐다”가 아니라, 지루한 전수 검사를 지치지 않고 해내는 존재가 생겼다는 거예요. 그리고 그 앞에서 무너진 건 정교한 방어선이 아니라 권한 검사 한 줄을 깜빡한 기본 실수였습니다.

저는 당장 “권한 없는 토큰으로 모든 주요 엔드포인트를 호출했을 때 200이 나오면 실패하는” 회귀 테스트를 만들어볼 것 같아요. 공격자가 AI로 우리 표면을 훑기 전에, 우리가 먼저 같은 방식으로 훑는 게 가장 현실적인 방어니까요.

여러분은 어떤 부분이 가장 인상적이셨나요? 댓글로 자유롭게 의견 남겨주세요! 😊

Leave a Comment