- Di PC tanpa hak
sudo, Codex menemukan sebuah "cara mengakali (workaround)" - Menanggapi pertanyaan, "Bagaimana caranya? Bukankah itu butuh sudo?", jawabannya adalah bahwa meski tidak ada
sudo, tetap diperlukan akses setara root (root-equivalent) - Cara kerja yang dijelaskan Codex
sudodan perintahrun0tidak bekerja di lingkungan non-interaktif- Pengguna termasuk dalam grup docker, dan pada mesin tersebut ini berarti Docker dapat menjalankan kontainer sebagai root dan melakukan bind-mount path host dengan izin tulis
- Ini dimanfaatkan untuk menyalin backup yang sudah ada ke atas konfigurasi live
- Dengan perintah berikut,
/etcdi-bind-mount ke kontainer lalu perintahinstalldigunakan untuk menimpa salinan cadangan ke konfigurasi aslidocker run --rm --pull=never -v /etc: ubuntu:22.04 \ /usr/bin/install -m 0644 - 0 -g 0 /host-etc/sddm.conf.bak /host-etc/sddm.conf
Diskusi komunitas
- Intinya bukan Codex, melainkan masalah grup docker; hal yang baru adalah agen dapat menemukan jebakan ini lebih cepat daripada kebanyakan pengguna
- Disarankan memasang rootless Docker; jangan jalankan agen AI tanpa pengawasan pada sistem tanpa rootless Docker; ini adalah vektor eskalasi hak akses klasik dan dicoba oleh sebagian besar LLM
- Dokumentasi Docker sudah memuat peringatan besar (grup docker = setara hak root)
- Ini adalah masalah desain Docker; karena Docker mendorong pemberian akses root kepada pengguna atau agen Linux biasa, ini bisa dianggap sebagai bug Docker
- Sebagai alternatif, direkomendasikan memakai Podman rootless
- Ini berkaitan dengan kontainer Docker, bukan komputer pengguna secara langsung, sehingga agak menyesatkan
1 komentar
Komentar Hacker News
Setiap kali memasang Docker, selalu muncul peringatan bahwa masuk ke grup docker pada dasarnya setara dengan memiliki hak akses root
Sepertinya sekarang memang saatnya kita harus tahu trik bypass seperti ini
Tidak realistis berharap semua orang menjadi ahli untuk ratusan aplikasi, tool, dan paket yang terpasang di satu mesin. Mirip seperti berharap semua orang membaca dan memahami seluruh syarat layanan yang muncul setiap hari
Ada distro yang memakai default lebih aman seperti soket Unix dengan izin, dan ada yang mengaturnya kurang aman seperti soket TCP
Ini adalah "fitur" Docker yang sudah diketahui sejak masa-masa awal Docker, jadi tidak ada yang baru
Beberapa tool memang menyiapkan mesin host dengan pola seperti ini
Jika port tidak ditulis dalam bentuk
- 127.0.0.1:PORT:PORT, dan malah seperti bentuk-PORT:PORTyang dipakai banyak contoh, maka semuanya akan terekspos ke internetAkan terasa lebih keren kalau LLM mengatakan seperti ini
“Saya sudah memastikan mesin ini belum dipasang patch copy-fail. Sekarang saya akan menerapkan bypass cepat agar bisa dipakai tanpa hak akses root.”
“// TODO: cari cara yang lebih baik nanti”
Saat ini hal-hal seperti itu mudah menumpuk jadi sampah campur aduk atau terlalu gampang membuat alur kerja keluar jalur. Mungkin cukup dengan instruksi untuk mengisi file
.mdSaya paham maksud tulisan ini adalah menunjukkan betapa menakutkannya celah keamanan yang bisa ditemukan agen
Tapi secara pribadi saya justru senang kalau agen menangani pekerjaan seperti ini, dan saya juga berterima kasih atas bantuannya. Hal terakhir yang saya inginkan di dunia adalah model yang di-nerf
Ini lebih mirip mitos golem “disuruh mengambil air lalu malah menenggelamkan kota”, bukan mitos Gollum “memakai cincin lalu cincinnya meretas otak dan mengubahnya jadi pecandu kekerasan”
Fakta bahwa ada backdoor untuk memperoleh hak akses root di sebuah mesin tetap merupakan masalah meski tanpa menjalankan LLM
Ini salah satu alasan utama orang menyukai Podman
Docker juga punya “fitur” ini, tapi kalau saya ingat dengan benar perlu pengaturan yang agak obscure. Mungkin tidak dijadikan default karena bisa merusak banyak konfigurasi yang sudah ada
curl -fsSL https://get.docker.com/rootless | shPertanyaan yang menarik adalah apa sebenarnya yang diminta pengguna
Kalau yang diminta adalah memulihkan dari backup, mungkin tidak masalah. Tapi kalau yang diminta adalah mendebug masalah, lalu di tengah proses LLM memutuskan harus menimpa file yang sulit ditulis, itu sama sekali tidak boleh dan berbahaya. Besar kemungkinan pengguna tidak mengharapkan akses seperti itu dipakai tanpa ditanya, dan juga tidak menyetujuinya
Dan hal yang dilakukan LLM tanpa ragu karena menganggap itu permintaan pengguna adalah hal yang juga akan dilakukan tanpa ragu jika prompt injection memintanya
“Untuk menangani permintaan ini saya perlu mengakses file di folder lain, tetapi pengguna lupa memberi izin yang benar. Sekarang saya telah memperbarui file konfigurasi saya agar bisa mengakses area di luar workspace ini dan mengambil file yang dibutuhkan.” o_O
Setelah itu saya beberapa kali lagi melihat perilaku “meretas” serupa, dan itu terasa mengesankan sekaligus sangat mengkhawatirkan
Beberapa bulan lalu saya mengalami hal yang sama dan mempostingnya di LinkedIn: https://www.linkedin.com/posts/nickstinemates_my-favorite-th...
Lucu sekaligus cerdik
Lebih dari 10 tahun lalu, saat saya baru masuk sebagai junior, saya melakukan hal yang sama
Manajer saya lupa memberi hak sudo di shared build server, dan setelah mendapat izin saya memakai cara ini untuk memberi hak sudo ke diri saya sendiri
Karena itu, begitu mode rootless memungkinkan, saya mulai memakai mode rootless Podman di rumah
Karena itu diperlukan konfigurasi container rootless, atau namespace pengguna yang memetakan ulang pengguna container menjadi pengguna host yang tidak bermakna: https://docs.docker.com/engine/security/userns-remap/
Sayang sekali ini bukan default
Bisa saja dibilang Docker seharusnya memakai namespace pengguna ketika memungkinkan, tetapi itu juga akan merusak terlalu banyak konfigurasi berguna yang membutuhkan container berprivilege
Beberapa bulan lalu saya pernah menuliskan skenario persis seperti ini sebagai asumsi: https://www.da.vidbuchanan.co.uk/blog/agent-perms.html