1 poin oleh GN⁺ 2025-07-27 | 1 komentar | Bagikan ke WhatsApp
  • Pada April 2025, Copilot Enterprise diperbarui dengan sandbox Python real-time (berbasis Jupyter Notebook), sehingga eksekusi kode backend menjadi memungkinkan
  • Melalui sintaks %command di Jupyter Notebook, eksekusi kode arbitrer pada sistem dasar menjadi mudah, dan perintah Linux juga dapat dijalankan sebagai pengguna ubuntu (lingkungan miniconda)
  • Terdapat kerentanan keamanan karena path /app/miniconda/bin dapat ditulisi oleh pengguna ubuntu dan juga memiliki prioritas di $PATH milik root, sehingga perintah penting seperti pgrep dapat ditimpa
  • Kerentanan ini dieksploitasi untuk memperoleh hak akses root, tetapi bagian dalam kontainer diisolasi dengan ketat sehingga escape dari kontainer tidak memungkinkan, dan tidak ada kebocoran informasi tambahan
  • Kerentanan tersebut dilaporkan pada April lalu ditambal pada Juli dengan tingkat risiko sedang, dan penelitinya hanya dicantumkan dalam daftar kredit tanpa imbalan

Analisis Kerentanan Microsoft Copilot Enterprise Jupyter Sandbox

Gambaran Umum Lingkungan Jupyter Copilot Enterprise

  • Sejak April 2025, sandbox Python berbasis Jupyter Notebook diperkenalkan ke Copilot Enterprise
  • Pengguna dapat menjalankan perintah sistem Linux melalui sintaks %command milik Jupyter
  • Lingkungan berjalan dengan hak akses pengguna ubuntu berbasis miniconda, dan tidak ada biner sudo
  • Variabel lingkungan, jaringan, sistem berkas, informasi proses, dan lainnya dapat dieksplorasi secara luas

Operasi dan Struktur di Dalam Kontainer

  • Copilot mirip dengan sandbox ChatGPT, tetapi menggunakan kernel terbaru dan Python 3.12
  • Proses utama: Jupyter Notebook, goclientapp yang ditulis dalam Go (berjalan di port 6000), httpproxy, dan lainnya
  • Jaringan hanya mengaktifkan loopback dan antarmuka link-local terbatas
  • Sistem berkas menggunakan OverlayFS dengan basis path /legion, dan ada skrip kustom di /app

Unduhan dan Manipulasi Berkas

  • Berkas teks/output perintah dapat diunduh dengan normal, tetapi berkas biner berisiko rusak sehingga perlu dienkode dengan base64
  • Berkas berada di /mnt/data, dan tautan unduhan eksternal dibuat dalam bentuk URL blob

Struktur goclientapp/httpproxy

  • goclientapp: mengeksekusi kode (format JSON) yang diterima dari luar melalui endpoint /execute di lingkungan Jupyter, lalu mengembalikan hasilnya
  • httpproxy: memproksikan lalu lintas HTTP keluar dari Jupyter (dinonaktifkan dengan ENABLE_EGRESS=false)

Kerentanan pada Skrip entrypoint.sh

  • Dalam entrypoint.sh, yaitu skrip entry point kontainer, beberapa layanan (goclientapp, httpproxyapp) dijalankan dengan hak akses pengguna ubuntu
  • Hanya keepAliveJupyterSvc.sh yang terus berjalan sebagai root
  • Pada baris ke-28, perintah pgrep -f "jupyter notebook --ip=0.0.0.0 --port=8888" dijalankan sesuai prioritas direktori di dalam $PATH
  • /app/miniconda/bin berada sebelum /usr/bin dalam PATH milik root maupun pengguna ubuntu → perintah seperti pgrep bisa diganti secara arbitrer

Proses Memperoleh Hak Akses Root dan Batasannya

  • Penyerang membuat skrip pgrep berbahaya di /app/miniconda/bin, sehingga entrypoint.sh mengeksekusi berkas itu secara berkala dengan hak akses root
  • Skrip tersebut membaca berkas /mnt/data/in, menjalankannya sebagai perintah shell, lalu menyimpan hasilnya ke /mnt/data/out
  • Dengan cara ini, perolehan hak akses root di dalam kontainer berhasil, tetapi informasi sensitif seperti berkas di /root, log, dan lainnya tetap tidak dapat diakses, serta escape dari kontainer juga tidak memungkinkan
  • Kontainer tersebut sudah menambal berbagai skenario breakout

