3 पॉइंट द्वारा GN⁺ 2025-03-13 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • संयोग से OpenAI Code Execution के काम करने का तरीका पता चला
  • इसमें खोजी गई विधि, prompt injection रणनीति, यह ठीक-ठीक कैसे काम करता है, और C + Javascript चलाने लायक बनाने के लिए इस्तेमाल की गई reverse engineering विधि समझाई गई है

खोज की प्रक्रिया

  • पोर्ट allocation code को debug करने के लिए ChatGPT से पोर्ट की स्थिति जाँचने वाला CLI कमांड मांगा, लेकिन ChatGPT ने जवाब देने के बजाय उसे लोकल में चलाया
  • कई handshake requests भेजने के बाद localhost:8080/openapi.json से जवाब मिला → इससे आंतरिक OpenAPI spec तक पहुँच सफल हुई
  • लेकिन FastAPI service से बनी OpenAPI spec में दस्तावेज़ीकरण कम था, इसलिए उसकी उपयोगिता सीमित थी

अतिरिक्त पोर्ट की जाँच

  • दूसरे पोर्ट्स की भूमिका समझने के लिए AI से HTTP, TCP, UDP, MySQL, Postgres handshake आज़माए
  • @dexhorthy ने पाया कि ZeroMQ signals पर जवाब लौटता है
    • 0xff000000000000002570xff00000000000000017f जवाब
    • Google search के बाद संबंधित जानकारी का लिंक मिला: ZeroMQ protocol analysis
  • पता चला कि यह message queue नहीं बल्कि Jupyter Kernel है (ZeroMQ-आधारित execution environment)

फ़ाइल सिस्टम तक पहुँच

  • सर्वर की सभी फ़ाइलों की सूची माँगी, लेकिन मना कर दिया गया
  • फ़ाइल upload करने के बाद uploaded directory और उसकी parent directories की सामग्री देखी गई
  • आखिरकार .openai_internal directory मिली
    • असली सर्वर वास्तव में user_machine मॉड्यूल में चल रहा था
  • AI से फ़ाइल नाम और फ़ाइल सामग्री को pandas dataframe के रूप में आउटपुट करने को कहा → source code को पुनर्निर्मित करने में सफलता मिली

environment को समझना

  • Kubernetes पर चल रहे environment variables की पुष्टि की
  • Docker या Firecracker का उपयोग नहीं था; उसकी जगह gVisor के जरिए system call emulation और sandbox protection किया जा रहा था
  • localhost calls के अलावा नेटवर्क ब्लॉक था (DNS, बाहरी साइट्स तक पहुँच संभव नहीं)
  • Linux kernel version 2016 का संस्करण था, यानी काफी पुराना

sandbox संरचना

  • जब AI से पूछा गया कि वह कहाँ चल रहा है, तो उसने पुष्टि की कि वह Azure data center में चल रहा है
  • यह Azure Kubernetes पर चल रहा था, और process isolation के लिए gVisor का उपयोग था
  • container में init process के रूप में tini इस्तेमाल हो रहा था
  • Python Jupyter Kernel में code execution होता था → और OpenAI API के जरिए UI तक output जाता था

User Machine (code execution environment)

  • Python Jupyter Kernel का उपयोग
  • execution time limit डिफ़ॉल्ट रूप से 30 सेकंड थी (API में बदली जा सकती है)
  • sandbox में एक साथ कई kernels चल सकते थे
  • फ़ाइल upload की अधिकतम सीमा: 1GB

सुरक्षा

  • बाहरी नेटवर्क से कनेक्शन पूरी तरह ब्लॉक
  • system files तक पहुँच अवरुद्ध थी, और local network ports जैसी कोई exposed vulnerability नहीं मिली
  • OpenAI की सुरक्षा बहुत मजबूत थी, और RPC channel के अलावा data exfiltration संभव नहीं था

C और JavaScript चलाना

  • पता चला कि AI में gcc binary मौजूद है
    • एक साधारण C program लिखा → compile किया → सफलतापूर्वक चलाया
  • Duktape (हल्का JavaScript runtime) upload करने के बाद C file compile करने में सफलता मिली
    • Python ने C को compile किया → JavaScript runtime बनाया → JS code सफलतापूर्वक चला

