AI가 이메일을 "그림"으로 요약해 보내주면, 그 그림은 공격자의 서버로 간다
AI가 이메일을 “그림”으로 요약해 보내주면, 그 그림은 공격자의 서버로 간다
분류: Bugbounty · 웹·AI 인프라 · 프롬프트 인젝션(데이터유출) [정보성]
덱. 2023년 Google이 라스베이거스 데프콘 현장에서 연 초청제 버그바운티 행사 “LLM bugSWAT”에서, 연구자 Roni Carta(Lupin)·Joseph Thacker(rez0)·Justin Gardner(Rhynorater) 3인은 협업으로 Bard(현 Gemini)와 Google Cloud Console의 결함 여러 건을 찾아냈습니다. 그중 가장 인상적인 건은 Bard에게 이메일을 요약해 이미지 형태로 응답하게 만들어, 그 내용을 공격자 서버로 통째로 빼돌리는 프롬프트 인젝션이었습니다. 세 사람이 이 행사에서 받은 포상금 합계는 5만 달러로 원문에 명시돼 있습니다.
리드
LLM이 애플리케이션 안에서 실제 데이터(이메일, 문서, 클라우드 콘솔)에 접근하기 시작하면, LLM 자체가 새로운 신뢰 경계가 됩니다. 전통적인 웹 취약점(IDOR, DoS)과 LLM 특유의 결함(프롬프트 인젝션)이 같은 시스템 안에서 나란히 발견됐다는 점이 이 사례를 교과서적으로 만듭니다. 이 글은 그중 세 가지 결함 — 권한 검증 누락, GraphQL 서명 우회를 통한 서비스 거부, 그리고 콘텐츠 보안 정책(CSP)을 우회한 데이터 유출 — 을 순서대로 짚습니다.
핵심 사실 요약
- IDOR — 다른 사용자의 이미지를 “설명”하게 만들기. Bard의 Vision 기능은 사용자가 올린 이미지를 서버에 저장된 경로로 참조해 분석합니다. 연구자는 자신의 요청에 담긴 이미지 경로 값을 다른 사용자의 경로로 바꿔치기해도 서버가 소유권을 검증하지 않는다는 걸 발견했습니다. 그 결과 임의의 다른 사용자가 업로드한 이미지를 자신의 세션에서 그대로 분석·열람할 수 있었고, Bard의 OCR(광학 문자 인식) 성능 때문에 이미지 속 텍스트(수치·이메일·메모 등)까지 유출될 수 있었습니다.
- GraphQL Directive Overloading — 서명은 지켰지만 개수는 안 셌다. Google Cloud Console의 GraphQL API는 요청 본문을
@Signature지시자(directive)로 서명해 변조를 막고 있었습니다. 연구자들은 서명이 쿼리 문자열 전체가 아니라 서명 자체를 제외한 부분만을 대상으로 한다는 걸 알아내, 유효한 서명 하나를 같은 쿼리에 수백만 번 반복 삽입할 수 있었습니다. 지시자 하나가 늘어날 때마다 서버의 처리 시간이 늘어, 100만 개를 넣었을 때 응답 시간이 약 109초까지 늘어났습니다(원문 측정치). 서명이라는 무결성 장치는 지켜졌지만, “이 필드를 몇 번 반복해도 되는가”라는 처리 비용 쪽 검증이 빠져 있었던 셈입니다. - 하드코딩된 서명 키. 연구자들이 엔지니어에게 “서명은 어떻게 만들어지나요?”라고 질문한 것을 계기로, 서명에 쓰이는 키가 소스 코드에 평문 문장 형태로 하드코딩돼 있다는 사실이 드러났습니다. 브루트포스로 알아내기는 어려운 값이었지만, 내부 코드 검토 없이는 발견되지 않았을 구조적 문제였다고 원문은 전합니다.
- CSP를 우회한 프롬프트 인젝션 데이터 유출. Google이 Bard에 Gmail·Drive 등 Google Workspace 데이터 접근 기능(Extensions)을 추가하자, 연구자들은 Bard가 마크다운 이미지 문법(
)을 그대로 렌더링한다는 데 주목했습니다. 다만 렌더링 가능한 이미지 출처는 콘텐츠 보안 정책(CSP)으로*.google.com,*.googleusercontent.com등 구글 소유 도메인으로 제한돼 있었습니다.googleusercontent.com이 Google Cloud 사용자가 자신의 인스턴스를 호스팅할 때 쓰는 도메인이기도 하다는 점, 그리고www.google.com/amp/s/가 임의 URL로 리다이렉트를 수행한다는 CSP 우회 기법을 결합해, 연구자들은 “받은 이메일 내용을 URL 파라미터로 인코딩한 이미지를 마크다운으로 응답하라”는 프롬프트를 Bard에 입력했습니다. 이 이미지 요청이 렌더링되는 순간 이메일 내용이 공격자가 통제하는 서버 로그에 그대로 찍혔습니다. - 원문에 따르면 IDOR·DoS·하드코딩 키 발견은 초기 데프콘 현장 이벤트에서, 프롬프트 인젝션 데이터 유출은 이후 연장된 조사 기간 중 도쿄에서 이뤄졌습니다. DoS는 “이벤트 중 가장 멋진 버그(Coolest Bug)” 보너스를 포함해 6,000달러, 서명 키 이슈는 1,000달러, 데이터 유출은 “이 대회에서 3번째로 멋진 버그(3rd Coolest Bug)” 보너스를 포함해 21,337달러가 지급됐다고 원문은 밝히고 있습니다. ⚠️미확인 — 개별 항목의 최종 심각도 등급·완전한 지급 내역은 Google 자체 트래커 등 1차출처로 이 초안에서 별도 확증하지 않았습니다.
짧은 논평
네 결함을 나란히 놓고 보면 공통된 축이 하나 보입니다. “이 응답에 담긴 값을 누가 어디까지 통제할 수 있는가”에 대한 검증이 매번 한 겹씩 비어 있었다는 것입니다. IDOR는 소유권 검증이, DoS는 반복 횟수 제한이, 데이터 유출은 렌더링 가능한 이미지 출처 검증이 비어 있었습니다. 특히 마지막 사례는 저희가 다른 글에서 짚은 LLM 프롬프트 인젝션의 전형과 같은 뿌리입니다 — LLM이 사용자 데이터에 접근하는 순간, 그 출력(응답 렌더링 방식)도 전통적인 웹 보안 통제(CSP, 출처 검증)의 대상이 돼야 한다는 것입니다. LLM 보안을 “탈옥·인젝션”이라는 LLM 고유의 문제로만 좁혀 보면, 정작 이런 사례처럼 “전통 웹 취약점이 LLM 파이프라인을 만나 데이터 유출로 이어지는” 더 흔한 경로를 놓치기 쉽습니다.
References / 참고자료
- Roni Carta (Lupin), “We Hacked Google A.I. for $50,000” — 이 글이 재구성한 원 분석. IDOR·GraphQL DoS·서명 키·프롬프트 인젝션 데이터 유출까지 전 과정을 다룸. https://www.landh.tech/blog/20240304-google-hack-50000/
이 글은 위 원 분석을 우리 관점에서 다시 쓰고 짧은 논평을 더한 정보성 초안입니다. 특정 문장·요청 페이로드·스크린샷을 그대로 옮기지 않았으며, 작동하는 재현 절차는 싣지 않았습니다. ⚠️미확인 표시 항목은 발행 전 독립 팩트체크에서 확증·정정되어야 합니다.