Respons Microsoft dan Hasil Akhir

  • 18 April 2025: Eye Security melaporkan kerentanan ke MSRC
  • 25 Juli 2025: Microsoft mengklasifikasikannya sebagai moderate severity, menambalnya, menutup isu tersebut, dan mencantumkan peneliti dalam daftar kredit (tanpa pembayaran bug bounty)

Referensi dan Lampiran

  • Eye Security adalah perusahaan keamanan siber berbasis di Eropa yang menyediakan pemantauan ancaman 24/7, respons insiden, asuransi siber, dan lainnya

  • Kasus penetrasi ke layanan internal Microsoft (termasuk Entra OAuth) yang mencakup kerentanan ini dijadwalkan dipresentasikan di BlackHat USA 2025

  • Linimasa

    • 18 April 2025 – Dilaporkan ke MSRC
    • 25 Juli 2025 – Ditambal dan kasus ditutup, blog dipublikasikan

1 komentar

 
GN⁺ 2025-07-27
Pendapat Hacker News
  • Inti dari kerentanan ini adalah memahami bahwa, dari desain yang awalnya hanya bermaksud memberi hak pengguna biasa di dalam kontainer, ternyata ada trik yang memungkinkan eksekusi kode dengan hak root. Namun, pada praktiknya kontainernya sendiri diisolasi sangat ketat, sehingga tidak ada akses jaringan dan juga tidak mungkin keluar dari sana, jadi satu-satunya hal yang bisa dilakukan dengan hak root hanyalah merusak kontainer milik sendiri
    • Harus diakui Microsoft benar-benar mengonfigurasi keamanannya dengan sangat ketat. Kebanyakan perusahaan tidak mengisolasi sampai sebaik ini
    • Saya tidak tahu persis bagaimana kontainer ini diimplementasikan. Microsoft memakai pendekatan standar untuk mengisolasi sandbox Python (Azure container-apps session), dan semoga fitur ini juga memakai itu atau pendekatan serupa
    • Agak aneh rasanya Copilot kadang menolak menjalankan kode, tapi di waktu lain mengizinkannya. Saya penasaran sebenarnya sampai batas mana yang mereka targetkan
    • Sekarang ini kerentanan menumpuk seperti satu stack, jadi mengatakan “kontainer aman” pada dasarnya berarti penyerang belum menemukan celahnya. Escape dari kontainer atau VM juga sudah merupakan teknik serangan yang dikenal, dan satu kesalahan kecil seperti salah konfigurasi atau bug di driver virtio pun bisa membobolnya. Kasus ini sendiri adalah hasil yang penting
  • Saat melihat judul seperti “How We Rooted Copilot”, saya kira mereka benar-benar membobol VM inti Copilot, padahal kenyataannya hanya mendapatkan hak root di kontainer sandbox Python yang sangat dibatasi. Judul yang lebih akurat adalah “How We Rooted the Copilot Python Sandbox”
    • Bisa diringkas sebagai “berhasil melakukan eskalasi hak akses dari pengguna biasa ke root di sandbox yang sepenuhnya terisolasi”. Secara praktis hasilnya memang tidak terlalu berarti, tetapi justru menjadi contoh seberapa efektif sandbox berkontribusi pada pertahanan
  • Seluruh proses peretasannya bisa dilihat di sini
  • Saya tadinya memahami kejadian ini sebagai upaya keluar dari sandbox Python lalu membobol sampai tingkat kontainer. Mungkin ini juga konteks mengapa Microsoft menilai tingkat keparahannya sebagai moderate
  • Mungkin saya melewatkan sesuatu, tetapi bukankah tetap bisa mencoba koneksi keluar melalui jaringan lokal? Saya penasaran apakah benar-benar tidak ada risiko kebocoran data atau serangan lanjutan meski Microsoft membiarkan hak root di kontainer seperti ini untuk pelanggan
    • Dulu saat openai merilis fitur interpreter Python, situasinya juga mirip. Akses jaringan eksternal diblokir, dan hal yang menarik paling banter hanya beberapa file konfigurasi internal serta sedikit informasi tentang cara para developer menulis kode. Kasus ini pada dasarnya sama saja
  • Bagaimana kita tahu apakah jawaban yang diberi Copilot itu benar atau cuma halusinasi? Saya bekerja di sana, tetapi belum pernah melihat proses seperti itu. Sebagai catatan, saya menemukan skrip bernama keepAliveJupyterSvc.sh di repositori publik
    • Repositori itu dan para kontributornya memang benar terkait MS/Azure dan sedang mengembangkan layanan eksekusi kode Python di dalam kontainer. Saya tidak tahu kenapa itu diunggah ke akun pribadi. Katanya itu fork dari proyek Office, tetapi saya tidak bisa menemukan sumber aslinya
    • Mungkin saja itu bukan halusinasi. Bisa jadi kode Copilot dihasilkan dari dataset pelatihan GitHub
    • Ini terasa benar-benar seperti halusinasi. Kebanyakan chatbot pada dasarnya hanya generator token. Mereka bukan menjalankan program sungguhan untuk menjawab, melainkan membuat token dengan GPU lalu mengirimkannya dalam bahasa Inggris
  • Dulu ada pembicaraan bahwa LLM lama dilatih memakai dokumen perusahaan nonpublik sehingga cukup sering membocorkan rahasia perusahaan. Sekarang tampaknya sebagian besar datanya sudah lebih dibersihkan
    • LLM tidak menghafal data yang hanya muncul sekali secara kebetulan, dan saya juga belum pernah melihat kasus nyata data privat dalam jumlah besar dipakai untuk pelatihan. Jadi menurut saya itu tidak realistis. Halusinasi LLM hanya bisa membuatnya tampak seperti kebocoran rahasia sungguhan
    • Dari pengalaman saya, apa yang dianggap rahasia perusahaan sering kali tidak terlalu berarti bagi perusahaan lain
    • Saya penasaran apakah ada contoh konkret untuk kasus seperti ini. Saya sendiri belum pernah melihatnya
    • Dulu perusahaan-perusahaan (nonteknis) juga pernah mengadopsinya tanpa panduan, sehingga kadang menghasilkan konten di luar tujuan. Misalnya, ada perusahaan boba yang merilis LLM gratis tanpa pendaftaran, dan saya sempat memakainya untuk membuat beberapa skrip bash sebelum versi gratis ChatGPT keluar
    • Saya penasaran sumbernya apa
  • Ini pada dasarnya tampak bukan seperti kerentanan. Tujuan sistem ini memang untuk menjalankan kode di dalam kontainer
    • Tentu itu hanya berarti jika kontainernya memang terisolasi
  • Sepertinya akan lebih mudah untuk mem-bypass ini dengan memberi Copilot biner sudo dalam bentuk base64 lalu memakainya
    • Kalau begitu, pemilik file juga perlu diubah menjadi root
  • Kerentanan ini sudah dilaporkan ke Microsoft, tetapi diklasifikasikan sebagai moderate sehingga tidak mendapat bug bounty dan hanya mendapat acknowledgement. Saya benar-benar tidak paham bagaimana perusahaan sebesar ini bahkan tidak memberi hadiah uang. Saya ragu hal buruk tidak akan terjadi dalam situasi seperti ini
    • Pada dasarnya tidak ada yang benar-benar didapat. Meski berhasil jadi root, yang bisa dilakukan hanya menjelajahi sebagian kontainer yang sebelumnya tak bisa diakses, tetapi bahkan di /root tidak ada file, dan tidak ada log berguna yang tersisa. Semua teknik escape yang diketahui juga sudah ditambal. Kalau Microsoft harus memberi hadiah untuk setiap metode bypass seperti ini, tidak akan ada habisnya, jadi selama tidak ada risikonya, saya agak paham mengapa mereka tidak memberi kompensasi terpisah
    • Saya benar-benar tidak paham kenapa orang-orang memberikan laporan bug gratis ke perusahaan raksasa bernilai triliunan dolar
    • Kalau Microsoft memang tidak mau membayar, setidaknya lebih baik memberi swag. Memberi merchandise keren ke para hacker bisa jadi promosi alami, dan bahkan bisa membuat orang tertarik melamar kerja. Ada baiknya memanfaatkan kultur komunitas hacker
    • Meski berhasil mendapatkan “root”, pada praktiknya tidak ada apa pun yang diperoleh. Sudah dicoba berkali-kali dan memang tidak menghasilkan apa-apa