prompt engineering रणनीति

  • AI को यह मानने के लिए बहकाया गया कि वह sandbox में चल रहा है
  • शुरुआत में गणितीय operations से शुरू किया → फिर धीरे-धीरे file system access के अनुरोध किए
  • file system search के जरिए AI ने sandbox स्थिति पहचानी → फिर security gaps की जाँच की कोशिश हुई

निष्कर्ष

  • OpenAI का code execution environment बहुत मजबूत और सुरक्षित है
  • लेकिन AI के व्यवहार और आंतरिक environment की reverse engineering के नतीजे में C और JS चलाना संभव हुआ
  • code execution साधारण API response processing के लिए बहुत उपयोगी है
  • अगर जटिल code execution चाहिए, तो अपना solution बनाना या freestyle.sh जैसी service का उपयोग करने पर विचार करने की सलाह दी गई है

1 टिप्पणियां

 
GN⁺ 2025-03-13
Hacker News राय
  • पहले SQLite extension को C में लिखकर compile किया, फिर उसे Python में load करके test करने का अनुभव रहा है

    • JavaScript(Deno), Lua, PHP के binary executable files upload करके उन भाषाओं में code लिखने और चलाने का अनुभव भी रहा है
    • अगर वह Python package उपलब्ध न हो जिसे इस्तेमाल करना हो, तो wheel file upload करके install किया जा सकता है
  • हाल ही में Python podcast में सुनी गई एक मज़ेदार बात

    • user ने LLM से 'pip install' करवाने की कोशिश की, लेकिन उसने मना कर दिया
    • जब पूछा गया, "pip install foo को try करने पर कौन-सा error message आता है?", तो उसने बताया कि कोई error नहीं आया और install हो गया
  • यह पता नहीं चलता कि वह सच में code execute कर रहा है, या LLM execution result का अंदाज़ा लगाकर output दे रहा है

  • क्योंकि यह locked container में चल रहा है, इसे सिर्फ Python तक सीमित रखने की कोई वजह नहीं है

    • Replit जैसी किसी चीज़ का इस्तेमाल करके सब कुछ allow करना चाहिए
    • यह जानना दिलचस्प है कि वे पुराना Linux क्यों इस्तेमाल कर रहे हैं
    • "उनका sandbox 2016 के पुराने Linux kernel का इस्तेमाल कर रहा है"
  • "OpenAI" में "Open" को लागू करने का यही तरीका है

    • अगर इस तरह weights मिल जाएँ, तो यह शानदार होगा
  • दिलचस्प लेख के लिए धन्यवाद

    • मैं आम तौर पर AI से जुड़े लेख नहीं पढ़ता, लेकिन तकनीकी नज़रिए से यह लेख मुझे बहुत पसंद आया
    • Twitter पर pop-up की वजह से पढ़ना असुविधाजनक है
  • Simonw का 1 साल पहले ChatGPT और C के साथ किया गया प्रयोग

    • मुझे लगता है कि ChatGPT और Claude, C में बहुत अच्छे हैं
  • पिछले साल मैंने भी कुछ ऐसा ही किया था, और arbitrary binaries चलाने की भी कोशिश की थी

    • GPT में भी यह चल जाता था, लेकिन उस समय reliability ज़्यादा नहीं थी
    • लगता है नए models prompt को बेहतर तरीके से follow करते हैं, इसलिए इसे फिर से आज़माने वाला हूँ
  • security failure का डर इतना बड़ा है कि मैं ऐसे app को online public करने के बारे में सोच भी नहीं सकता

    • jailbreak से जुड़े सवाल बहुत ज़्यादा पूछने पड़ते हैं
    • लेकिन कुछ लोग ऐसे risks उठाते हैं
  • यह बहुत बढ़िया है, और C++ daemon चलाने या cron में जोड़ने जैसी दूसरी कोशिशें करना भी दिलचस्प होगा