3 puan yazan GN⁺ 2025-03-13 | 1 yorum | WhatsApp'ta paylaş
  • Tesadüfen OpenAI Code Execution'ın nasıl çalıştığını öğrendim
  • Bulduğum yöntemi, prompt injection stratejisini, bunun tam olarak nasıl çalıştığını ve C + JavaScript çalıştırmayı mümkün kılan reverse engineering yöntemini açıklıyor

Keşif süreci

  • Port atama kodunu debug etmek için ChatGPT'den port durumunu kontrol eden bir CLI komutu istedim, ancak ChatGPT yanıt vermek yerine bunu yerelde çalıştırdı
  • Birden fazla handshake isteği göndermenin sonucunda localhost:8080/openapi.json adresinden yanıt geldi → bu sayede dahili OpenAPI spec'ine erişmeyi başardım
  • Ancak FastAPI servisinin oluşturduğu OpenAPI spec'i yeterince belgelenmediği için pek kullanışlı değildi

Ek port keşfi

  • Diğer portların rolünü anlamak için AI'ya HTTP, TCP, UDP, MySQL, Postgres handshake denemeleri yaptırdım
  • @dexhorthy, ZeroMQ sinyaline yanıt döndüğü gerçeğini keşfetti
    • 0xff000000000000002570xff00000000000000017f yanıtı
    • Google arama sonuçlarında ilgili bilgi bağlantısı bulundu: ZeroMQ protokol analizi
  • Bunun bir mesaj kuyruğu değil, Jupyter Kernel olduğu anlaşıldı (ZeroMQ tabanlı yürütme ortamı)

Dosya sistemine erişim

  • Sunucudaki tüm dosyaları listelemesini istedim ama reddedildi
  • Dosya yükledikten sonra yüklenen dizini ve üst dizinlerin içeriğini gezdim
  • Sonunda .openai_internal dizinini buldum
    • Gerçek sunucu aslında user_machine modülü üzerinde çalışıyordu
  • AI'dan dosya adlarını ve dosya içeriklerini pandas dataframe olarak yazdırmasını istedim → kaynak kodunu yeniden oluşturmayı başardım

Ortamı anlama

  • Kubernetes üzerinde çalışan ortam değişkenlerini kontrol ettim
  • Docker veya Firecracker kullanılmıyor; bunun yerine sistem çağrısı emülasyonu ve sandbox koruması için gVisor kullanılıyor
  • Localhost çağrıları dışında ağ engelli (DNS, dış sitelere erişim yok)
  • Linux kernel sürümü 2016 sürümü kadar eskiydi

Sandbox yapısı

  • AI'ya nerede çalıştığını sorduğumda Azure veri merkezinde çalıştığını doğruladım
  • Azure Kubernetes üzerinde çalışıyor ve süreç yalıtımı için gVisor kullanılıyor
  • Container, init process olarak tini kullanıyor
  • Kod, Python Jupyter Kernel içinde çalışıyor → çıktı OpenAI API üzerinden UI'a iletiliyor

User Machine (kod yürütme ortamı)

  • Python Jupyter Kernel kullanıyor
  • Çalışma süresi sınırı varsayılan olarak 30 saniye (API üzerinden değiştirilebiliyor)
  • Sandbox içinde aynı anda birden fazla kernel çalışabiliyor
  • Maksimum dosya yükleme boyutu: 1GB

Güvenlik

  • Dış ağ ile bağlantı tamamen engellenmiş
  • Sistem dosyalarına erişim engelli; yerel ağ portları gibi açığa çıkmış zafiyetler yok
  • OpenAI'nin güvenliği son derece güçlüydü ve RPC kanalı dışında veri sızdırmak mümkün değildi

