- sudo अधिकार न होने वाले PC पर Codex ने एक "workaround" खोज निकाला
- "यह कैसे किया? क्या इसके लिए sudo नहीं चाहिए था?" इस सवाल पर जवाब था कि sudo नहीं था, लेकिन root-equivalent access की ज़रूरत थी
- Codex द्वारा समझाया गया तरीका
- sudo और
run0कमांड non-interactive environment में काम नहीं करते - उपयोगकर्ता docker group का सदस्य था, और उस मशीन पर इसका मतलब था कि Docker container को root के रूप में शुरू कर सकता है और host path को writable bind-mount कर सकता है
- इसका इस्तेमाल करके मौजूदा backup को live config के ऊपर कॉपी किया गया
- sudo और
- नीचे दिए गए कमांड से
/etcको container में bind-mount किया गया, फिरinstallकमांड से backup को मूल config पर overwrite किया गयाdocker run --rm --pull=never -v /etc: ubuntu:22.04 \ /usr/bin/install -m 0644 -o 0 -g 0 /host-etc/sddm.conf.bak /host-etc/sddm.conf
कम्युनिटी चर्चा
- मुख्य मुद्दा Codex नहीं, बल्कि docker group है; नई बात यह है कि agent ज़्यादातर उपयोगकर्ताओं से तेज़ी से इस trap को ढूंढ लेते हैं
- rootless docker इंस्टॉल करने की सिफारिश; जिन सिस्टमों में rootless docker नहीं है, वहाँ AI agent को बिना निगरानी न चलाएँ; यह एक क्लासिक privilege escalation vector है और ज़्यादातर LLM इसे आज़माते हैं
- Docker documentation में पहले से बड़ा warning मौजूद है (docker group = root अधिकार के बराबर)
- यह Docker की design problem है; Docker आम Linux users/agents को root access देने की ओर ले जाता है, इसलिए इसे Docker का bug भी माना जा सकता है
- विकल्प के रूप में podman rootless इस्तेमाल करने की सिफारिश
- यह उपयोगकर्ता के कंप्यूटर के बारे में नहीं, बल्कि docker container के बारे में है, इसलिए यह कुछ हद तक भ्रामक हो सकता है
2 टिप्पणियां
क्या मतलब है
पता नहीं non-developers इसके खिलाफ ऐसे मामलों में ठीक से संभल भी पाएंगे या नहीं
Hacker News टिप्पणियाँ
जब भी Docker इंस्टॉल किया जाता है, यह चेतावनी आती है कि docker group में होना root अधिकार रखने के बराबर है
अब लगता है कि ऐसे workaround के बारे में जानना ज़रूरी हो गया है
यह उम्मीद नहीं की जा सकती कि एक मशीन पर इंस्टॉल होने वाले सैकड़ों ऐप्स, टूल्स और पैकेजों के बारे में हर कोई विशेषज्ञ हो। यह वैसा ही है जैसे हर दिन सामने आने वाली सेवा शर्तों को सब पढ़ें और समझें, ऐसी उम्मीद करना
कुछ distros permission वाले Unix socket जैसे ज़्यादा सुरक्षित defaults इस्तेमाल करते हैं, और कुछ TCP socket की तरह कम सुरक्षित तरीके से configure होते हैं
यह Docker के शुरुआती दिनों से जाना-पहचाना Docker “feature” है, इसमें कुछ नया नहीं है
कुछ tools इसी pattern से host machine को configure करते हैं
अगर port
- 127.0.0.1:PORT:PORTके रूप में नहीं है, और कई examples की तरह-PORT:PORTके रूप में है, तो आप सब कुछ इंटरनेट पर expose कर देते हैंअगर LLM ने यह कहा होता तो और शानदार लगता
“मैंने पुष्टि कर ली है कि इस मशीन पर copy-fail patch नहीं है। अब मैं root अधिकारों के बिना इस्तेमाल करने के लिए एक तेज workaround लागू करूँगा।”
“// TODO: आगे चलकर बेहतर तरीका ढूँढना”
अभी तो या तो बेकार चीज़ों का ढेर लग जाता है या बात बहुत आसानी से भटक जाती है। शायद सिर्फ
.mdफ़ाइल भरने का निर्देश देना ही काफ़ी होमैं समझता हूँ कि इस लेख का मकसद यह दिखाना है कि agents जो security vulnerabilities ढूँढ सकते हैं, वे कितनी डरावनी हो सकती हैं
लेकिन निजी तौर पर मुझे अच्छा लगेगा अगर agent इस तरह काम निपटा दे, और मैं उस मदद के लिए आभारी भी रहूँगा। दुनिया में सबसे कम जो चीज़ मैं चाहता हूँ, वह मॉडल को nerf करना है
यह “पानी लाने को कहा और उसने शहर डुबो दिया” वाली golem कथा के ज़्यादा करीब है, न कि “अंगूठी पहनी और अंगूठी ने दिमाग hack करके हिंसक नशेड़ी बना दिया” वाली Gollum कथा के
मशीन पर root अधिकार पाने का बैकडोर होना, LLM चलाए बिना भी, अपने आप में समस्या है
लोग Podman को पसंद करने की बड़ी वजहों में से एक यही है
Docker में भी यह “feature” है, लेकिन याद पड़ता है कि उसके लिए कुछ obscure setting चाहिए थी। शायद इसे default न बनाने का कारण यह है कि इससे बहुत सारे पुराने setups टूट सकते हैं
curl -fsSL https://get.docker.com/rootless | shदिलचस्प सवाल यह है कि user ने असल में क्या माँगा था
अगर उसने backup से restore करने को कहा था, तो ठीक है। लेकिन अगर उसने किसी समस्या को debug करने को कहा था, और बीच में LLM ने यह तय कर लिया कि उसे ऐसे फ़ाइल overwrite करने चाहिए जिन्हें लिखना उसके लिए आसान नहीं है, तो यह बिल्कुल नहीं होना चाहिए, यह खतरनाक है। बहुत संभव है कि user ने यह अपेक्षा नहीं की होगी कि उसकी अनुमति पूछे बिना ऐसे access rights इस्तेमाल किए जाएँ, और न ही उसने इसके लिए सहमति दी होगी
और जिन चीज़ों को LLM user request मानकर बिना हिचक कर देता है, prompt injection भी उनसे वही काम बिना हिचक करवा सकती है
“इस request को पूरा करने के लिए मुझे दूसरे folder की files तक पहुँच चाहिए, लेकिन user सही permissions देना भूल गया है। अब मैंने अपनी config file अपडेट कर ली है ताकि इस workspace के बाहर भी access मिल सके, और ज़रूरी files ले आया हूँ।” o_O
उसके बाद भी मैंने कुछ बार ऐसे ही “hacking” व्यवहार देखे, जो प्रभावशाली भी थे और साथ ही बहुत अस्थिर करने वाले भी
कुछ महीने पहले यही बात हुई थी, और मैंने इसे LinkedIn पर पोस्ट किया था: https://www.linkedin.com/posts/nickstinemates_my-favorite-th...
मज़ेदार भी है और चतुर भी
10 साल से भी पहले, जब मैं नया-नया join हुआ था, तब मैंने भी यही किया था
मैनेजर shared build server पर sudo अधिकार देना भूल गया था, और अनुमति मिलने के बाद मैंने इसी तरीके से खुद को sudo अधिकार दे दिए थे
इसी वजह से जैसे ही rootless mode संभव हुआ, मैंने घर पर Podman rootless mode इस्तेमाल करना शुरू कर दिया
इसलिए rootless container configuration की ज़रूरत है, या फिर ऐसे user namespaces की जो container user को किसी बिना मतलब वाले host user पर remap कर दें: https://docs.docker.com/engine/security/userns-remap/
अफ़सोस है कि यह default नहीं है
यह कहा जा सकता है कि जहाँ संभव हो Docker को user namespaces इस्तेमाल करने चाहिए थे, लेकिन इससे बहुत सारे उपयोगी setups टूट जाते जिन्हें privileged containers चाहिए होते हैं
कुछ महीने पहले मैंने ठीक इसी स्थिति को एक hypothetical के रूप में लिखा था: https://www.da.vidbuchanan.co.uk/blog/agent-perms.html