4 पॉइंट द्वारा GN⁺ 2026-03-30 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • ChatGPT में संदेश भेजते समय Cloudflare Turnstile program चलता है, जो browser fingerprint के साथ-साथ React application state तक की जांच करता है
  • Decrypt किए गए program में 55 properties इकट्ठी की जाती हैं, और browser, network, application — इन 3 layers में verification process चलता है
  • केवल उसी वास्तविक SPA environment में पास होना संभव है जहाँ React rendering पूरी हो चुकी हो, इसलिए headless browser या simple bot requests fail हो जाती हैं
  • इकट्ठा किया गया fingerprint encrypt होकर OpenAI-Sentinel-Turnstile-Token में बदल जाता है, और इसके साथ Signal Orchestrator तथा Proof of Work modules भी अतिरिक्त रूप से चलते हैं
  • Decryption key केवल Cloudflare server को पता होती है, इसलिए privacy boundary तकनीक नहीं बल्कि policy से तय होने वाली संरचना बनती है

ChatGPT में संदेश भेजते समय Cloudflare Turnstile के काम करने की संरचना का विश्लेषण

  • ChatGPT में हर message send पर browser के अंदर Cloudflare Turnstile program अपने-आप चलाया जाता है
    • Network traffic से 377 Turnstile programs को decrypt करने के नतीजे में पता चला कि यह सामान्य browser fingerprint collection से आगे बढ़कर React application state तक की जांच करता है
    • केवल browser fingerprint spoof करने वाले bots इससे पास नहीं हो सकते, और verification pass करने के लिए ChatGPT की SPA (single-page application) को पूरी तरह render करना पड़ता है

Encryption structure और decryption process

  • Turnstile bytecode server response के turnstile.dx field में आता है, और हर request पर 28,000 characters लंबी base64 string के रूप में encrypt रहता है
    • बाहरी encryption layer को p token और XOR operation से decrypt किया जा सकता है, और ये दोनों values उसी HTTP request के भीतर exchange होती हैं
    • Decrypt होने के बाद परिणाम 89 VM instructions वाले JSON-format bytecode के रूप में मिलता है
  • इसके अंदर 19KB आकार का एक अतिरिक्त encrypted blob मौजूद होता है, जिसे एक अलग XOR key से encrypt किया गया है
    • Key bytecode के अंदर float literal value (जैसे 97.35) के रूप में शामिल होती है, जिसे server बनाकर browser तक भेजता है
    • 50 requests में सभी बार इसी तरीके से valid JSON decryption की पुष्टि हुई
  • पूरा decryption process नीचे दिए गए 5 चरणों से बना है
    1. Request से p token पढ़ना
    2. Response से turnstile.dx पढ़ना
    3. XOR(base64decode(dx), p) → बाहरी bytecode बनता है
    4. 19KB blob के बाद वाले 5-argument instruction से आखिरी argument को key के रूप में निकालना
    5. XOR(base64decode(blob), str(key)) → अंदरूनी program decrypt करना (417~580 instructions)

Decrypt किए गए program के inspection items

  • अंदरूनी program 28 instructions (opcode) वाले custom VM पर चलता है, और हर request में floating-point register addresses को random तरीके से बदला जाता है
  • कुल 55 properties इकट्ठी की जाती हैं, और 377 samples में सभी में वही items शामिल थे
  • Layer 1: Browser fingerprint

    • WebGL से जुड़ी 8 properties: UNMASKED_VENDOR_WEBGL, UNMASKED_RENDERER_WEBGL, WEBGL_debug_renderer_info आदि
    • Screen info की 8 properties: colorDepth, pixelDepth, width, height, availWidth, availHeight, availLeft, availTop
    • Hardware की 5 properties: hardwareConcurrency, deviceMemory, maxTouchPoints, platform, vendor
    • Font measurement की 4 properties: hidden div बनाकर fontFamily, fontSize, getBoundingClientRect, innerText से rendering size मापना
    • DOM traversal की 8 properties: createElement, appendChild, removeChild, style, position, visibility, ariaHidden आदि
    • Storage की 5 properties: storage, quota, estimate, setItem, usage
      • Result को localStorage की key 6f376b6560133c2c में store किया जाता है ताकि page reloads के बीच यह बना रहे
  • Layer 2: Cloudflare network

    • Edge headers की 5 properties: cfIpCity, cfIpLatitude, cfIpLongitude, cfConnectingIp, userRegion
    • ये values केवल Cloudflare network के जरिए ही मौजूद होती हैं, इसलिए origin server तक सीधे पहुंचने वाले bots में ये missing या mismatched हो जाती हैं
  • Layer 3: Application state

    • React internal structures की 3 properties: __reactRouterContext, loaderData, clientBootstrap
    • ये items केवल तब मौजूद होते हैं जब ChatGPT की React application पूरी तरह render हो चुकी हो और SSR hydration पूरी हो गई हो
    • ऐसे headless browsers जो सिर्फ HTML load करते हैं या JS bundles नहीं चलाते, या ऐसे bot frameworks जो React को वास्तव में execute नहीं करते, वे fail हो जाते हैं

