फ़िलहाल नया software install न करना बेहतर हो सकता है
(xeiaso.net)- copy.fail के बाद Linux kernel vulnerability के बारे में अतिरिक्त घोषणाएँ की गई हैं
- फिलहाल इसे ऐसा समय माना जा रहा है जब NPM supply chain attack से बड़ा नुकसान हो सकता है
- distribution द्वारा दिए जाने वाले Linux kernel patch को अपवाद मानने की सिफारिश है
- इसके अलावा लगभग एक हफ्ते तक नया software install रोक देना बेहतर है
- पोस्ट प्रकाशित होने के बाद तथ्य या स्थिति बदल चुकी हो सकती है, इसलिए जो हिस्सा गलत या अस्पष्ट लगे उस पर निष्कर्ष निकालने से पहले संपर्क करने का नोट जोड़ा गया है
1 टिप्पणियां
Hacker News की राय
यह तो हमेशा से फूटने को तैयार एक दुःस्वप्न था। पैकेज बहुत ज़्यादा हैं, और उसी अनुपात में supply chain attack surface इतना विशाल हो गया है कि यह कभी न कभी सबके सामने फटना ही था
लेकिन यह बहुत सुविधाजनक था। चेतावनी देने या नुकसान कम करने की कोशिश करने वालों को उन लोगों ने नज़रअंदाज़ कर दिया जिनके पास किसी और तरीके का अनुभव ही नहीं था, और
"import antigravity"छोड़ देना बहुत कठिन थाअब लगता है कि हम “कीमत चुकाने” वाले चरण में पहुँच गए हैं
compiler, kernel आदि समेत लगभग हर चीज़ source से build की जाती थी, और build server/infra को इंटरनेट तक बिल्कुल पहुँच नहीं थी, साथ ही changes लाने की एक तय प्रक्रिया थी। संबंधित CVE हर बार public होने पर review किए जाते थे ताकि यह तय किया जा सके कि वे हम पर लागू होते हैं या नहीं, और उन्हें कैसे mitigate या handle करना है
बाद में जिस कंपनी में गया, वहाँ builds इंटरनेट तक पहुँचते थे, और नया version आते ही upgrade कर दिया जाता था। लोग इसे अच्छी practice मानते थे क्योंकि इससे latest bug fixes मिलते थे, और CVE review security team संभालती थी
उसके बाद जिस startup में गया, वहाँ कई practices का मिश्रण था। कुछ चीज़ें बहुत अच्छी थीं, लेकिन CVE debt भी बड़ा था। उदाहरण के लिए, servers पर secure boot और encrypted disk लागू थे, और components के बीच communication security की समझ भी काफ़ी अच्छी थी
हर किसी को लगता है कि वही सही कर रहा है। “बार-बार upgrade करने” वालों को यह समझाना लगभग असंभव है कि इससे नई समस्याएँ भी आ सकती हैं। उद्योग को बेहतर practices के एक पैकेज की ज़रूरत है, और व्यक्तिगत रूप से मुझे पहली कंपनी का dependency management ज़्यादा बेहतर लगता है। कुल मिलाकर वहाँ security practices अच्छी तरह स्थापित थीं और product भी सचमुच सुरक्षित था
तब उपयोगी software सबका सब fuzzing test, property testing, और formal verification से गुज़र चुका होगा, और vulnerabilities ढूँढने वाले सभी लोगों को फिर से शून्य से शुरू करना पड़ेगा
बेशक, यह मानना होगा कि इस बीच का वह खाली दौर हम झेल लें, जिसमें देश अपनी बची हुई क्षमताएँ अपने सबसे बुरे दुश्मनों पर फेंकते रहें। नहीं तो अंत में शायद हम एक-दूसरे को जानवरों की हड्डियों से ही मारेंगे
OS स्तर पर, चलाए गए program को shell या जिस जगह से उसे चलाया गया है वहाँ से capability token मिलना चाहिए, और हर system call को पहला argument capability लेना चाहिए। इसलिए
"open path /foo"की जगहopen(cap, "/foo")होगा। यह capability fake filesystem, असली filesystem की कोई branch, network filesystem, या कुछ भी हो सकती है, और program को यह जानने की ज़रूरत नहीं होगी कि वह किस sandbox में रह रहा हैLibrary/language स्तर पर भी, npm module जैसी third-party library import करते समय import के समय या call site पर capability पास करनी चाहिए। उस library को मेरे program address space के हर byte पर read/write access नहीं मिलनी चाहिए, और वह मेरे कंप्यूटर पर मेरी तरह कुछ भी करने में सक्षम नहीं होनी चाहिए। असली सवाल है: इस code का blast radius कहाँ तक है? अगर इस्तेमाल की गई library malicious या vulnerable हो, तो नुकसान की सीमा के बारे में हमारे पास एक तर्कसंगत default होना चाहिए।
lib::add(1, 2)कॉल मेरे पूरे कंप्यूटर के persistent compromise में नहीं बदलनी चाहिएSeL4 लंबे समय से तेज़ और efficient OS-level capabilities देता आया है, और यह काम भी करता है। कई मामलों में यह Linux से तेज़ है, और transparent sandboxing, user-space drivers, inter-process communication, security improvement आदि के लिए बहुत उपयोगी है। Linux को SeL4 के ऊपर एक process की तरह भी चलाया जा सकता है। मैं ऐसा operating system चाहता हूँ जिसमें Linux desktop की सारी functionality हो, लेकिन वह SeL4 की तरह व्यवहार करे
अफ़सोस, मुझे वैसी language-level capabilities वाली programming language नहीं दिखती जैसी मैं चाहता हूँ। Rust काफ़ी करीब है, लेकिन third-party crate को किसी भी unsafe code को call करने से रोकने का तरीका चाहिए। इसमें untrusted dependencies द्वारा बुलाया गया unsafe भी शामिल है। Rust के पुराने soundness bugs भी ठीक होने चाहिए, और capability-based standard library भी चाहिए। global
open()/listen()जैसी चीज़ें गायब हो जानी चाहिएँ, और केवलopenat()तथा OS के अन्य हिस्सों से मेल खाने वाले समकक्ष रूप होने चाहिएँअगर LLM इसी तरह बेहतर होते रहे, तो कुछ साल में अगर किसी और ने यह पहले नहीं बनाया, तो मैं LLM से यह सब बनवाने की सोच रहा हूँ। आधुनिक desktop operating systems की security तो मज़ाक जैसी है
Code के लिए भी hygiene culture चाहिए, और यह उन मानकों से बहुत अलग नहीं है जो ज़्यादातर संस्कृतियों ने भोजन के लिए विकसित किए हैं। यह भले ही ढीले-ढाले heuristics का मेल हो, लेकिन “छी” वाला एहसास अरबों लोगों की जान बचाता है
अब मैं dependency exposure पहले से कहीं ज़्यादा कम कर रहा हूँ, खासकर उन चीज़ों में जिन्हें कुछ सौ lines में implement किया जा सकता है। यह सचमुच एक paradigm shift है
“सॉफ़्टवेयर install करने से पहले एक हफ़्ता इंतज़ार करो” वाला तरीका काम नहीं करेगा। बस कुछ महीने पहले भी एक बड़े vulnerability set ने web को प्रभावित किया था, और वह time-delayed attack था जो एक महीने से ज़्यादा छिपा रहने के बाद execute हुआ
अगर सब लोग एक हफ़्ता इंतज़ार करने लगें, तो attacker दो हफ़्ते इंतज़ार करेंगे। Cyber criminals को तुरंत exploit करने की ज़रूरत नहीं है, उन्हें बस किसी समय exploit कर लेना होता है। Typosquatting जैसी कई vulnerability categories पर भी इस तरीके का कोई असर नहीं पड़ेगा
क्योंकि इन vulnerabilities के patches शायद अभी उपलब्ध नहीं हैं, और अगर हैं भी तो संभव है कि जल्द ही इससे भी डरावनी vulnerabilities मिल जाएँ
लेकिन अगर कोई delay ही न हो, तो आप ऐसे exploit का शिकार हो सकते हैं जिसे अभी तक किसी ने देखा ही नहीं है
और इन compromises का पता चलना इस पर बिल्कुल निर्भर नहीं था कि उनका वास्तव में दुरुपयोग हुआ था या नहीं। इसलिए “अगर सब लोग एक हफ़्ता रुकेंगे तो attacker दो हफ़्ते रुकेंगे” वाली बात समझ नहीं आती
दूसरा विकल्प यह है कि आप FreeBSD जैसे operating system पर चले जाएँ, जो security को YOLO अंदाज़ में नहीं लेता
Security fixes बिना coordination के FreeBSD kernel में यूँ ही नहीं फेंक दिए जाते। वे FreeBSD security team से होकर जाते हैं, और patch src tree में जाने के कुछ ही मिनटों के भीतर FreeBSD Update और 15.0-RELEASE के pkgbase के ज़रिए binary updates जारी हो जाते हैं
मोटे तौर पर Slack पर “patch push कर दिया” संदेश आने में कुछ सेकंड, patch upload में 10–30 सेकंड, और mirrors sync होने में अधिकतम लगभग 1 मिनट लगता है
निष्पक्ष रूप से कहूँ तो मेरी report किसी core component के बारे में नहीं थी और उसका exploit करना भी आसान नहीं था, लेकिन Debian, OpenBSD, SUSE, Gentoo — इन सबने एक हफ़्ते के भीतर patch कर दिया था https://www.maxchernoff.ca/p/luatex-vulnerabilities#timeline
इसका मतलब यह नहीं कि किसी एक छोटे report-handling अनुभव से पूरे operating system का आकलन कर लिया जाए। क्योंकि बाकी हर चीज़ जो मैंने देखी है, उससे तो यही लगता है कि FreeBSD security reports को काफ़ी गंभीरता से लेता है। बस यही तर्क Linux kernel bugs पर भी लागू किया जा सकता है। इस तरह patches का ख़राब management Linux में भी काफ़ी दुर्लभ है
यह security से ज़्यादा usability को प्राथमिकता देता है। इसका एक प्रसिद्ध उदाहरण यहाँ है: https://vez.mrsk.me/freebsd-defaults
मैं project में योगदान देने वालों की सराहना करता हूँ, लेकिन जब तक ऐसे ख़राब defaults बने हुए हैं, मैं ईमानदारी से लोगों को वहाँ migrate करने की सलाह नहीं दे सकता
अगर आपको FreeBSD और security दोनों चाहिएँ, तो Shawn Webb का HardenedBSD इस्तेमाल करना ज़्यादा सही होगा
अब security experts को भी यह मान लेना चाहिए कि हमारी दुनिया एक बेहद fragile equilibrium पर टिकी हुई है। मुझे लगता है लोग इसे सचमुच बहुत कम आँकते हैं
सिर्फ IT की दुनिया नहीं, पूरी दुनिया असंख्य बहुत नाज़ुक संतुलनों पर बनी है। Security exploits हमेशा रहेंगे। सिर्फ software में नहीं, वास्तविक दुनिया में भी। किसी ने security conference में चुपके से प्रवेश भी कर लिया था, और वह बस एक YouTuber था। ठीक है, वह कोई ultra-secure event नहीं था, लेकिन उदाहरण के तौर पर वही याद आया। मूल बात यह है कि ज़्यादातर मामलों में security को bypass करना वास्तव में बहुत आसान होता है
मेरा कहना यह है कि बुनियादी तौर पर हमारी दुनिया इसलिए चलती है क्योंकि कम से कम ज़्यादातर लोग इन चीज़ों का दुरुपयोग नहीं करते। मानव समाज हमेशा से ऐसे ही चलता आया है, और आगे भी शायद ऐसा ही चलेगा
जहाँ तक मुझे पता है, Max Fosh नाम के YouTuber ने International Security Expo में कई बार प्रवेश किया था। UK में https://www.youtube.com/watch?v=qM3imMiERdU और US में https://www.youtube.com/watch?v=NmgLwxK8TvA उसने क्रमशः “Rob Banks” और “Nick Everything” जैसे aliases इस्तेमाल किए
मैंने security culture पर थोड़ा अध्ययन किया है, और ज़्यादातर बातें अंततः एक sliding scale पर आकर टिकती हैं — एक तरफ security, दूसरी तरफ convenience/accessibility। जितना ज़्यादा secure, उतना कम accessible, और इसका उल्टा भी सही है
npm, PyPI, Cargo जैसे dependency managers पर होने वाले supply chain attacks के लिए पहले से ही एक ठीक-ठाक समाधान मौजूद है। Configuration ऐसी हो कि सिर्फ वही package versions install हों जो कुछ दिनों से पुराने हों
हाल के सभी बड़े attacks एक दिन के भीतर पकड़े गए और rollback कर दिए गए, इसलिए अगर ऐसा किया गया होता तो उन्हें सुरक्षित रूप से टाला जा सकता था। यह behavior default होना चाहिए। अपने-आप चुने गए beta testers और security scanner कंपनियों को latest package versions एक दिन पहले इस्तेमाल करने दो। तरीका यहाँ है: https://cooldowns.dev/
यह एक artifact manager है। यह सुनिश्चित करता है कि आप सिर्फ approved चीज़ें ही fetch करें। ज़रूरत पड़ने पर जल्दी update भी कर सकते हैं, और ज़रूरत पड़ने पर लगातार verify किए गए stable versions भी इस्तेमाल कर सकते हैं। थोड़ा configuration override करना पड़ता है, लेकिन यह आसान काम है
मैंने कभी इसी उद्देश्य के लिए अपना एक ढीला-ढाला tool बनाया था, और यह project अच्छा लगता है
बेशक, कंपनियों के बाहर यह स्वाभाविक रूप से ज़्यादा काम नहीं करता
एक बार पता चल जाने पर तुरंत exploit explosion शुरू हो जाता है, और delayed updates उत्साहित attackers को और समय देते हैं
एक और मॉडल Perl का CPAN है, जो केवल source files distribute करता है
जिन लोगों ने relatively हाल ही में continuous integration और containerized builds अपनाए हैं, उन्हें यह देख लेना चाहिए कि कहीं उनकी system हर build पर कई packages से
latestतो नहीं खींच रहीहम एक base container बनाकर रखते हैं जिसमें सभी external dependencies शामिल होती हैं, और उसे केवल तब explicitly refresh करते हैं जब हमें लगता है कि update का समय आ गया है
इससे हम cutting edge से थोड़ा पीछे ज़रूर रह जाते हैं, लेकिन किसी random supply chain vulnerability के तुरंत दुनिया भर में deploy हो जाने का जोखिम बहुत कम उठाते हैं
यह एक सक्रिय रूप से हानिकारक opinion piece है। इसकी logic समझना मुश्किल है
copyfail और dirtyfrag vulnerabilities वास्तव में कितनी पुरानी हैं, यह जाँचने में 45 सेकंड काफ़ी हैं। लेख पढ़ने में इससे ज़्यादा समय लगता है। Dirtyfrag ऐसे systems से भी संबंधित हो सकता है जो 2017 तक पीछे जाते हैं
प्रभावित होने वाली चीज़ “नई” software नहीं है। और वास्तव में पुराना software तो और भी बदतर स्थिति में है, क्योंकि उसमें समस्याएँ ढूँढने के लिए कहीं ज़्यादा समय मिला है
कभी न कभी कोई व्यक्ति operating system से लेकर application तक पूरे stack को proof-carrying code upgrades के साथ फिर से बनाएगा
Trusted code चलाने का एकमात्र तरीका है proof और code का साथ में design और साथ में build होना
यह सिर्फ software पर लागू नहीं होता, बल्कि लगभग हर चीज़ पर लागू होता है
याद नहीं कहाँ पढ़ा था, लेकिन अंत में बात ज़रूरत और चाहत के फ़र्क पर आकर टिकती है
नई car खरीदनी है या used car, premium vacuum cleaner लेना है या basic, यह तय करते समय मैं इस नियम का इस्तेमाल करता हूँ। किसी चमकदार नए gadget को अपनाने, tech stack में कुछ नया जोड़ने, या नया tech stack चुनने पर भी यही बात लागू होती है
मैं समझना चाहता हूँ कि copyfail क्या है और इसका NPM packages से क्या संबंध है
मैंने जो समझा, उसके मुताबिक copyfail एक kernel bug है जो malicious npm package को Linux server पर root privileges दिला सकता है
यानी अभी जब unpatched servers मौजूद हैं, attackers के लिए NPM packages को निशाना बनाने का यह बिल्कुल सही समय है
क्या सलाह सिर्फ “kernel update कर लो” नहीं है क्योंकि संबंधित नई समस्याएँ अब भी लगातार मिल रही हैं?
अगर कोई लोकप्रिय NPM package compromise होकर उसमें copy.fail exploit शामिल हो, तो बहुत-सी systems root privilege escalation के प्रति vulnerable हो जाएँगी