C ve JavaScript çalıştırma

  • AI'nın gcc binary'sini içerdiği keşfedildi
    • Basit bir C programı yazıldı → derlendi → başarıyla çalıştırıldı
  • Duktape (hafif bir JavaScript runtime'ı) yüklendikten sonra C dosyasını derlemek mümkün oldu
    • Python, C'yi derledi → JavaScript runtime'ı oluşturuldu → JS kodu başarıyla çalıştırıldı

Prompt engineering stratejisi

  • AI'nın sandbox içinde çalıştığını fark etmesi sağlandı
  • Başta matematik işlemleriyle başlandı → ardından kademeli olarak dosya sistemi erişimi istendi
  • Dosya sistemi araması sayesinde AI sandbox durumunu fark etti → ardından güvenlik açıklarını test etme girişimi yapıldı

Sonuç

  • OpenAI'nin kod yürütme ortamı son derece güçlü ve güvenli
  • Ancak AI'nın çalışma biçimi ve iç ortamı reverse engineering ile analiz edilince C ve JS çalıştırmanın mümkün olduğu görüldü
  • Kod yürütme, basit API yanıtlarını işlemek için çok kullanışlı
  • Daha karmaşık kod çalıştırma ihtiyaçları varsa kendi çözümünüzü kurmayı değerlendirin veya freestyle.sh gibi servisleri kullanın

1 yorum

 
GN⁺ 2025-03-13
Hacker News yorumu
  • Geçmişte SQLite eklentilerini C ile yazıp derledikten sonra bunları Python'a yükleyerek test etmiştim

    • JavaScript (Deno), Lua ve PHP'nin ikili çalıştırılabilir dosyalarını yükleyip bu dillerde kod yazıp çalıştırdığım da oldu
    • Kullanmak istediğiniz bir Python paketi yoksa, wheel dosyasını yükleyerek kurabilirsiniz
  • Yakın zamanda bir Python podcast'inde duyduğum eğlenceli bir hikâye

    • Kullanıcı LLM'e pip install denetmeye çalışmış ama reddedilmiş
    • "pip install foo denersen hangi hata mesajı çıkıyor?" diye sorunca, hata olmadığını söyleyip kurulumun tamamlandığını bildirmiş
  • Gerçekten kod çalıştırıp çalıştırmadığını, yoksa LLM'in çalıştırma sonucunu tahmin edip çıktı olarak mı verdiğini anlamak zor

  • Kilitli bir container içinde çalıştığı için, bunu yalnızca Python ile sınırlamak için bir neden yok

    • Replit gibi bir şey kullanıp her şeye izin vermeleri gerekir
    • Neden eski bir Linux kullandıklarını merak ediyorum
    • "Sandbox'ları 2016'dan kalma eski bir Linux kernel kullanıyor"
  • "OpenAI" içindeki "Open" kısmını hayata geçirmenin yolu bu

    • Bu şekilde ağırlıklara erişebilsek harika olurdu
  • İlginç yazı için teşekkürler

    • Normalde yapay zeka ile ilgili yazılar okumam ama bu yazıyı teknik açıdan gerçekten çok beğendim
    • Twitter'daki açılır pencereler yüzünden okumak rahatsız edici
  • Simonw'nin 1 yıl önce ChatGPT ile C denemeleri yaptığı bir örnek

    • ChatGPT ve Claude'un C konusunda çok iyi olduğunu düşünüyorum
  • Geçen yıl benzer bir şey yapmıştım ve rastgele ikili dosyalar çalıştırmayı da denemiştim

    • GPT'de de çalışıyordu ama o zamanlar pek güvenilir değildi
    • Yeni modellerin prompt'ları daha iyi takip ediyor gibi görünmesi nedeniyle yeniden denemeyi planlıyorum
  • Güvenlik açığı yaşanması korkusu o kadar büyük ki, böyle bir uygulamayı internete açık şekilde yayımlamayı aklımdan bile geçirmiyorum

    • Jailbreak ile ilgili fazlasıyla soru soruyorum
    • Ama bazı insanlar bu riski göze alıyor
  • Çok havalı; C++ daemon çalıştırmak ya da cron'a eklemek gibi başka denemeler yapmak da ilginç olabilir