मुझे कमजोरियों को बंद करने के बारे में लेखों की श्रृंखला को जारी रखने के लिए कहा गया था और वे कैसे बंद होते हैं (हमारा पहला लेख
यहां पढ़ा जा सकता
है )। पिछली बार हमें पता चला कि अगर निर्माता भेद्यता को बंद करने पर रिपोर्ट करता है, तो वास्तव में सब कुछ ऐसा नहीं हो सकता है।

चयन मानदंड:
इस बार मानी गई कमजोरियों के लिए चयन मानदंड समान थे (इस अपवाद के साथ कि इस बार मैं अन्य प्रकार की कमजोरियों को देखना चाहता था):
- एक शोषण होना चाहिए - हम यह देखना चाहते हैं कि अद्यतन से पहले सब कुछ
अच्छी तरह से शोषण किया गया था, और उसके बाद यह अच्छा हो गया; - भेद्यता महत्वपूर्ण (आदर्श रूप से आरसीई) होनी चाहिए और एक उच्च स्कोर के साथ;
- उत्पाद खुला स्रोत होना चाहिए;
- उत्पाद को छोड़ दिया जाना चाहिए और सक्रिय रूप से उपयोग नहीं किया जाना चाहिए;
- भेद्यता अपेक्षाकृत नई होनी चाहिए;
- हमेशा की तरह, मुख्य बात यह है कि हम खुद रुचि लेंगे।
मैंने क्या और कैसे चुना:
मैं
vulners.com पर गया और पिछले कुछ हफ्तों में शोषण
-db.com के साथ सभी कारनामों को दिखाने के लिए कहा। इस बार वेब श्रेणी में, लगभग सभी कारनामों को इहसान सेनन ने लिखा था, लेकिन इस तथ्य के कारण कि वे अक्सर पुराने असमर्थित अनुप्रयोगों और प्लगइन्स में एसक्यूएल इंजेक्शन से संबंधित होते हैं, मैंने उन्हें हटा दिया। शेष उत्पादों में से, केवल प्रॉजेक्यूटीओआरआर परियोजना प्रबंधन उपकरण 7.2.5 भेद्यता के साथ CVE-2018-18924 "छोड़ दिया और सक्रिय रूप से विकसित नहीं" की श्रेणी में आया।
यह भेद्यता सभी चयन मानदंडों को पूरा करती है:
- एक शोषण है ;
- आरसीई भेद्यता (हालांकि यह आवश्यक है कि उपयोगकर्ता अधिकृत हो);
- उत्पाद काफी खुला स्रोत है;
- उत्पाद को छोड़ नहीं दिया गया, 2018 में 28 रिलीज़ हुए और केवल sourceforge.net थे, जिसमें 702 डाउनलोड थे (और अधिकांश अपडेट डाउनलोड सीवीई समस्या को हल करते हैं, जो सबसे अधिक संभावना है कि लोग सीवीई को देखते हैं और अपडेट करना शुरू करते हैं);
- 4 नवंबर का सीवीई, 25 अक्टूबर का शोषण, यह नवीनता की आवश्यकताओं को पूरा करता है;
- मैंने समस्या और उसके समाधान पर ध्यान दिया, मुझे दिलचस्पी हुई (उस पर बाद में)।
ProjeQtOr प्रोजेक्ट मैनेजमेंट टूल को समझना
हम
nist.gov पर शोषण विवरण और
CVE विवरण पढ़ते हैं , हम समझते हैं कि संस्करण 7.2.5 केवल अधिकृत उपयोगकर्ता के लिए असुरक्षित है। और यह भी कि आप एक .shtml फ़ाइल को एक छवि के रूप में अपलोड कर सकते हैं, हालांकि त्रुटि संदेश
"यह फ़ाइल एक वैध छवि नहीं है" प्रदर्शित की जाएगी, लेकिन फ़ाइल अभी भी सर्वर पर छवियों के लिए सहेजी जाएगी और
होस्ट / फ़ाइलों में प्रत्यक्ष लिंक के माध्यम से सुलभ होगी
/ images / image_name ।

