
CVE-2021-43408 के लिए तकनीकी विश्लेषण और प्रूफ-ऑफ-कॉन्सेप्ट एक्सप्लॉइट, वर्डप्रेस डुप्लिकेट पोस्ट प्लगइन संस्करण 1.1.9 में एक SQL इंजेक्शन भेद्यता, चरण-दर-चरण शोषण मार्गदर्शिका और उपचार सलाह के साथ।
वर्डप्रेस एक ओपन सोर्स CMS (सामग्री प्रबंधन प्रणाली) सॉफ्टवेयर है, जो एक सामग्री प्रबंधन प्रणाली है। HTML एन्कोडिंग भाषा का उपयोग करने के बजाय, WP PHP प्रोग्रामिंग भाषा में लिखा गया है जो MySQL डेटाबेस प्लेटफॉर्म का उपयोग करता है। वर्डप्रेस की स्थापना प्रोग्रामर मैट मुलेनवेग और माइक लिटिल द्वारा की गई थी। वर्तमान में वर्डप्रेस का स्वामित्व सैन फ्रांसिस्को, कैलिफोर्निया, संयुक्त राज्य अमेरिका स्थित ऑटोमैटिक कंपनी के पास है।
वर्डप्रेस का Duplicate Post प्लगइन संस्करण 1.1.9 और उससे नीचे SQL इंजेक्शन दोष से ग्रस्त है। इस प्रकार का शोषण हमलावर को SQL क्वेरी इंजेक्ट करने की अनुमति देता है, जिससे वह डेटाबेस में संसाधनों को पढ़, संशोधित या हटा सकता है।
इस कमजोरी का शोषण कोई भी प्रमाणित उपयोगकर्ता कर सकता है जिसके पास Duplicate Post प्लगइन की कार्यक्षमता का उपयोग करने की अनुमति है। डिफ़ॉल्ट रूप से, केवल व्यवस्थापक के पास यह अनुमति है, हालांकि अनुमतियों को संपादित किया जा सकता है, जिससे संपादक, लेखक, योगदानकर्ता और यहां तक कि सब्सक्राइबर भी इस प्लगइन का उपयोग कर सकते हैं।
CVE-2021-43408 "11/19/2021" को पाया गया था और CVSS पैमाने पर इसे HIGH स्तर पर रेट किया गया है।

इस कमजोरी का मूल कारण यह है कि उपयोगकर्ता के अनुरोध से आने वाले डेटा को SQL निष्पादन में डालने से पहले सैनिटाइज़ नहीं किया जाता है।
अधिक विशेष रूप से, फ़ाइल post/handler.php में, फ़ंक्शन cdn_insert_post() में
function cdp_insert_post($id, $data, $times, $areWePro, $isChild = false, $p_ids = null, $site) {
// Get Wordpress database
global $wpdb;
// Create empty array for new id(s) and error(s)
$results = array('ids' => array(), 'error' => 0, 'counter' => 0);
// Get Counter value
$prefix = (($site != -1) ? $wpdb->get_blog_prefix($site) : $wpdb->get_blog_prefix());
$newestId = $wpdb->get_results("SELECT post_id FROM {$prefix}postmeta WHERE meta_key = '_cdp_origin' AND meta_value = {$id} ORDER BY post_id DESC LIMIT 1", ARRAY_A);
$idहमलावर द्वारा नियंत्रित है
चर $id को SQL क्वेरी वाले फ़ंक्शन में बिना किसी सैनिटाइज़ेशन के पास किया जाता है। यह फ़ंक्शन वर्डप्रेस Ajax wp_ajax_cdp_action_handling के माध्यम से कॉल किया जाता है।
यह देखा जा सकता है कि पैरामीटर id को फ़ंक्शन cdn_sanitize_array के माध्यम से पास किया जाता है, जहाँ पोस्ट के डेटा फ़ील्ड फ़ंक्शन sanitize_text_field से गुज़रते हैं, जो डेटा स्ट्रिंग में किसी भी उद्धरण चिह्न ' को एस्केप करता है।
हालाँकि, कोड में एक कमजोरी है जब Integer फ़ील्ड (id फ़ील्ड) के डेटा को SQL निष्पादन में पास किया जाता है; हमलावर इसका लाभ उठाकर इस फ़ील्ड के मान में अतिरिक्त SQL स्टेटमेंट डाल सकता है। इसलिए, SQL क्वेरी को नियंत्रित करने के लिए, हमलावर को केवल ' वर्ण का उपयोग करने से बचना होगा।
चरण 1: व्यवस्थापक उपयोगकर्ता के रूप में लॉग इन करें, Duplicate Post प्लगइन संस्करण 1.1.9 स्थापित करें। यह प्लगइन उपयोगकर्ताओं को मौजूदा पोस्ट को डुप्लिकेट करने में मदद करता है।

चरण 2: Post अनुभाग पर जाएँ, एक पोस्ट चुनें, Copy क्रिया चुनें और Apply पर क्लिक करें।

चरण 3: Setting: Default चुनें और Copy पर क्लिक करें।

चरण 4: HTTP अनुरोध को इंटरसेप्ट करें, यहाँ ध्यान देने योग्य डेटा फ़ील्ड id है; देखा जा सकता है कि इस फ़ील्ड का डेटा Integer प्रकार का है।

चरण 5: SQL इंजेक्शन पेलोड डालें, अनुरोध भेजें और देखें कि 9 सेकंड के बाद सर्वर प्रतिक्रिया देता है -> SQL इंजेक्शन सफल।
पेलोड: 1 and (select*from(select(sleep(9)))a)--

