ChatGPT Won't Let You Type Until Cloudflare Reads Your React State. I Decrypted the Program That Does It.
- 원문 제목: ChatGPT Won't Let You Type Until Cloudflare Reads Your React State. I Decrypted the Program That Does It.
- 원문 링크: https://www.buchodi.com/chatgpt-wont-let-you-type-until-cloudflare-reads-your-react-state-i-decrypted-the-program-that-does-it/
- 번역일: 2026-04-05 KST
작성자는 ChatGPT에서 메시지를 보낼 때마다 브라우저 안에서 조용히 실행되는 Cloudflare Turnstile 프로그램을 네트워크 트래픽 기준으로 분석했고, 377개의 프로그램을 복호화했다고 말한다. 결론은 단순한 브라우저 핑거프린팅보다 한 단계 더 나아가 있다는 점이다. 이 프로그램은 브라우저 정보만 보는 게 아니라, Cloudflare 네트워크 정보와 ChatGPT의 React 애플리케이션 상태까지 함께 확인한다.
작성자에 따르면 이 검사는 크게 세 층으로 나뉜다.
- 브라우저 레이어: GPU, 화면 해상도, 폰트 측정, DOM 조작 가능 여부, 스토리지 상태 같은 전통적 핑거프린트
- Cloudflare 네트워크 레이어: 도시, 위도/경도, 연결 IP, 지역 정보 등 엣지에서 주입되는 값
- 애플리케이션 레이어:
__reactRouterContext,loaderData,clientBootstrap같은 React/SSR 하이드레이션 관련 상태
핵심은 세 번째다. 봇이 User-Agent나 WebGL 값만 그럴듯하게 속여도, 실제 ChatGPT SPA가 끝까지 부팅되고 하이드레이션된 흔적이 없으면 실패한다는 주장이다. 즉, “진짜 브라우저인가?”가 아니라 “진짜 브라우저에서 특정 React 앱이 정상적으로 올라왔는가?”까지 본다는 얘기다.
복호화 과정도 흥미롭다. Turnstile 바이트코드는 암호화되어 전달되지만, 작성자는 HTTP 요청/응답 안에 이미 필요한 XOR 키가 함께 들어 있어 분석이 가능했다고 설명한다. 바깥 레이어는 요청에 포함된 p 토큰으로 XOR 해제하고, 안쪽 레이어는 바이트코드 명령 안에 박혀 있는 부동소수점 리터럴 값으로 다시 XOR 해제한다. 즉, 강한 암호학적 은닉이라기보다 정적 분석과 쉬운 관찰을 어렵게 만드는 난독화에 가깝다는 평가다.
복호화된 내부 프로그램은 총 55개의 속성을 읽는다. 그 중 브라우저 레이어는 WebGL 벤더/렌더러, 화면 크기와 색심도, CPU 코어 수와 메모리, 숨겨진 DOM에 특정 폰트를 렌더링해 크기를 측정하는 방식, 로컬 스토리지/쿼터 정보 등을 포함한다. 네트워크 레이어는 Cloudflare 엣지 헤더를 읽어 “이 요청이 실제로 Cloudflare를 통해 왔는가”를 확인한다. 애플리케이션 레이어는 React Router 문맥과 loader 결과, 클라이언트 부트스트랩 상태를 확인해 “HTML만 받아놓고 JS를 안 돌린 헤드리스 환경”을 가려내려 한다.
작성자는 최종적으로 이 수집 결과가 JSON 직렬화되고 다시 XOR 처리된 뒤, 부모 루틴으로 전달되어 OpenAI-Sentinel-Turnstile-Token 헤더 생성에 기여한다고 설명한다. 그리고 Turnstile 외에도 키 입력, 마우스 이동, 스크롤, 붙여넣기 같은 행동 패턴을 수집하는 시그널 오케스트레이터와, 별도의 PoW(작업 증명) 루틴이 함께 동작한다고 적었다.
실무적으로 이 글이 주는 메시지는 꽤 분명하다. 현대 봇 방어는 더 이상 “브라우저처럼 보이게 속이기” 수준에서 끝나지 않는다. 앱이 실제로 렌더링되었는지, 하이드레이션되었는지, 사용자의 상호작용 흔적이 자연스러운지까지 함께 본다. 프론트엔드 관점에서는 SSR/CSR 경계, hydration 시점, 앱 내부 전역 상태가 보안·탐지 체계의 일부가 될 수 있다는 점을 보여준다.
또 하나 중요한 지점은 프라이버시다. 앱 내부 상태와 네트워크 단서, 브라우저 특성을 결합하면 탐지 정확도는 올라갈 수 있지만, 그만큼 사용자를 더 정밀하게 식별할 여지도 커진다. 작성자도 이 경계는 기술 문제가 아니라 운영 주체의 정책 결정 문제라고 지적한다.
정리하면, 이 글은 “Cloudflare Turnstile이 브라우저를 본다”는 수준을 넘어서 “특정 React 앱이 실제로 정상 부팅되었는지까지 본다”는 점을 드러낸다. SPA 기반 서비스에서 보안·탐지 로직이 앱 런타임 자체와 얼마나 깊게 결합될 수 있는지를 보여주는 사례다.