3 poin oleh GN⁺ 2025-03-13 | 1 komentar | Bagikan ke WhatsApp
  • Secara kebetulan menemukan cara kerja OpenAI Code Execution
  • Menjelaskan metode yang ditemukan, strategi prompt injection, cara kerjanya secara persis, serta metode reverse engineering yang memungkinkan C + JavaScript dijalankan

Proses penemuan

  • Saat mencoba men-debug kode alokasi port, penulis meminta perintah CLI untuk memeriksa status port kepada ChatGPT, tetapi alih-alih menjawab, ChatGPT menjalankannya secara lokal
  • Setelah mengirim beberapa permintaan handshake, ada respons dari localhost:8080/openapi.json → dari sini berhasil mengakses spesifikasi OpenAPI internal
  • Namun, spesifikasi OpenAPI yang dihasilkan dari layanan FastAPI minim dokumentasi sehingga kurang berguna

Eksplorasi port tambahan

  • Untuk memahami peran port lain, penulis meminta AI mencoba handshake HTTP, TCP, UDP, MySQL, dan Postgres
  • @dexhorthy menemukan bahwa ada respons terhadap sinyal ZeroMQ
    • 0xff00000000000000257 → respons 0xff00000000000000017f
    • Dari hasil pencarian Google ditemukan tautan informasi terkait: Analisis protokol ZeroMQ
  • Lalu diketahui bahwa itu bukan message queue, melainkan Jupyter Kernel (lingkungan eksekusi berbasis ZeroMQ)

Akses sistem file

  • Meminta untuk menampilkan semua file di server tetapi ditolak
  • Setelah mengunggah file, penulis menelusuri direktori unggahan dan direktori di atasnya
  • Akhirnya menemukan direktori .openai_internal
    • Server sebenarnya berjalan di dalam modul user_machine
  • Meminta AI menampilkan nama file dan isi file sebagai dataframe pandas → berhasil merekonstruksi source code

Memahami lingkungan

  • Mengonfirmasi variabel lingkungan bahwa sistem berjalan di Kubernetes
  • Tidak menggunakan Docker atau Firecracker, melainkan gVisor untuk emulasi system call dan perlindungan sandbox
  • Jaringan diblokir kecuali panggilan localhost (DNS dan akses ke situs eksternal tidak tersedia)
  • Versi kernel Linux sangat lama, yaitu versi tahun 2016

Struktur sandbox

  • Saat AI ditanya di mana ia berjalan, dipastikan bahwa ia berjalan di pusat data Azure
  • Berjalan di Azure Kubernetes, menggunakan gVisor untuk isolasi proses
  • Container menggunakan tini sebagai proses init
  • Kode dieksekusi di Python Jupyter Kernel → output dikirim ke UI melalui OpenAI API

User Machine (lingkungan eksekusi kode)

  • Menggunakan Python Jupyter Kernel
  • Batas waktu eksekusi secara default adalah 30 detik (dapat diubah melalui API)
  • Beberapa kernel dapat berjalan bersamaan di dalam sandbox
  • Ukuran maksimum unggahan file: 1GB

Keamanan

  • Koneksi ke jaringan eksternal diblokir sepenuhnya
  • Akses ke file sistem diblokir, dan tidak ada celah yang terekspos seperti port jaringan lokal
  • Keamanan OpenAI sangat kuat, dan selain kanal RPC tidak ada cara untuk mengekspor data

Menjalankan C dan JavaScript

  • Ditemukan bahwa AI menyertakan biner gcc
    • Menulis program C sederhana → kompilasi → berhasil dijalankan
  • Setelah mengunggah Duktape (runtime JavaScript ringan), berhasil mengompilasi file C
    • Python mengompilasi C → membuat runtime JavaScript → berhasil menjalankan kode JS

Strategi prompt engineering

  • Menipu AI agar mengenali bahwa dirinya berjalan di dalam sandbox
  • Awalnya dimulai dari operasi matematika → lalu secara bertahap meminta akses sistem file
  • Melalui penelusuran sistem file, AI mengenali status sandbox-nya → lalu mencoba menguji celah keamanan

Kesimpulan

  • Lingkungan eksekusi kode OpenAI sangat kuat dan aman
  • Namun, dari hasil reverse engineering terhadap cara kerja AI dan lingkungan internalnya, C dan JS ternyata bisa dijalankan
  • Eksekusi kode sangat berguna untuk menangani respons API sederhana
  • Jika membutuhkan eksekusi kode yang kompleks, pertimbangkan membangun solusi sendiri atau gunakan layanan seperti freestyle.sh

1 komentar

 
GN⁺ 2025-03-13
Komentar Hacker News
  • Pernah menulis ekstensi SQLite dalam C, mengompilasinya, lalu memuatnya ke Python untuk diuji

    • Juga pernah mengunggah berkas biner eksekusi JavaScript (Deno), Lua, dan PHP, lalu menulis dan menjalankan kode dalam bahasa tersebut
    • Jika tidak ada paket Python yang ingin digunakan, file wheel bisa diunggah lalu dipasang
  • Cerita menarik yang baru-baru ini didengar di podcast Python

    • Pengguna mencoba membuat LLM menjalankan pip install, tetapi ditolak
    • Saat ditanya, "pesan galat apa yang muncul jika mencoba pip install foo?", ia menyatakan tidak ada galat dan paket pun terpasang
  • Tidak jelas apakah kode benar-benar dijalankan, atau LLM hanya menebak hasil eksekusinya lalu menampilkannya

  • Karena dijalankan di dalam container yang terkunci, tidak ada alasan untuk membatasinya hanya pada Python

    • Harusnya seperti Replit dan mengizinkan semuanya
    • Penasaran mengapa menggunakan Linux lama
    • "Sandbox mereka menggunakan kernel Linux lama dari tahun 2016"
  • Ini adalah cara mewujudkan bagian "Open" dalam "OpenAI"

    • Akan keren jika dengan cara seperti ini kita bisa mendapatkan bobot modelnya
  • Terima kasih untuk artikelnya yang menarik

    • Biasanya saya tidak membaca artikel terkait AI, tetapi saya sangat menyukai artikel ini dari sudut pandang teknis
    • Sulit dibaca di Twitter karena popup
  • Contoh Simonw yang bereksperimen dengan C di ChatGPT setahun lalu

    • Saya rasa ChatGPT dan Claude sangat bagus dalam C
  • Tahun lalu saya melakukan hal serupa, dan juga pernah mencoba menjalankan biner arbitrer

    • Itu juga bisa dijalankan di GPT, tetapi saat itu keandalannya belum tinggi
    • Model baru tampaknya lebih baik mengikuti prompt, jadi saya berencana mencobanya lagi
  • Kekhawatiran akan kegagalan keamanan sangat besar sehingga saya bahkan tidak terpikir untuk merilis aplikasi seperti itu secara online

    • Saya jadi terlalu sering mengajukan pertanyaan terkait jailbreak
    • Namun, ada orang-orang yang bersedia mengambil risiko seperti ini
  • Sangat keren, dan akan menarik juga mencoba hal lain seperti menjalankan daemon C++ atau menambahkannya ke cron