Token generation process

  • 55 properties collect करने के बाद, program 116-byte encrypted blob को decrypt करके 4 final instructions चलाता है
    • JSON.stringify(fingerprint)storeXOR(json, key)RESOLVE
    • Result value को OpenAI-Sentinel-Turnstile-Token header में बदला जाता है और सभी conversation requests में शामिल किया जाता है

Sentinel के अतिरिक्त components

  • Turnstile के अलावा दो अतिरिक्त verification modules भी मौजूद हैं
  • Signal Orchestrator

    • 271 instructions से बना है
    • keydown, pointermove, click, scroll, paste, wheel event listeners install करता है
    • window.__oai_so_* की 36 properties को track करके key input timing, mouse speed, scroll pattern, idle time, paste events आदि को monitor करता है
    • Fingerprint collection के अलावा यह behavior-based biometric authentication layer की भूमिका निभाता है
  • Proof of Work

    • 25-field fingerprint + SHA-256 hashcash पर आधारित
    • Difficulty 400K~500K range की uniform random होती है, और 72% मामलों में 5ms से कम समय में solve हो जाती है
    • ai, createPRNG, cache, solana, dump, InstallTrigger, data जैसी 7 binary detection flags शामिल हैं (100 samples में सभी 0)
    • यह computation cost बढ़ाता है, लेकिन मुख्य defense mechanism नहीं है

Token को decrypt कौन कर सकता है और security implications

  • अंदरूनी program की XOR key server बनाकर bytecode में शामिल करता है, इसलिए केवल वही server जो turnstile.dx बनाता है key जानता है
  • User और system operator के बीच privacy boundary cryptographic restriction नहीं बल्कि policy decision से परिभाषित होती है
  • Obfuscation का उद्देश्य है
    • fingerprint collection items को static analysis से छिपाना
    • website operator (OpenAI) को raw fingerprint values सीधे पढ़ने से रोकना
    • हर token को unique बनाकर reuse (replay) रोकना
    • Cloudflare inspection items बदल दे तब भी बाहरी लोगों के लिए पहचानना कठिन बनाना
  • लेकिन encryption उसी data stream के भीतर key और XOR operation पर आधारित है, इसलिए यह analysis resistance स्तर की obfuscation भर है

Collection और analysis statistics

मद मान
Decrypt किए गए programs 377/377 (100%)
Observe किए गए unique users 32
प्रति program properties की संख्या 55 (सभी समान)
Instructions की संख्या 417–580 (औसत 480)
XOR keys (50 samples) 41
Signal Orchestrator properties 36
Proof of Work fields 25
PoW solve time 72% मामलों में 5ms से कम

Analysis methodology

  • केवल कानूनी प्रक्रिया से इकट्ठा किया गया traffic इस्तेमाल किया गया
  • व्यक्तिगत user data सार्वजनिक नहीं किया गया
  • सभी traffic को participants की सहमति से observe किया गया
  • Sentinel SDK (sdk.js, 1,411 lines) पर manual deobfuscation और offline decryption किया गया
  • Decryption Python का उपयोग करके offline environment में किया गया