एक सीधा लिंक के माध्यम से पहुंच अच्छा है, लेकिन यहां आपको अभी भी उस नाम का अनुमान लगाना होगा जिसके साथ फ़ाइल डाउनलोड की जाएगी। हम भाग्यशाली हैं, और यह यादृच्छिक नहीं है, लेकिन प्रारूप में वर्तमान समय से उत्पन्न होता है: वर्ष, महीना, दिन, घंटे, मिनट, सेकंड। परिणाम इस तरह के एक नंबर 20181114140320 है। अगला, उपयोगकर्ता आईडी और फिर मूल फ़ाइल नाम अंडरस्कोर के माध्यम से जाना। कुछ अज्ञात हैं:
- सर्वर पर समय क्षेत्र
- यदि सर्वर पर घड़ी डाउन है;
- उपयोगकर्ता आईडी
और फिर से हम भाग्यशाली हैं: यदि आप एक वैध छवि अपलोड करते हैं, तो इन सभी मापदंडों को हमें सूचित किया जाएगा। लिंक के कई विकल्पों पर जाना मुश्किल नहीं है (कई, चूंकि कुछ सेकंड हैं, लेकिन उन्हें तुरंत दूर करना मुश्किल है)।

सामान्य तौर पर, फ़ाइल नाम प्राप्त करना कोई समस्या नहीं है। हम आगे बढ़ते हैं। और हम सोचते हैं, क्यों न केवल एक php स्क्रिप्ट अपलोड करें? हम इसे डाउनलोड करने का प्रयास कर रहे हैं, वही विंडो पॉप अप होती है, लेकिन फ़ाइल निर्देशिका में दिखाई नहीं देती है। यह कोड देखने का समय है!
स्क्रिप्ट uploadImage.php छवि को सर्वर पर 7.2.5 संस्करण में अपलोड करने के लिए जिम्मेदार है। हम 100 से 117 की पंक्तियों में रुचि रखते हैं।
if (substr($ext,0,3)=='php' or substr($ext,0,4)=='phtm') { if(@!getimagesize($uploadedFile['tmp_name'])) { $error=i18n('errorNotAnImage'); } else { traceHack("Try to upload php file as image in CKEditor"); } } else { if ( ! move_uploaded_file($uploadedFile['tmp_name'], $uploadfile)) { $error = htmlGetErrorMessage(i18n('errorUploadFile','hacking ?')); errorLog(i18n('errorUploadFile','hacking ?')); } } } if (!$error) { if(@!getimagesize($uploadfile)) { $error=i18n('errorNotAnImage'); } }
फ़ाइल एक्सटेंशन की जाँच करने के लिए लाइन 100 जिम्मेदार है: यदि यह php या phtm है, तो फ़ाइल को छोड़ दिया जाता है और सहेजा नहीं जाता है। इसलिए php फाइलें “files / images /” डायरेक्टरी में दिखाई नहीं देती हैं। रेखा 115 वह त्रुटि बनाता है जो हम देखते हैं, लेकिन फ़ाइल के साथ कुछ भी नहीं करता है।
ठीक है, चलो शोषण को न छोड़ें और फ़ाइल को एक्सटेंशन .shtml के साथ अपलोड करें। यहाँ यह एक छोटा सा विषयांतर करने और यह बताने लायक है कि .shtml क्या है और इसके साथ क्या खाया जाता है।
SHTML और SSI
विकिपीडिया परिभाषा:
एसएसआई (सर्वर साइड में शामिल है - सर्वर साइड पर शामिल) - व्यक्तिगत घटकों से सर्वर पर वेब पेजों के गतिशील "असेंबली" के लिए एक सरल भाषा और क्लाइंट को प्राप्त HTML-दस्तावेज़ की डिलीवरी। अपाचे वेब सर्वर में mod_include मॉड्यूल का उपयोग करके कार्यान्वित किया गया। वेब सर्वर की डिफ़ॉल्ट सेटिंग्स में शामिल सुविधा आपको HTML फ़ाइलों को शामिल करने की अनुमति देती है, इसलिए, निर्देशों का उपयोग करने के लिए, फ़ाइल को एक्सटेंशन .shtml, .stm या .shtm के साथ होना चाहिए।
आपके अपने शब्दों में:
SHTML HTML है जो सर्वर-साइड इंस्ट्रक्शन सेट को निष्पादित कर सकता है। उपयोगी में से एक निष्पादन फ़ंक्शन है जो सर्वर पर मनमाना आदेशों को निष्पादित करता है (हां, हम HTML कोड का उपयोग करके फ़ाइल डाउनलोड कर सकते हैं और इसे चला सकते हैं)।
यहाँ मनमाना कोड चलाने के लिए एक नमूना कोड है:
<!--
अच्छी खबर यह है कि यह कार्यक्षमता अपाचे 2 सर्वर पर डिफ़ॉल्ट रूप से सक्षम नहीं है, और इसे सक्षम करने के लिए आपको एक टरबाइन के साथ नृत्य करने की आवश्यकता है। कॉन्फ़िगरेशन को चुनने के कुछ घंटों में, मैं पर्यावरण चर का काम करने में सक्षम था, लेकिन कमांड नहीं। यहाँ मेरा SSI कोड है:
<html> <head> <title>thegeekstuff.com</title> </head> <body> <p> Today is <!--
यदि कोई आपको बताता है कि विन्यास में क्या लिखना है ताकि यह सही ढंग से काम करे, तो मुझे इसे पढ़ना अच्छा लगेगा।
भेद्यता को उजागर करें
यदि सितारे अभिसिंचित होते हैं, तो आप shtml फ़ाइल डाउनलोड कर सकते हैं और मनमाना कमांड निष्पादित कर सकते हैं (या, मेरी तरह, सर्वर पर समय देखें)।
पैच देखना
अगला संस्करण 7.2.6 है, लेकिन जिस भेद्यता में हम रुचि रखते हैं, उसके बारे में कोई बदलाव नहीं हैं (nist.gov फिर से धोखा)।
हम संस्करण 7.2.7 को देखते हैं और ऐसा लगता है कि सब कुछ तय हो गया है (डेवलपर्स खुद कहते हैं कि सब कुछ बस इस संस्करण में तय किया गया है)। दो प्रमुख परिवर्तन हैं:
1. निषिद्ध एक्सटेंशन के बीच, "shtm" जोड़ा गया था (यदि पहले 4 वर्ण ऐसे हैं, तो shtml भी यहां आता है):
if (substr($ext,0,3)=='php' or substr($ext,0,4)=='phtm' or substr($ext,0,4)=='shtm') {
2. फ़ाइलें जो चित्र नहीं हैं वे अब हटा दी गई हैं:
if(@!getimagesize($uploadfile)) { $error=i18n('errorNotAnImage'); kill($uploadfile); }
ऐसा लगता है कि आप विचलन कर सकते हैं, क्योंकि गैर-चित्र हटाए जाते हैं, और shtml भी जारी रखने की कोशिश नहीं कर रहा है। लेकिन मैंने हमेशा इसे पसंद नहीं किया, अगर उन्होंने ब्लैक लिस्ट की समस्या को हल करने की कोशिश की। उदाहरण के लिए, कुछ देशों में, कंपनियां सामाजिक नेटवर्क पर प्रतिबंध लगाती हैं। यह इस तथ्य की ओर जाता है कि उपयोगकर्ता सामाजिक नेटवर्क के "दर्पण" का उपयोग करना शुरू करते हैं, जहां उनके उपयोगकर्ता नाम और पासवर्ड चोरी हो जाते हैं। उनके पासवर्ड कॉरपोरेट पासवर्ड के साथ मेल खाते हैं, लेकिन तब एक कप कॉफी से अधिक एक इंस्टाग्राम के माध्यम से एक कर्मचारी के पत्ते की तुलना में बहुत बड़ी समस्याएं हो सकती हैं।
वेब प्रोग्रामिंग और इसकी सुरक्षा में, ब्लैकलिस्ट भी बुरे हैं।
ProjeQtOr से ब्लैक लिस्ट को बायपास करें
खैर, सब कुछ सरल है। पहले, देखते हैं कि Apache2 + PHP क्या डिफ़ॉल्ट सेटिंग्स पर व्याख्या कर सकता है (सब कुछ अपडेट किए गए रिपॉजिटरी के साथ ubuntu 16.04 पर स्थापित किया गया था)। "FilesMatch" निर्देश फ़ाइलों की व्याख्या करने की क्षमता के लिए जिम्मेदार है। हम कमांड "grep -r" <FilesMatch "/ etc / apache2" के साथ इस पर एक खोज करते हैं और यहां परिणाम है:
/etc/apache2/mods-available/php7.0.conf:<FilesMatch ".+\.ph(p[3457]?|t|tml)$"> /etc/apache2/mods-available/php7.0.conf:<FilesMatch ".+\.phps$"> /etc/apache2/mods-available/php7.0.conf:<FilesMatch "^\.ph(p[3457]?|t|tml|ps)$"> /etc/apache2/sites-available/default-ssl.conf: <FilesMatch "\.(cgi|shtml|phtml|php)$"> /etc/apache2/apache2.conf:<FilesMatch "^\.ht">
डिफ़ॉल्ट- ssl.conf कॉन्फिग में, सभी एक्सटेंशन केवल अपनी संपूर्णता में सूचीबद्ध होते हैं; ये हैं: cgi, shtml, phtml, php। काश, Cgi को छोड़कर सब कुछ ProjeQtOr में फ़िल्टर किया जाता है।
Php7.0.conf कॉन्फिग बहुत अधिक दिलचस्प है, इसमें एक्सटेंशन नियमित अभिव्यक्ति द्वारा निर्धारित किए जाते हैं। हमें मिलता है:
विस्तार | फ़िल्टर क्या है |
---|
php | पदार्थ ($ ext, 0.3) == 'php' |
PHP3 | पदार्थ ($ ext, 0.3) == 'php' |
php4 | पदार्थ ($ ext, 0.3) == 'php' |
PHP5 | पदार्थ ($ ext, 0.3) == 'php' |
php7 | पदार्थ ($ ext, 0.3) == 'php' |
PHT | कुछ नहीं |
phtml3 | पदार्थ ($ ext, 0.4) == 'phtm' |
महान, एक फ़ाइल एक्सटेंशन जो फ़िल्टर नहीं किया गया है, पाया जाता है। हम सत्यापित करते हैं कि यह वास्तव में व्याख्यायित है।
निम्नलिखित सामग्री के साथ एक test.pht फ़ाइल बनाएँ:
<?php phpinfo();
हम ब्राउज़र में इस फ़ाइल पर जाते हैं और स्थापित php के बारे में जानकारी देखते हैं। उल्लेखनीय रूप से, ब्लैकलिस्ट को बाईपास कर दिया गया था, जबकि गैर-डिफ़ॉल्ट सेटिंग्स के लिए, किसी कारण से, व्याख्या के लिए अन्य एक्सटेंशन की अनुमति दी जा सकती है।
हम अपनी परीक्षण फ़ाइल को प्रॉजेक्यूटीओआरआर प्रोजेक्ट मैनेजमेंट टूल में लोड करते हैं। बेशक, हमें एक त्रुटि मिलती है, क्योंकि यह एक तस्वीर नहीं है (7.2.7 से पहले संस्करण में, हमारे पास पहले से ही सर्वर पर कोड निष्पादन है, क्योंकि कमांड को निष्पादित करने के लिए phpinfo बदलना मुश्किल नहीं है)। संस्करण 7.2.7 में, फ़ाइल हटा दी गई है, और कोड निष्पादित नहीं किया गया है।
लेकिन हम परेशान नहीं हैं और तस्वीर पर जाँच को दरकिनार कर रहे हैं।
PHP की तस्वीर
यह जांचना कि क्या डाउनलोड की गई फ़ाइल ProjeQtOr प्रोजेक्ट मैनेजमेंट टूल में एक चित्र है, जो getimagesize फ़ंक्शन द्वारा किया जाता है, जो केवल स्थानांतरित फ़ाइल के हेडर को देखता है।
इस तथ्य का लाभ उठाते हुए कि php फ़ाइल में कोई भी कचरा हो सकता है, और php कोड की व्याख्या केवल वर्णों से शुरू होती है "<! Php", हम एक छोटा कोड लिखते हैं जो पहले चित्र लिखता है, और फिर php कोड हमें चाहिए। चित्र के रूप में हम त्रुटि विंडो का स्क्रीनशॉट भेजेंगे। अजगर कोड की 3 लाइनें और आप कर रहे हैं:
data = open ('test.png','rb').read() data += open ('test.pht','rb').read() open ('new_pht_png.pht','wb').write(data)
संभवतः, आप फ़ाइल की शुरुआत में एक वैध छवि शीर्षलेख लिख सकते हैं, लेकिन यह आसान है, और इससे भी अधिक, छवि किसी भी दर्शकों में प्रदर्शित होती है।
हम इस निर्माण को सर्वर पर अपलोड करते हैं और, लो और निहारना, इसे लोड किया जाता है (और चित्र के रूप में दर्शक में प्रदर्शित किया जाता है), और यह भी अच्छा है कि हमें पूरा नाम दिखाया गया है जिसके साथ यह फ़ाइल डाउनलोड की गई थी।

हम डाउनलोड की गई फ़ाइल
लोकलहोस्ट / फाइल्स / छवियों / 20181114171730_1_new_pht_png.pht पर जाएं और डाउनलोड की गई छवि को टेक्स्ट के रूप में देखें, और इसके नीचे phpinfo आउटपुट। यह स्पष्ट है कि साधारण वेब शेल के साथ phpinfo को बदलना मुश्किल नहीं है। उदाहरण के लिए, यह: <; php सिस्टम ($ _ GET ['cmd']);

एक बार जब आप फ़ाइल डाउनलोड चुनना शुरू कर देते हैं, तो आपको काम पूरा करने की आवश्यकता होती है और देखें कि काली सूचियों के साथ या उसके बिना फ़ाइलों का डाउनलोड कहाँ है।
एक और फाइल अपलोड
हम नवीनतम उपलब्ध संस्करण में देखेंगे। यह मानते हुए कि आप फ़ाइलों को पहले की तरह अपलोड करने के लिए एक ही फ़ंक्शन का उपयोग करते हैं, अर्थात। Move_uploaded_file, हम इसे प्रोजेक्ट डायरेक्टरी "grep -r" Move_uploaded_file "./" में खोजते हैं। हमें निम्न 5 फाइलें मिलती हैं:
./tool/uploadImage.php
./tool/saveDocumentVersion.php
./tool/uploadPlugin.php
./tool/import.php
./tool/saveAttachment.php
फ़ाइल uploadImage.php - पहले से ही देखा गया।
फ़ाइल saveDocumentVersion.php - दस्तावेजों के डाउनलोड संस्करण (जैसा कि नाम का अर्थ है)। हम एक दस्तावेज़ डाउनलोड करने और इसे देखने की कोशिश कर रहे हैं (शुरुआत के लिए हम हमेशा एक तस्वीर लोड करेंगे)। डाउनलोड करने के बाद, हम देखते हैं कि एक्सटेंशन .1 फ़ाइल में जोड़ा गया है। हम कोड में देखते हैं कि नाम कैसे प्राप्त किया जाता है (यह लाइन 229 पर किया जाता है):
$uploadfile = $dv->getUploadFileName();
GetVploadFileName फ़ंक्शन DocumentVersionMain.php फ़ाइल में घोषित किया गया है। वहां, 227 लाइन पर, हम देखते हैं कि “”। लौटे नाम में जोड़ा गया है। और दस्तावेज़ आईडी। हम जोड़ा बिंदु के आसपास भी नहीं जा सकते:
return $uploaddir . $paramPathSeparator . $fileName . '.' . $this->id;
UploadPlugin.php फ़ाइल केवल व्यवस्थापकों के लिए ही सुलभ है और यह तथ्य कि प्लगइन का कोड खराब हो सकता है, बहुत ही तार्किक है और प्लगइन सत्यापन दर्ज किए बिना छुटकारा पाने के लिए मुश्किल है (जैसा कि लोकप्रिय सीएमएस करते हैं)। बेशक, जब आप वहां कुछ डाउनलोड करने की कोशिश करते हैं, तो यह सफलतापूर्वक लोड होता है, और फिर इसे निष्पादित किया जाता है।
Import.php फ़ाइल भी केवल व्यवस्थापकों के लिए उपलब्ध है। फ़ाइल डाउनलोड करते समय, हमें बताया जाता है कि यह एक सीएसवी फ़ाइल या एक xlsx फ़ाइल होनी चाहिए। बेशक, हम php फ़ाइल को लोड करने और त्रुटि देखने का प्रयास करते हैं:
त्रुटि - प्रदान की गई फ़ाइल प्रकार और चयनित फ़ाइल प्रारूप मेल नहीं खाते
आयात रद्द कर दिया गया
समस्या यह है कि, सीवीई से मूल बग में, फ़ाइल को हटाया नहीं गया है, लेकिन
स्थानीयहोस्ट / फाइल / संलग्न / आयात / परीक्षण.फैप पर उपलब्ध है ।
SaveAttachment फ़ाइल का उपयोग किसी भी अटैचमेंट को लोड करने के लिए किया जाता है (उदाहरण के लिए, जब आपकी खुद की छवि लोड हो रही हो)। PHP स्क्रिप्ट वहां क्रॉल नहीं होती है, क्योंकि फॉर्म की सुरक्षा है:
if (substr($ext,0,3)=='php' or substr($ext,0,4)=='phtm' or substr($ext,0,4)=='shtm') { $attachment→fileName.=".projeqtor";
यह एक्सटेंशन फाइल php *, phtm *, shtm * एक्सटेंशन ".projeqtor" में बदल जाता है, यानी जाहिर है कि हमारी pht फाइल वहां क्रॉल होगी (यहां तक कि चित्रों को क्रॉल किए बिना भी)। हम कोशिश करते हैं, और हमें पता है कि सब कुछ
लोकलहोस्ट / फाइल्स / अटैचमेंट / अटैचमेंट / अटैचमेंट / एफटी ।
जल्दी से पाया फ़ाइल डाउनलोड स्थानों के कुल नीचे पंक्ति:
- php या pht स्क्रिप्ट को 4 बार लोड करने में कामयाब;
- ब्लैकलिस्ट सत्यापन दो में है;
- सफेद सूची सत्यापन कहीं भी नहीं है;
- एक बार फ़ाइल डाउनलोड करने में विफल (डाउनलोड करने में विफल, लेकिन निष्पादित करने में विफल), क्योंकि विस्तार बदल रहा था
ProjeQtOr परियोजना प्रबंधन उपकरण और CVE-2018-18924 पर निष्कर्ष
- सूचित भेद्यता को लगभग समाप्त कर दिया गया है;
- कोड में अन्य भेद्यताएं हैं (डेवलपर्स को सूचना दी, और उन्होंने एक्सटेंशन के श्वेतसूची का भी वादा किया);
- Apache2 सर्वर का उचित कॉन्फ़िगरेशन हमें सब कुछ से बचा सकता है (निष्पादन योग्य स्वरूपों को केवल आवश्यक तक सीमित कर सकता है, उपयोगकर्ता फ़ोल्डर में स्क्रिप्ट के निष्पादन को रोक सकता है);
- nist.gov में नवीनतम असुरक्षित संस्करण शामिल नहीं है ।
मालकिन नोट
- जहां भी संभव हो, ब्लैकलिस्ट को मना करें (मुझे नहीं पता कि यह कहां असंभव है);
- डाउनलोड की गई फ़ाइलों को संसाधित करते समय सावधान और चौकस रहें (यह बेहतर है कि यह एक ही स्थान पर हो, और 5 से फैल न जाए);
- ठीक से कॉन्फ़िगर किया गया वेब सर्वर प्रोजेक्ट कोड में कई समस्याओं से बचाता है (कोड लिखना और सर्वर को अच्छी तरह से कॉन्फ़िगर करना महत्वपूर्ण है)।
डेवलपर्स से विस्तृत जवाब
डेवलपर्स का पहला जवाब कुछ ऐसा था "हमने सब कुछ ठीक कर दिया है, इसलिए सही कोड देखें"। मुझे बहुत विस्तार से चित्रित करना था कि कुछ समस्याएं कहाँ हैं और उनका कैसे शोषण किया जा सकता है।
तब उन्हें एक विस्तृत जवाब मिला: “हाँ समस्याएं हैं, और उन्हें 7.3.0 संस्करण में ठीक किया जाएगा। श्वेत सूची भी xlslx और csv दोनों के लिए छवियों के लिए जोड़ी जाएगी। ” उन्होंने यह भी लिखा है कि उन्हें इंस्टॉलेशन निर्देशों में वेब एक्सेस के बाहर "अटैचमेंट्स" और "डॉक्यूमेंट्स" डायरेक्ट्रीज जोड़ने की सिफारिश है।
डेवलपर्स ने मुझे अपडेट के बाद सीवीई को पंजीकृत करने और एक लेख लिखने की अनुमति दी (जो बाहर आया और
डाउनलोड के लिए उपलब्ध है)।
निष्कर्ष
जैसा कि मैंने शुरुआत में लिखा था, काफी लोगों ने सीवीई (500 से अधिक डाउनलोड) तय करने वाले अपडेट को डाउनलोड किया है, और यह अच्छा है कि लोग अपने कमजोर सॉफ्टवेयर को अपडेट करें, लेकिन यह दुखद है कि सॉफ्टवेयर कमजोर रहता है।
नतीजतन, चार सीवीई मुझे और हमारी कंपनी को सौंपा गया: सीवीई -2018-19307, सीवीई-2018-19308, सीवीई-2018-19309, सीवीई-2018-19310।