- Git repository के अंदर carriage return character का उपयोग करने वाली एक attack technique का परिचय
- इस vulnerability के कारण remote code execution (RCE) की संभावना पैदा होती है
- कुछ खास git clone प्रक्रियाओं के दौरान malicious command execute हो सकते हैं
- Linux और Windows environment में इसका प्रभाव देखा गया है
- सुरक्षा के लिहाज़ से कमज़ोर Git repository management के जोखिम पर ज़ोर दिया गया है
carriage return character और Git vulnerability
- Git repository के भीतर carriage return (
\r) character वाले filename बनाए जा सकते हैं
- ऐसे filename वाली repository को git clone से clone करने पर, command parsing की प्रक्रिया में अनचाहे command execution संभव हो सकते हैं
remote code execution (RCE) scenario
- attacker carriage return character डाले गए file को repository में add करके commit करता है
- जब user इस repository को git clone करता है, तो file system और git command की गलत व्याख्या के कारण अनचाहे code execution का जोखिम पैदा हो सकता है
- खास तौर पर, hooking script (जैसे
.git/hooks folder के code) को अपने-आप execute होने के लिए उकसाया जा सकता है
प्रभावित environment और response
- Linux और Windows सहित कई operating system के git में यह समस्या हो सकती है
- Git repository manage करने वाले या अक्सर external repository clone करने वाले developer और company के लिए यह गंभीर security threat है
security advisory
- बाहर के अविश्वसनीय git repository को clone करते समय latest version का उपयोग और security status की जांच ज़रूरी है
- repository के भीतर असामान्य character, खासकर carriage return जैसे, वाले filename को detect करके clone से पहले review करना चाहिए
1 टिप्पणियां
Hacker News की राय
इन सबका नतीजा यह है कि submodule clone करते समय पढ़ते हुए
path = ...फ़ॉर्म इस्तेमाल होता है, लेकिन लिखते समय^Mपर खत्म न होने वाले किसी दूसरे path में रिकॉर्ड हो जाता हैलेख में जिस "remote code execution" की बात की गई है, वह यहाँ कैसे होती है, और security के लिहाज़ से यह कितनी गंभीर है, इस पर सवाल उठाया गया
अभी तक PoC सार्वजनिक नहीं किया गया है, लेकिन कहा गया कि यह लगभग CVE-2024-32002 exploit का ही हल्का-सा बदला हुआ रूप है, और इसे fix करने वाले commit के tests भी बड़ा hint देते हैं
CVE-2024-32002 का विवरण उद्धृत: submodule वाला repository अगर malicious तरीके से तैयार किया जाए, तो Git के bug का उपयोग करके submodule worktree की बजाय
.git/directory में files लिखी जा सकती हैं. इसकी वजह से ऐसा hook लिखा जा सकता है जो clone के दौरान ही चल जाए, यानी user को वास्तव में चलने वाले code की जाँच का मौका भी न मिलेसंक्षेप में, malicious git hook को repository में डाला जा सकता है, और आम तौर पर git hook
git cloneपर install नहीं होते, लेकिन यह attack उसे संभव बना देता है, जिससे clone प्रक्रिया के दौरान hook चल सकता हैनए CVE के बारे में और जानकारी यहाँ मिल सकती है
post-checkouthook के ज़रिए arbitrary code execution करा सकता हैयह साधारण लेकिन असुविधाजनक सच्चाई बताई गई कि arbitrary file write संभव हो तो अक्सर बात RCE तक पहुँच जाती है
ad-hoc DSL से config files लिखने के ख़तरे की बात की गई
अक्सर grammar की कोई औपचारिक specification नहीं होती, और parsing का असली आधार अलग-अलग जगह फैला self-made serialization/deserialization implementation होता है
अगर दोनों अलग हो जाएँ, जैसे parser में नई syntax जोड़ दी लेकिन writer में नहीं, तो parser difference की वजह से बड़ा खतरा पैदा हो सकता है
सीख: एक source of truth होना चाहिए, और उस पर निर्भर हिस्सों को उसी आधार पर auto-generate करना चाहिए
यह भी बताया गया कि यह bug source of truth वाली समस्या से अलग है
यहाँ इस्तेमाल किया गया DSL (
inifile format) भले ad-hoc हो, लेकिन इतना common, familiar और व्यवस्थित है कि व्यावहारिक रूप से specification जैसा ही माना जा सकता हैiniचाहिए तोtoml, वह पसंद नहीं तो JSON, यहाँ तक कि YAML भी ठीक, बहुत दर्द चाहिए तो XML, और अगर binary format पर ज़ोर है तो protobufsकिसी ने खुद issue reproduce करके इस repository में डाला
तुरंत Git का latest version update करने की कोशिश की, लेकिन अभी Arch पर उपलब्ध नहीं है
नए patch आने तक pull से बचने का इरादा है; चिंता जताई गई कि जिन मशहूर repositories में automatic pull लगा है, वहाँ समस्या हो सकती है, इसलिए upgrade में समय लग सकता है
यह सवाल भी उठाया गया कि क्या यह vulnerability patch से पहले ही public हो गई थी
पुराने exploit में "बस हल्का-सा बदलाव किया" जैसी बात देखकर सवाल उठा कि Git Landlock क्यों नहीं इस्तेमाल करता (Landlock Linux-only sandbox security feature है)
सुझाव दिया गया कि
git cloneमें config directory पर read-only access हो, clone target directory पर read/write access हो, और child processes को invoke करने की अनुमति न होयह भी तंज कसा गया कि exploits में हर बार calculator खोलना कितना cliché हो गया है
जवाब में कहा गया कि अगर child process invocation रोकी जाए, तो
post-checkoutजैसे सारे git hooks टूट जाएँगेऔर यह भी बताया गया कि child processes न हों तो ssh के जरिए git का इस्तेमाल भी नहीं हो पाएगा
पूछा गया कि क्या Homebrew खुद समस्या का हिस्सा है, यानी क्या वह recursive clone करता है
इस code में इसकी संभावना मिली
राय यह रही कि Homebrew का मकसद ही repository code चलाना है, इसलिए recursive clone न हो तो उल्टा अजीब लगेगा
Jon Postel की CR+LF पर कही बात याद करके पुरानी यादें ताज़ा की गईं
git blameके मुताबिक समस्या वाला code 19 साल पहले लिखा गया था, जो Bernstein के 10 साल बाद के retrospective के समय के आसपास का हैHomebrew में git 2.50.1 update अभी तक नहीं आया, इसलिए शायद थोड़ा और इंतज़ार करना पड़े
brew install git --HEADका सुझाव दिया गयायह भी साझा किया गया कि Homebrew और Debian Bookworm, दोनों अभी भी vulnerable versions दे रहे हैं
यह सोचने वाली बात उठाई गई कि अगर directory listing लाने वाली system call को ऐसे file names मिलें जिनमें ASCII control characters (bytes) हों, तो क्या उसे उन files के अस्तित्व से इनकार कर देना चाहिए, disk corruption मानना चाहिए, या कुछ और करना चाहिए
यह भी कहा गया कि मौजूदा locale में उन bytes का कोई और मतलब हो सकता है, क्योंकि Windows की तरह file names को uniformly UTF-16 नहीं माना जाता, इसलिए unexpected situations बन सकती हैं
संक्षेप में कहा गया कि Unix-जैसी systems में file names (और दूसरी strings) सिर्फ bytes की arrays होने के कारण ऐसी समस्याएँ पैदा होती हैं