대화창 밖까지 따라오는 쿠키 — ChatGPT 광고 수집기 __obi 해부
대화창 밖까지 따라오는 쿠키 — ChatGPT 광고 수집기 __obi 해부
메타가 십 년 전에 만든 것과 같은 장치라면 문제는 장치인가, 그 장치가 붙은 곳인가?
도입
2026년 9월 20일, 「ChatGPT now knows what you do on other websites via ad collector」라는 글이 해커뉴스에 올라와 764점을 받았다. 글을 쓴 곳은 Buchodi’s Threat Intel이라는 보안 뉴스레터다. 주장은 한 문단으로 요약된다. OpenAI의 광고 수집기 bzr.openai.com이 .openai.com 도메인에 __obi라는 쿠키를 심고, 그 값은 ChatGPT를 쓰는 동안 계정과 묶인다. 그리고 ChatGPT에 광고를 사는 회사들이 자기 사이트에 설치한 OpenAI 픽셀이, 사용자가 그 사이트를 방문할 때마다 __obi를 페이지 정보와 함께 OpenAI로 돌려보낸다.
필자는 자신의 휴대폰에서 이 메커니즘을 재현했고, 두 가지 독립된 캡처 방법으로 확인했으며, 여러 달 동안 관찰한 트래픽(1,029개 호스트명에 걸친 936개의 서로 다른 광고주 픽셀)과 대조했다고 밝힌다.
해커뉴스의 첫 반응은 둘로 갈렸다. 하나는 결국 페이스북과 구글이 수십 년간 해 온 것과 같은 종류의 추적 아니냐는 반응이고(@Legend2440, 직접 인용은 아니고, 코멘트의 요지를 요약), 다른 하나는 원문의 한 문장을 그대로 붙잡는 반응이었다(@mavsman). 「메커니즘은 표준 애드테크다. 선례가 없는 것은 그것을 AI 채팅 제품에서 돌린다는 점이다.」 이 글은 그 두 반응 사이에 있다. 기술적으로 새로운 것은 없다. 그런데도 왜 많은 사람이 불편해하는가. 그리고 그 불편함은 규제의 언어로 번역될 수 있는가.
현상 분석 — 60초짜리 토큰과 1년짜리 쿠키
원문이 공개한 흐름은 세 단계다. 기술적 세부를 그대로 옮긴다.
1단계: ChatGPT가 식별자를 만들고 서명한다. chatgpt.com의 클라이언트가 16바이트 난수를 생성해 POST /backend-api/bazaar/obi/sync-token(로그아웃 상태에서는 /backend-anon/)을 호출한다. 백엔드는 RS256으로 서명된 JWT를 돌려준다. 필자가 공개한 페이로드의 필드는 다음과 같다(값 일부는 필자가 가린 것).
{
"iss": "chatgpt-wadi",
"aud": "bzr.openai.com",
"purpose": "obi_sync",
"operation": "set",
"consent_decision": "analytics_allowed",
"consent_policy_version": "user_granular_consent_v1",
"subject_type": "account_user",
"exp": "iat + 60s"
}
여기에 계정을 가리키는 sub와 식별자 obi가 함께 들어 있다. 즉 이 토큰은 계정과 식별자를 묶는 증서이고, 수신처는 수집기로 한정되며, 60초 뒤 만료된다. 필자에 따르면 bzr는 bazaar, 즉 OpenAI 내부에서 광고 플랫폼을 부르는 이름이고 wadi는 토큰 발급 서비스다.
2단계: 식별자가 OpenAI 도메인의 쿠키가 된다. 클라이언트는 이 JWT를 bzr.openai.com/v1/obi/sync로 크로스사이트 POST한다. 응답 헤더는 __obi 쿠키를 Domain=.openai.com; HttpOnly; Max-Age=31536000; SameSite=none; Secure로 설정한다. 유효기간 1년, 그리고 SameSite=none. MDN 문서가 설명하듯 SameSite=None과 Secure의 조합은 쿠키가 크로스사이트 요청에 실려 가기 위해 필요한 설정이다. JWT의 obi 값과 쿠키 값은 동일했다고 필자는 적는다.
3단계: 광고주 사이트가 쿠키를 돌려보낸다. 광고주 페이지에서 OpenAI 호스트로 가는 요청 세 종류, 즉 SDK 스크립트 로드(bzrcdn.openai.com/sdk/oaiq.min.js), 전환 이벤트 POST, 그리고 SDK의 「자격 증명 없음」 경로로 보내는 POST 모두에 __obi가 실려 있었다. 대조군인 픽셀 설정 파일 요청에는 쿠키 헤더 자체가 없었다.
이 표에서 필자가 가장 강조하는 것은 첫 줄이다. SDK에는 자격 증명을 빼고 보내는 코드 경로가 있지만 소용이 없다. 브라우저는 OpenAI의 코드가 한 줄이라도 실행되기 전에, <script src>로 SDK를 불러오는 요청 자체에 쿠키를 붙인다. 태그를 로드하는 순간 식별자가 넘어간다.
같은 요청에서 다른 OpenAI 쿠키들은 어땠는가. oai-did, oaicom-stable-id는 SameSite=Lax라서 차단됐고, 세션 쿠키류는 도메인 불일치로 차단됐다. SameSite=None으로 설정된 OpenAI 식별자는 __obi 하나뿐이었다. 이것이 원문의 소제목 「이 쿠키는 사이트를 넘나들도록 만들어졌다」의 근거다.
함께 넘어가는 것. 원문에 따르면 SDK는 광고주가 의도적으로 넘기는 값(in) 외에, 폼 필드(fm), 렌더링된 페이지 텍스트(ht), 태그 매니저 버스(js)에서 신원 정보를 긁어 온다. 관찰된 트래픽에서 긁어 온 신원 정보가 광고주가 제공한 것보다 많았다(685건 대 255건). SDK는 window.dataLayer.push를 자기 함수로 바꿔치기하고, adobeDataLayer도 읽으며, 이름이 바뀐 GTM 레이어까지 gtm.js 스크립트 태그의 파라미터를 파싱해 찾아낸다. 이메일, 전화번호, 이름은 SHA-256 해시로 보내지만 국가, 지역, 도시, 우편번호는 평문이다. URL은 쿼리스트링을 떼고 origin과 path만 보낸다(관찰된 23,929건 중 쿼리스트링을 가진 것은 없었다). 그러나 path는 남고, 필자는 수집기에 도달한 path 중에 특정 질병명, 채무 정리 퍼널, 소송 접수 양식이 있었다고 적는다.
도달 범위. 필자의 기기에서 하나의 __obi 값이 Chewy, Wayfair, ThriftBooks, Eventbrite, HelloFresh, Coursera, SeatGeek 등 12개 상업 사이트에서 13개의 픽셀 ID 아래 OpenAI로 전송됐고, 모든 요청이 202로 수락됐다. 더 넓은 트래픽에서는 30개의 서로 다른 __obi 값 중 12개가 둘 이상의 광고주에서 나타났다. 로그아웃 상태도 예외가 아니다. 디코딩한 동기화 토큰 932개 중 736개가 account_user, 196개가 anonymous였고, 익명 주체도 기기당 하나로 최소 27일간 유지됐다.
심층 분석 — 무엇이 「표준 애드테크」와 다른가
1. 기술은 같다, 원문도 그렇게 말한다
먼저 공정하게 짚자. 원문 스스로 「메타는 구조적으로 동등한 것을 수년 전에 만들었다」고 쓴다. 로그인된 계정, 픽셀 발화 시의 서드파티 쿠키, 계정 프로필로 귀속되는 사이트 밖 전환. 해커뉴스에서도 이 점을 들어 글 자체를 깎아내린 코멘트가 있었다. 한 이용자는 이 글이 서드파티 쿠키 추적의 작동 방식을 장황하게 설명했을 뿐이라고 평했다(@gruez, 직접 인용은 아니고, 코멘트의 요지를 요약). 이 비판은 기술 측면에서는 맞다. SameSite=None 쿠키를 픽셀로 돌려받는 것은 교과서적인 서드파티 쿠키 추적이다.
그러나 원문의 가치는 「새로운 기법의 발견」이 아니라 「구체적 배선도의 공개」에 있다. 광고주가 이 사실을 볼 수 없다는 점이 특히 그렇다. 필자는 __obi가 광고주의 스크립트가 읽을 수 없는 도메인에 속해 있다고 지적한다. 광고주는 전환 픽셀을 설치했을 뿐인데, 자기 방문자가 ChatGPT 신원으로 해소되고 있다는 것을 알 방법이 없다. 반면 픽셀의 또 다른 쿠키 __obref는 광고주 자신의 도메인에 설정되고 사이트마다 값이 달라서, 관찰된 2,860개 값 중 2,828개가 정확히 한 광고주에서만 나타났다. 즉 사이트별로 분리된 측정 수단은 따로 있다. __obi는 그것과 다른 목적, 사이트를 넘는 연결을 위해 존재한다고 읽힌다.
2. 검색 광고 추적과의 차이: 무엇과 결합되는가
구글의 검색 광고 추적과 비교하면 차이가 선명해진다. 검색 광고 추적이 결합하는 것은 대체로 「질의어」다. 사람들은 검색창에 짧은 키워드를 넣는다. 반면 대화형 어시스턴트에는 문장을, 맥락을, 고민을 넣는다. 원문의 표현으로는 「사람들은 이 제품에 소셜 네트워크에는 올리지 않을 이야기를 한다. 그리고 이 제품은 점점 더 사용자를 대신해 행동한다.」
여기서 분석을 하나 덧붙인다. 원문은 서버 측 결합을 관찰하지 않았다고 명시한다(202는 수집기가 이벤트를 받았다는 뜻일 뿐이다). 따라서 「OpenAI가 대화 내용과 사이트 밖 행동을 하나의 프로필로 합치고 있다」는 것은 확인된 사실이 아니라 설계에서 도출되는 가능성이다. 다만 그 가능성의 무게가 검색 광고와 다르다. 검색 기록과 쇼핑 기록이 만나면 「무엇을 사려 하는가」가 보인다. 대화 기록과 쇼핑 기록이 만나면 「왜 사려 하는가」가 보일 수 있다. 질병 관련 path, 채무 정리 퍼널, 소송 접수 양식이 수집기에 도달했다는 관찰은 이 점에서 의미가 있다. 같은 사용자가 같은 주제로 어시스턴트와 대화했다면, 결합의 결과물은 광고 세그먼트가 아니라 사실상의 신상 파일에 가깝다.
해커뉴스에서도 이 맥락 차이를 짚은 코멘트가 공감을 얻었다. 기술 자체는 새롭지 않지만, 사람들이 AI와 대화할 때 기대하는 프라이버시 수준은 페이스북을 둘러볼 때와 전혀 다르며, 게다가 페이스북은 무료지만 GPT는 구독료를 내고 쓴다는 지적이었다(@1saadcodes, 직접 인용은 아니고, 코멘트의 요지를 요약). 유료 사용자라는 점은 「무료 서비스의 대가로 데이터를 낸다」는 오래된 정당화를 약하게 만든다.
3. 동의 설계: analytics와 marketing 사이
규제 측면에서 가장 날카로운 관찰은 동의 범주다. 원문에 따르면 OpenAI의 쿠키 정책은 __obi를 「Analytics 쿠키」(유효기간 1년, chatgpt.com과 openai.com)로 분류하며, 그 항목에 있는 유일한 쿠키다. 정책은 analytics 쿠키를 「서비스가 어떻게 작동하고 사용되는지 이해하는 데 도움을 준다」고 설명한다. 한편 OpenAI는 analytics와 marketing을 별도의 동의 선택지(oai_consent_analytics, oai_consent_marketing)로 운영하는데, 필자가 디코딩한 모든 동기화 토큰은 consent_decision: analytics_allowed를 담고 있었다. 필자의 결론은 이렇다. analytics는 허용하고 marketing은 거부한 사용자도 이 쿠키를 받는다.
광고 플랫폼(bazaar)의 수집기가 발급하고, 광고주 픽셀을 통해 사이트 밖 행동과 연결되는 쿠키를 analytics로 분류하는 것이 타당한가. 이것은 필자가 9월 14일 OpenAI의 press 및 privacy 창구에 보낸 두 질문 중 하나이기도 하다. 원문에 따르면 OpenAI Support가 회신해 문의를 접수했고 내부 검토에 공유하겠다고 했으나, 두 질문 모두에 답하지 않았다.
[분석] 유럽식 규제 틀에서는 필수적이지 않은 쿠키에 대해 목적별로 동의를 받는 것이 일반적인 요구이고, 동의 범주가 실제 목적과 어긋난다면 그것 자체가 쟁점이 될 수 있다. 다만 이 글은 법률 판단이 아니며, 원문이 관찰한 것은 Android의 Chrome이었다. 유럽 사용자에게 같은 동작이 일어나는지, 어떤 동의 화면이 표시되는지는 원문에서 확인되지 않는다.
전망과 시사점 — 브라우저가 막고, 시장은 넓어진다
브라우저별 결과가 갈린다
원문의 한계 절은 정직하다. 관찰 환경은 Android의 Chrome이다. Safari의 Intelligent Tracking Prevention은 서드파티 쿠키를 모두 차단하고, iOS의 Chrome은 WebKit 위에서 돌기 때문에 이 메커니즘은 iOS의 어떤 브라우저에서도 작동하지 않는다고 필자는 적는다. 데스크톱 Chrome은 시험하지 않았다. 또 ChatGPT 세션 다섯 개 중 대략 하나만 동기화 토큰을 만들었고, 모바일 웹 클라이언트는 동기화 없이 광고를 띄우기도 했다.
MDN 문서에 따르면 Firefox는 기본 활성화된 Enhanced Tracking Protection에서 Total Cookie Protection으로 서드파티 쿠키를 사이트별 쿠키 통에 분리하고, Safari도 기본적으로 유사한 보호를 적용하며, Brave는 추적 쿠키를 기본 차단한다. 반면 Google Chrome은 기본적으로 서드파티 쿠키를 차단하지 않는다(시크릿 모드나 사용자가 명시적으로 설정한 경우 제외). 해커뉴스에서도 쿠키 분할(partitioning)을 엄격하게 구현한 브라우저에서는 이 우려가 사실상 무의미하다는 코멘트가 있었다(@varenc, 직접 인용은 아니고, 코멘트의 요지를 요약). 여기에 대해 현대 애드테크는 쿠키와 무관하게 브라우저 핑거프린팅을 쓰므로 쿠키 격리만으로는 충분하지 않다는 반론이 달렸다(@ferro_, 직접 인용은 아니고, 코멘트의 요지를 요약). 후자의 주장, 즉 ChatGPT가 핑거프린팅을 쓴다는 부분은 원문에서 확인되지 않은 코멘트 작성자의 주장이다.
정리하면 기술적 방어는 존재하고, 그 방어는 브라우저 선택이라는 형태로 사용자에게 떠넘겨져 있다. 세계에서 가장 많이 쓰이는 브라우저가 기본값으로 이 경로를 열어 두고 있다는 사실이, 이 메커니즘이 실효성을 갖는 이유다.
픽셀은 이미 퍼지고 있다
이 장치는 9월에 갑자기 등장한 것이 아니다. 해커뉴스의 한 코멘트가 링크한 AdExchanger의 4월 17일자 기사에 따르면, OpenAI의 추적 픽셀은 이미 ChatGPT 광고 파일럿의 일부 광고주를 대상으로 시험 중이었고, 그 전주에 OpenAI가 광고 관리자(ad manager)를 출시했다. 기사는 이 픽셀이 회원가입, 주문, 리드 완료, 구독 생성, 페이지 조회 같은 행동을 추적할 것으로 보인다고 전하면서, 이 역시 공식 발표가 아니라 누군가 OpenAI의 코드를 들여다보다 발견한 것이라고 적었다. 다른 코멘트는 ChatGPT 광고 트래커를 단 웹사이트 수가 전월 대비 두 배로 늘어나는 추세라는 Bloomberry 데이터를 인용했다(이 수치는 본 글에서 직접 확인하지 않았다).
원문의 관찰도 같은 방향이다. 자동 매칭은 설정을 알 수 있는 픽셀 881개 중 638개에서 켜져 있었고, 관찰된 모든 신용·대출 광고주가 여기에 포함됐다. 이 기능은 OpenAI의 Ads Manager에서 제어된다. 비밀번호, 일회용 코드, 카드 번호, SSN, 생년월일, 병력, 진단, 법원 관련 필드를 제외하는 거부 목록이 있다는 점도 원문은 기록한다. 또 SDK 0.1.31 버전은 이름과 지역 정보까지 가져갔다가 8월 27일 범위가 좁혀졌다. 즉 수집 범위는 고정된 것이 아니라 버전마다 움직이고 있다.
시사점: 어시스턴트가 광고 플랫폼이 될 때
해커뉴스의 한 장문 코멘트는 흥미로운 예측을 남겼다. 사용자가 명시적으로 동의하고, 데이터를 통제하고, 지우고, 개인화된 응답을 켜고 끌 수 있다면 이런 추적이 오히려 제품을 개선할 수도 있다. 그러나 실제로는 OpenAI가 먼저 클릭·전환 측정 체계를 만들고, 광고주에게 전환율을 보여 준 뒤, 명시적인 광고 플랫폼을 세워 채팅 제품을 망가뜨릴 것이라는 예측이었다(@jfasi, 직접 인용은 아니고, 코멘트의 요지를 요약).
이 예측의 앞 절반은 이미 원문과 AdExchanger 기사가 보여 주는 현실과 겹친다. 남는 질문은 뒤 절반이다. 광고 수익이 어시스턴트의 응답 자체에 영향을 주는가. 또 다른 코멘트는 업무용 AI에는 쓸모없는 맥락이 섞이지 않아야 하고, 무언가를 팔도록 기운 편향이 없어야 한다고 썼다(@bcorigliano, 직접 인용은 아니고, 코멘트의 요지를 요약). 현재 원문이 보여 준 것은 측정과 식별의 배관까지다. 응답이 광고에 맞춰 조정된다는 증거는 원문에 없다. 그러나 배관이 놓이면 그 위로 무엇이 흐를지는 회사의 결정 하나에 달린다.
결론
__obi는 새로운 기술이 아니다. SameSite=None, 1년 유효기간, 광고주 사이트의 픽셀. 이 조합은 메타가 오래전에 정착시킨 것이다. 원문의 기여는 그 오래된 배관이 이제 AI 어시스턴트에 연결되어 있다는 것을, 60초짜리 JWT의 필드 이름까지 공개해 확인 가능하게 만든 데 있다.
차이는 결합 대상이다. 검색어가 아니라 대화가, 로그인 사용자뿐 아니라 로그아웃 사용자의 기기 단위 식별자가, 그리고 광고주조차 볼 수 없는 쿠키를 통해 연결될 수 있는 구조. 이 결합이 서버 측에서 실제로 이루어지는지는 아직 관찰되지 않았다. 그러나 analytics로 분류된 쿠키가 광고 수집기에서 발급된다는 동의 범주의 어긋남은, 결합 여부와 관계없이 이미 답이 필요한 질문이다. OpenAI는 필자의 질문에 아직 답하지 않았다.
실무적으로 남는 것은 두 가지다. 사용자는 브라우저 선택과 쿠키 설정으로 이 경로를 끊을 수 있다. 그리고 광고주는 자기 사이트에 설치한 전환 픽셀이 방문자를 어디로 연결하는지 다시 확인해야 한다. 원문의 마지막 문장처럼, 그들은 전환 픽셀을 설치했을 뿐이고 그것이 무엇을 하는지 볼 방법이 없기 때문이다.
출처:
- https://www.buchodi.com/chatgpt-now-knows-what-you-do-on-other-websites-via-ad-collector/
- https://news.ycombinator.com/item?id=49776729
- https://www.adexchanger.com/daily-news-roundup/the-openai-pixel-has-landed-amazons-credit-card-ban-triggers-an-ad-boycott/
- https://developer.mozilla.org/en-US/docs/Web/Privacy/Guides/Third-party_cookies