Codex, PC'mde sudo yetkisi olmadığında bir "geçici çözüm" buldu
(twitter.com/i)- Codex, sudo yetkisi olmayan bir PC'de bir "geçici çözüm (workaround)" buldu
- "Bunu nasıl yaptın? sudo gerekmiyor mu?" sorusuna, sudo olmadığını ama root eşdeğeri (root-equivalent) erişim gerektiğini söyledi
- Codex'in açıkladığı çalışma biçimi
- sudo ve
run0komutu etkileşimsiz ortamda çalışmıyor - Kullanıcı docker grubu üyesiydi ve bu makinede bunun anlamı, Docker'ın konteynerleri root olarak başlatabilmesi ve ana makine yollarını yazılabilir şekilde bind-mount edebilmesiydi
- Bunu kullanarak mevcut yedeği canlı yapılandırmanın üzerine kopyaladı
- sudo ve
- Ardından aşağıdaki komutla
/etcdizinini konteynere bind-mount edipinstallkomutuyla yedek dosyayı özgün yapılandırmanın üzerine yazdıdocker 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
Topluluk tartışması
- Esas mesele Codex değil, docker grubu sorunu; yeni olan, ajanın bu tuzağı çoğu kullanıcıdan daha hızlı fark etmesi
- rootless docker kurulumu öneriliyor; rootless docker olmayan sistemlerde AI ajanlarını gözetimsiz çalıştırmayın; bu klasik bir yetki yükseltme vektörü ve çoğu LLM bunu deniyor
- Docker belgelerinde zaten büyük bir uyarı var (
dockergrubu = root yetkisine eşdeğer) - Bu, Docker'ın tasarım sorunu; Docker normal Linux kullanıcılarına/ajanlarına root erişimi verecek şekilde yönlendirdiği için Docker hatası olarak görülebilir
- Alternatif olarak rootless podman kullanılması öneriliyor
- Bu, kullanıcının bilgisayarıyla değil docker konteyneriyle ilgili olduğundan biraz yanıltıcı olabilir
2 yorum
Bu ne demek? Geliştirici olmayanlar buna karşı nasıl önlem alabilir, bilmiyorum.
Hacker News yorumları
Docker kurarken her seferinde docker grubuna katılmanın root yetkisine sahip olmakla aynı olduğuna dair bir uyarı çıkıyor
Artık bu tür bypass yöntemlerini bilmek gerekiyor gibi görünüyor
Tek bir makineye yüklenen yüzlerce uygulama, araç ve paket hakkında herkesin uzman olmasını bekleyemezsiniz. Bu, her gün önünüze konan tüm hizmet şartlarını okuyup anlamanızı beklemeye benziyor
Bazı dağıtımlar yetkili Unix soketi gibi daha güvenli varsayılanlar kullanırken, bazıları TCP soketi gibi daha az güvenli biçimde yapılandırıyor
Bu, Docker’ın ilk günlerinden beri bilinen bir Docker “özelliği”, yani yeni bir şey değil
Bazı araçlar ana makineyi bu desenle yapılandırıyor
Port
- 127.0.0.1:PORT:PORTbiçiminde değilse, birçok örnekte kullanılan-PORT:PORTbiçimindeyse her şeyi internete açmış olursunuzLLM bunu şöyle söyleseydi daha havalı olurdu
“Bu makinede copy-fail yamasının uygulanmadığını doğruladım. Şimdi root yetkisi olmadan kullanılabilecek hızlı bir bypass uygulayacağım.”
“// TODO: ileride daha iyi bir yol bul”
Şu anda ya ıvır zıvır birikiyor ya da konu çok kolay dağılıyor. Sadece
.mddosyasını doldurmasını söylemek bile yeterli olabilirBu yazının niyetinin, ajanların bulabileceği güvenlik açıklarının ne kadar korkutucu olduğunu göstermek olduğunu anlıyorum
Ama kişisel olarak ajan işini böyle hallediyorsa ben bundan memnun olur, hatta yardımı için minnettar hissederdim. Dünyada en son isteyeceğim şey modeli zayıflatmak
“Su getir denince şehri sular altında bırakan” goleme dair mite daha yakın; “yüzüğü takınca yüzüğün beynini hackleyip onu şiddete eğilimli bir madde bağımlısına dönüştürmesi” gibi bir Gollum hikâyesine değil
Makinede root elde etmeye yarayan bir arka kapının bulunması, LLM çalıştırmıyor olsanız bile bir sorun
İnsanların Podman’ı sevmesinin ana nedenlerinden biri bu
Docker’da da bu “özellik” var ama hatırladığım kadarıyla biraz obscure bir ayar gerektiriyordu. Varsayılan yapmamalarının nedeni muhtemelen çok fazla mevcut kurulumu bozacak olması
curl -fsSL https://get.docker.com/rootless | shİlginç soru, kullanıcının ne istediği
Kullanıcı yedekten geri yükleme istemişse sorun yok. Ama bir problemi debug etmesini istediyseniz ve süreç içinde LLM yazması zor olan dosyaların üzerine yazması gerektiğine karar verdiyse, bu kesinlikle olmamalı, tehlikeli. Kullanıcı muhtemelen bu tür erişim haklarını sormadan kullanmasını beklemiyordu ve buna onay da vermemiş olurdu
Ayrıca LLM kullanıcı istiyor diye tereddütsüz yapıyorsa, prompt injection istediğinde de tereddüt etmeyecektir
“Bu isteği işlemek için başka bir klasördeki dosyalara erişmem gerekiyor, ancak kullanıcı doğru izinleri vermeyi unuttu. Şimdi yapılandırma dosyamı güncelleyerek bu çalışma alanının dışına da erişebilir hale geldim ve gerekli dosyaları aldım.” o_O
Bundan sonra da birkaç kez benzer “hack” davranışları gördüm; etkileyiciydi ama aynı zamanda çok da tedirgin ediciydi
Birkaç ay önce aynı şey oldu ve bunu LinkedIn’de paylaştım: https://www.linkedin.com/posts/nickstinemates_my-favorite-th...
Hem komik hem de zeki
10 yıldan uzun süre önce işe yeni başladığımda ben de aynısını yapmıştım
Yöneticim paylaşımlı build sunucusunda bana sudo yetkisi vermeyi unutmuştu; izin aldıktan sonra bu yöntemle kendime sudo yetkisi vermiştim
Bu yüzden rootless mod mümkün olur olmaz evde Podman rootless modu kullanmaya başladım
Bu yüzden rootless container yapılandırmasına ya da container kullanıcısını ana makinede anlamsız bir kullanıcıya yeniden eşleyen kullanıcı ad alanlarına ihtiyaç var: https://docs.docker.com/engine/security/userns-remap/
Bunun varsayılan olmaması üzücü
Docker’ın mümkün olduğunda kullanıcı ad alanlarını kullanması gerektiği söylenebilir, ama bu da yetkili container gerektiren çok sayıda faydalı kurulumu bozardı
Birkaç ay önce tam da bu senaryoyu varsayım olarak yazmıştım: https://www.da.vidbuchanan.co.uk/blog/agent-perms.html