ChatGPT, 이제 광고 코드를 통해 다른 웹사이트에서 하는 일도 알게 됨
요약
OpenAI 광고 코드가 설치된 웹사이트를 방문하면, ChatGPT 계정과 연결된 식별자(쿠키)가 사용자 활동 데이터와 함께 OpenAI로 전송되는 것이 확인되었습니다. 이 과정은 사용자의 쇼핑몰, 교육 서비스 등 다양한 외부 사이트에서의 행동 정보까지 수집하여 분석에 활용할 수 있는 구조입니다. 특히, 로그아웃 상태에서도 기기별 익명 식별자가 장기간 유지되며, 이는 ChatGPT 계정 활동과 외부 웹사이트 활동을 연결하는 잠재적 위험성을 내포하고 있습니다.
핵심 포인트
- 광고 코드를 통해 외부 사이트의 페이지 내용 및 폼 입력값까지 수집됨.
- 수집된 데이터는 쇼핑몰, 교육 서비스 등 다양한 분야의 행동 정보 포함.
- 로그아웃 상태에서도 기기별 익명 식별자가 최소 27일 유지되는 사례가 확인됨.
- 이 구조는 외부 사이트 활동을 ChatGPT 계정과 연결할 잠재적 위험성을 가짐.
OpenAI 광고 코드가 설치된 웹사이트를 방문하면 ChatGPT 계정과 연결된 식별자와 페이지 정보가 OpenAI로 전송 되는 동작이 확인됨
광고 코드가 실행되기 전 스크립트를 불러오는 요청부터 __obi
쿠키가 전달 되며, 한 기기에서 쇼핑몰과 교육 서비스 등 12개 사이트에 걸쳐 같은 값이 전송됨
광고주가 직접 제공한 정보 외에 폼 입력값, 페이지 내용과 태그 관리자 데이터 에서도 식별 정보를 수집하며, 방문한 페이지 경로에는 질환이나 채무 관련 내용도 포함
해당 쿠키는 분석용으로 분류돼 마케팅 동의를 거부해도 분석에 동의하면 설정 되며, 로그아웃 상태에서도 기기별 익명 식별자가 최소 27일 유지된 사례가 확인됨
Android용 Chrome에서 확인하였으며, 제3자 쿠키를 차단하는 iOS 브라우저에서는 작동하지 않음.
단, 서버에서 외부 활동을 실제 계정에 연결하는 처리까지 관찰한 것은 아님 . OpenAI는 내부 검토를 안내했지만 쿠키 분류와 동의 처리에 관한 질문에는 답하지 않음
ChatGPT 계정과 외부 사이트 활동을 연결하는 구조
OpenAI의 광고 수집기 bzr.openai.com
은 .openai.com
범위의 __obi
쿠키 를 설정하며, 이 값은 ChatGPT 사용 중 계정과 연결됨
ChatGPT에 광고를 집행하는 기업은 자사 사이트에 OpenAI 광고 측정 코드 를 설치함
코드가 로드되면 __obi
와 함께 탐색 중인 페이지 데이터가 OpenAI로 전송됨
검색하는 상품, 읽는 글, 구매 행동 등이 대상이며, 구조상 해당 사이트 활동을 ChatGPT 계정과 연결할 수 있음
개인 휴대전화에서 전체 동작을 재현하고 독립적인 두 가지 캡처 방식 으로 검증함
수개월간 관찰한 광고주 픽셀 936개, 호스트명 1,029개의 트래픽과도 교차 확인함
식별자 생성, 서명, 쿠키 설정
chatgpt.com
클라이언트는 무작위 16바이트 를 생성한 뒤 POST /backend-api/bazaar/obi/sync-token
을 호출함
로그아웃 상태에서는 /backend-anon/
경로를 사용함
백엔드는 RS256 JWT 를 반환함
JWT는 계정을 나타내는 sub
와 식별자인 obi
를 묶고, 수신 대상을 bzr.openai.com
으로 제한하며 60초 뒤 만료 됨
관찰된 계정 토큰의 sub
는 64자리 16진수 계정 식별자이고, obi
는 22자 식별자임
iss: chatgpt-wadi
, purpose: obi_sync
, operation: set
, subject_type: account_user
를 포함함
동의 관련 값은 consent_decision: analytics_allowed
, consent_policy_version: user_granular_consent_v1
임
bzr
는 광고 플랫폼 내부 명칭인 bazaar
의 약자이며, wadi
는 토큰 발급 서비스임
클라이언트는 JWT를 {"token": "«JWT»"}
형태로 bzr.openai.com/v1/obi/sync
에 교차 사이트 POST 요청 으로 전송함
응답은 Domain=.openai.com
, HttpOnly
, Max-Age=31536000
, Path=/
, SameSite=none
, Secure
속성으로 __obi
를 설정함
쿠키 유효기간은 1년 이고, JWT의 obi
와 쿠키 값은 동일함
SameSite=none
과 Secure
조합은 교차 사이트 요청에 쿠키를 보낼 수 있게 하는 설정임
SDK 실행 전부터 전송되는 쿠키
__obi
가 저장된 휴대전화에서는 광고주 페이지에서 발생한 세 종류 요청 모두 쿠키를 전달함
SDK 스크립트 로드: GET bzrcdn.openai.com/sdk/oaiq.min.js
obref
가 포함된 전환 이벤트: POST bzr.openai.com/v1/sdk/events
SDK의 인증 정보 생략 경로에서 발생한 요청 본문만 있는 이벤트: POST bzr.openai.com/v1/sdk/events
대조 요청인 GET bzrcdn.openai.com/pixel-config/…
에는 쿠키 헤더가 없었음
SDK에는 인증 정보를 생략하는 코드 경로가 있지만, 브라우저가 <script src>
요청에 쿠키를 붙이므로 OpenAI 코드가 실행되기 전에 식별자가 전달됨
동일한 광고주 페이지 요청에서 다른 OpenAI 쿠키는 브라우저에 의해 차단됨
oai-did
, oaicom-stable-id
는 SameSite=Lax
때문에 차단됨
oai-client-auth-info
와 세션 쿠키는 도메인 불일치로 차단됨
__obi
는 전송됐으며, SameSite=None
으로 설정된 유일한 OpenAI 식별자 임
함께 수집되는 개인정보와 페이지 경로
SDK 페이로드는 식별 정보의 출처를 네 가지 표식 으로 구분함
in
은 광고주가 의도적으로 전달한 값임
fm
은 폼 필드에서 수집한 값임
ht
는 렌더링된 페이지 텍스트에서 수집한 값임
js
는 태그 관리자 데이터 버스에서 수집한 값임
관찰된 트래픽에서 자동 수집 식별 정보는 이벤트 685건 , 광고주가 제공한 식별 정보는 이벤트 255건 에 포함됨
이메일의 최대 수집원은 태그 관리자 데이터 버스 임
SDK는 window.dataLayer.push
를 자체 함수로 교체하고 adobeDataLayer
도 읽음
gtm.js
스크립트 태그의 l=
매개변수를 분석해 이름이 바뀐 GTM 데이터 레이어도 찾음
현재 버전은 이메일과 전화번호를 가져옴
버전 0.1.31
은 이름과 지리 정보도 수집했으며, 8월 27일 수집 범위가 축소됨
이메일, 전화번호, 이름, 성은 전송 전에 SHA-256으로 해시 하지만, 국가, 지역, 도시, 우편번호는 평문으로 보냄
우편번호는 가장 많이 수집된 폼 필드로, 28개 사이트의 이벤트 100건에서 확인됨
URL은 출처(origin)와 경로만 남겨 전송 함
관찰한 URL 23,929개 중 쿼리 문자열을 포함한 것은 없었음
경로는 유지되므로 수집기에 도달한 경로에는 질환, 채무 해결 서비스 유입 경로, 소송 상담 접수 폼이 포함됨
설정을 확인할 수 있었던 픽셀 881개 중 638개에서 자동 매칭 이 활성화돼 있었으며, 관찰된 신용 및 대출 광고주는 모두 활성화 상태였음
설정은 OpenAI Ads Manager에서 관리함
제외 목록은 비밀번호, 일회용 코드, 카드 번호, SSN, 생년월일, 병력, 진단, 법원 관련 필드를 수집 대상에서 제외함
관찰된 사이트 범위와 로그아웃 상태
재현에 사용한 기기에서는 동일한 __obi
값 하나 가 상업 웹사이트 12곳, 서로 다른 픽셀 ID 13개를 통해 OpenAI에 전달됨
Chewy, Wayfair, ThriftBooks, Eventbrite, HelloFresh, Coursera, SeatGeek 등이 포함됨
모든 요청은 HTTP 202
응답으로 접수됨
더 넓은 트래픽에서는 서로 다른 __obi
값 30개 중 12개가 여러 광고주에서 사용 됐으며, 한 값은 광고주 10곳에서 나타남
디코딩한 동기화 토큰 932개 중 736개는 subject_type: account_user
, 196개는 anonymous
였음
익명 주체 식별자도 계정 주체 식별자처럼 안정적으로 유지됨
기기당 하나이며, 최소 27일간 지속 된 사례가 확인됨
분석 동의와 마케팅 동의의 구분
OpenAI의 쿠키 정책 은 __obi
를 chatgpt.com
과 openai.com
의 1년짜리 분석 쿠키 로 분류함
분석 쿠키 항목의 유일한 쿠키임
정책상 분석 쿠키는 OpenAI 서비스의 성능과 이용 방식을 이해하는 데 사용됨
분석과 마케팅 동의는 각각 oai_consent_analytics
, oai_consent_marketing
으로 분리돼 있음
디코딩한 모든 동기화 토큰에는 consent_decision: analytics_allowed
가 들어 있었음
분석에 동의하고 마케팅을 거부한 사용자 에게도 이 쿠키가 설정됨
OpenAI의 응답
9월 14일 [email protected] 과 [email protected] 에 동작 방식과 두 가지 질문 을 전달함
__obi
를 분석 쿠키로 분류하는 이유를 물음
분석에 동의하고 마케팅을 거부한 사용자에게도 쿠키를 설정하는지 질문함
OpenAI Support 는 문의를 접수했고 내부 검토를 위해 관찰 내용을 공유하겠다고 답했지만, 두 질문에는 답하지 않음
스크립트 로드 요청에서 쿠키가 전송되는 현상은 문의 이후 확인됨
추가 응답이 오면 공개 내용을 갱신할 예정임
확인 범위와 해석의 한계
브라우저 동작은 Android용 Chrome 에서 확인함
동기화 토큰은 대략 ChatGPT 세션 5회 중 1회 에서 생성됨
ChatGPT 모바일 웹 클라이언트는 동기화 없이도 광고를 표시함
같은 절차를 따라도 픽셀 요청에 쿠키가 붙지 않을 수 있음
서버 측 계정 연결은 직접 관찰하지 못함
202
는 수집기가 쿠키가 첨부된 이벤트를 접수했다는 뜻임
이를 계정에 연결할 수 있다는 판단은 시스템 설계에 근거하며, 실제 서버 측 연결 처리 자체를 확인한 것은 아님
로그인 계정, 픽셀 요청의 제3자 쿠키, 외부 사이트 전환의 프로필 연결이라는 구조는 Meta가 수년 전부터 사용한 표준 광고 기술 과 동등함
차이는 이를 AI 채팅 제품에 적용 한다는 데 있음
사용자는 소셜 네트워크에 올리지 않을 정보도 AI 채팅 제품에 제공하며, 이 제품들은 점점 더 사용자를 대신해 행동함
광고주가 확인할 수 있는 범위
픽셀의 다른 쿠키인 __obref
는 같은 역할을 하지 않음
광고주 자체 도메인에 설정되고, 사이트마다 값이 다르며, 다른 사이트의 값을 볼 수 없음
관찰된 값 2,860개 중 2,828개는 정확히 한 광고주에서만 나타남
광고주의 스크립트는 다른 도메인에 속한 __obi
를 읽을 수 없음
광고주는 전환 측정 픽셀을 설치했지만, 방문자가 ChatGPT 식별자와 연결되는지 직접 확인할 방법이 없음
댓글과 토론
AI 자동 생성 콘텐츠
본 콘텐츠는 GeekNews의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기