1 टिप्पणियां

 
GN⁺ 2026-03-30
Hacker News की राय
  • नमस्ते, मैं OpenAI की Integrity टीम में काम करने वाला Nick हूँ
    यह जांच बॉट, scraping, fraud आदि के जरिए प्लेटफ़ॉर्म के दुरुपयोग को रोकने के लिए सुरक्षा उपायों का हिस्सा है
    इसका मकसद free और non-logged-in users को access देते रहना है, जबकि GPU resources को वास्तविक users के लिए प्राथमिकता दी जाए
    हम page load time, first token तक का समय, payload size आदि मॉनिटर कर रहे हैं और सुरक्षा उपायों के overhead को न्यूनतम रखने पर ध्यान दे रहे हैं
    ज़्यादातर users पर इसका असर बहुत कम है, और केवल बहुत कम लोगों को थोड़ी latency महसूस हो सकती है
    साथ ही, false positive rate घटाते हुए दुरुपयोग को कठिन बनाने के लिए precision improvements का लगातार मूल्यांकन किया जा रहा है

    • यह दिलचस्प है कि OpenAI scraping को दुरुपयोग मानता है
    • आजकल स्थिति ऐसी लगती है कि ज़रूरी services इस्तेमाल करने के लिए client verification मानने वाला एक browser, और tracking से बचने के लिए दूसरा browser चाहिए
      Nick की बात समझ में आती है, लेकिन यह सोचने वाली बात है कि क्या हमें लगातार privacy और functionality में से एक चुनना पड़ेगा
    • पता नहीं यह संबंधित मुद्दा है या नहीं, लेकिन लंबी conversations में Chat UI की performance बहुत खराब हो जाती है
      input lag, rendering stutter, यहाँ तक कि पूरी तरह freeze भी हो जाता है
      iPhone 16 Safari और MacBook Pro M3 Chrome दोनों पर यही अनुभव हो रहा है
    • नए account ने सिर्फ दो comments किए हैं, तो शक होता है कि वह सच में इंसान है या OpenAI का बचाव करने वाला bot
      मज़ाक में यह सुझाव भी दिया गया कि Cloudflare के privacy-invading tools चलाकर नतीजे साझा करो
    • सीधे OpenAI के किसी व्यक्ति का जवाब सुनकर अच्छा लगा
      मैं Pro subscriber हूँ और मेरी पूरी team हर महीने 2,000 डॉलर से ज़्यादा खर्च करती है
      लेकिन VPN(Mullvad) इस्तेमाल करने पर, login होने के बावजूद Chat interface अक्सर disconnect हो जाता है या timeout देता है
      अच्छा होगा अगर paid users इसे VPN इस्तेमाल करने पर भी reliably चला सकें
  • Cloudflare को लेकर शिकायत है कि वह ‘suspicious’ browser या IP के नाम पर web को लगभग unusable बना देता है
    सिर्फ Firefox इस्तेमाल करने पर captcha hell में फँसने जैसा बताया गया

    • Cloudflare की ‘suspicious’ की परिभाषा लगातार फैलती जा रही है
      VPN, privacy-focused browsers, rare IP ranges जैसे मामलों में privacy को महत्व देने वाले users ही सबसे ज़्यादा फँसते हैं
      जबकि bots ऐसे filters को आसानी से bypass कर लेते हैं
    • सुझाव दिया गया कि देखो कहीं network से कोई अनजान web traffic तो नहीं जा रहा
      कहने वाला खुद Firefox इस्तेमाल करता है, लेकिन उसे सिर्फ सामान्य स्तर के captcha ही दिखते हैं
    • Firefox + Ublock Origin इस्तेमाल करने पर लगभग कभी captcha नहीं दिखा
      CGNAT बंद है, तो शायद वही फर्क पैदा कर रहा हो—ऐसी जिज्ञासा जताई गई
    • payment के तुरंत बाद लगातार 15 captcha हल करने का बेहूदा अनुभव साझा किया गया
      बैंक पहले ही identity verify कर चुका था, फिर भी site इंसान और bot में फर्क न कर पाए, यह समझना मुश्किल है
  • OpenAI non-logged-in users को free ChatGPT देता है, इसलिए लगता है कि वह इसे free API की तरह दुरुपयोग होने से बचाना चाहता है

    • यह जिज्ञासा जताई गई कि क्या login हो या न हो, ऐसी verification सब पर होती है
      Android app में Play Integrity check चलता है, जबकि Claude app सिर्फ login मांगता है और ऐसी verification नहीं करता
    • किसी ने साझा किया कि ChatGPT login के बिना भी काम करता मिला
      cookies या account के बिना सवाल डालते ही जवाब आ गया, यह देखकर हैरानी हुई
    • ऐसी protection का मकसद Pro subscribers के usage patterns की रक्षा भी है
      API की तुलना में subscription pricing काफी सस्ती है, इसलिए abuse prevention ज़रूरी है
      SPA load check जैसी चीज़ कोई बड़ी रुकावट नहीं है, और जो इसे समझता है उसके पास bypass करने की तकनीक पहले से होगी
      दूसरी कंपनियाँ भी अपने-अपने anti-bot systems बना रही हैं
    • 20 डॉलर महीने में GPT‑5.2 मिलना बहुत ही बढ़िया value है, इसलिए लगता है कि कभी न कभी pricing adjustment आएगा
    • copilot.microsoft.com भी शायद इसी तरह की Cloudflare-based protection इस्तेमाल करता है
  • यह दिलचस्प है कि ChatGPT का React app पूरी तरह render होने पर ही कुछ specific properties मौजूद होती हैं
    यानी यह browser level नहीं बल्कि application layer bot detection है
    लगता था कि ज़्यादातर advanced detection systems ऐसे ही काम करते हैं, इसलिए जिज्ञासा है कि इस खोज का खास महत्व क्या है

  • अच्छा होता अगर लेखक ने और साफ़ बताया होता कि इस समस्या को महत्वपूर्ण क्यों माना जाए
    आखिर बात बस इतनी है कि OpenAI चाहता है कि user official React app इस्तेमाल करें—तो इसमें समस्या क्या है, यह स्पष्ट नहीं है

    • इसलिए वह लेख AI से लिखा गया, कम-गुणवत्ता वाला लेख जैसा लगा
  • तकनीकी नज़रिये से यह रोचक है
    जहाँ तक जानकारी है, Turnstile में आम तौर पर site-specific configuration नहीं होती, इसलिए जिज्ञासा है कि OpenAI ने Turnstile data को अपने API के साथ कैसे जोड़ा

  • एक राय यह है कि bot operators सीधे Windows 11 VM + Chrome क्यों नहीं चलाते, यह समझ से बाहर है
    memory deduplication के साथ 50 VM एक साथ चलाए जा सकते हैं, और AWS पर हर 1000 page loads पर लगभग 1 cent लागत आती है, यानी यह काफी सस्ता है

    • ऐसी सुविधाएँ package के रूप में देने वाली services पहले से बहुत हैं
      IP rotation, location spoofing, language settings, built-in parsers जैसी कई options मिलती हैं, और switching cost भी कम है, इसलिए खुद बनाने की ज़रूरत कम पड़ती है
    • वास्तव में ऐसा VM-based तरीका महँगा पड़ता है, इसलिए bots की संख्या घटाने वाला deterrent effect पैदा होता है
      क्योंकि यह सरल तरीकों की तुलना में काफी अधिक महँगा है
    • scraping से जुड़े Reddit communities में देखा जाता है कि जब headless browser block हो जाते हैं, तो bot developers बहुत नाराज़ होते हैं
      सुझाव के मुताबिक Windows की जगह Linux containers इस्तेमाल किए जाएँ तो वे कहीं हल्के और अधिक efficient होते हैं
    • अगर GPU passthrough के बिना अच्छी graphics acceleration वाला Windows 11 VM आसानी से चलाने का कोई तरीका हो, तो बताने का अनुरोध किया गया
  • इसे ChatGPT द्वारा लिखा गया भद्दा लेख कहकर आलोचना की गई

    • मज़ाक में कहा गया, “web blogs की पारंपरिक विशेषता यह है कि उनके drafts इतने बिखरे होते हैं कि language model को भी दूसरी बार edit करना पड़ता है
  • 2023~2024 में किसी ने KeepChatGPT नाम का extension इस्तेमाल किया था
    API के बिना भी user बनकर काम करने का इसका तरीका दिलचस्प लगा
    बाद में Gemini के आने और बार-बार errors होने के कारण इसका इस्तेमाल बंद कर दिया, लेकिन AI panel को दाईं ओर ले जाने वाला option पसंद आया
    KeepChatGPT GitHub लिंक

    • वह खुद WinForms WebView का उपयोग करके ChatGPT को queries भेजने और JSON responses पाने वाला एक छोटा helper app इस्तेमाल करता है
      यह तरीका OpenAI के anti-bot system में बिल्कुल नहीं फँसता
  • यह सवाल उठाया गया कि Cloudflare और app के बीच integration standard Turnstile से आगे की कोई custom capability है, या फिर enterprise-only feature है