FlawOpen

flawopen.com/Incidents/wordpress-stored-xss-admin-session-campaign-october-2026

● WordPress plugin installations (campaign observations attributed to Patchstack) · CVE-2026-93836 · 2026-10-04 · CVSS 7.2 · उच्च
सुरक्षा अनुसंधान · FlawOpen

WordPress Stored XSS अभियान: दो प्लगइन, एक स्थायी पहुँच श्रृंखला

Patchstack ने WordPress की दो Stored XSS खामियों के माध्यम से एक ही post-exploitation implant का उपयोग करने के प्रयास देखे। दोनों प्लगइन अपडेट करें और persistence की जाँच करें; अपडेट पहले से compromised साइट को साफ नहीं करता।[1], [2], [3], [4], [5]

💡 आसान भाषा में (ELI5)

दो सार्वजनिक सुझाव-पेटियों की कल्पना करें, जिनकी पर्चियाँ बाद में साइट का व्यवस्थापक खोलता है। यदि साइट पर्ची को साधारण पाठ की जगह चलने योग्य markup के रूप में सहेजती है, तो उसे खोलने पर वह व्यवस्थापक के ब्राउज़र अधिकारों से काम कर सकती है। अभियान रिपोर्ट के अनुसार, दो अलग प्लगइन खामियाँ प्रवेश-बिंदु बनीं और फिर अपडेट के बाद भी पहुँच बनाए रखने के प्रयास हुए।[1], [8], [9]

इस पेज के मुख्य शब्द

Stored XSS
हमलावर के नियंत्रण वाला पाठ सहेजा जाता है और बाद में ब्राउज़र में चलने योग्य markup के रूप में दिखता है। यहाँ WordPress प्रशासनिक स्क्रीन महत्वपूर्ण संदर्भ थी।[2], [3], [8], [9]
Same-origin session
ब्राउज़र उसी origin की requests के साथ साइट का session अपने-आप भेजता है। उस साइट में पहले से चल रहा script HttpOnly cookie पढ़े बिना पेज के माध्यम से कार्रवाई कर सकता है।[1], [17], [18]
Persistence
प्रारंभिक खामी ठीक होने के बाद भी बचा हुआ access, जैसे अनधिकृत खाते या फ़ाइलें। सामान्य अपडेट इन बदलावों को हटाता नहीं है।[1]
CVSS स्कोर का स्रोत
Wordfence CNA रिकॉर्ड दोनों CVE के लिए CVSS 3.1 स्कोर 7.2 देते हैं। WPC Product Bundles पर Patchstack का advisory 7.1 दिखाता है; यह लेख CVE रिकॉर्ड का स्कोर इस्तेमाल करता है और स्रोत स्पष्ट करता है।[2], [3], [6]
स्रोत कोड संदर्भ
Wordfence CNA के संदर्भ WPC Product Bundles और Ninja Forms की version-pinned फ़ाइलों की ओर संकेत करते हैं, जो validation, storage और admin rendering से संबंधित हैं। ये जाँच के लिए स्रोत-संकेत हैं, सत्यापित patch diff नहीं। ऊपर का PHP जोड़ा output-encoding का उदाहरण है, प्लगइन का पुनर्निर्मित code नहीं।[8], [9], [10], [11], [12], [13], [14], [15], [16]

फ्रेमवर्क मैपिंग

घटना का समयक्रम (Timeline)

2026-09-21 / 2026-09-22

Wordfence CNA रिकॉर्ड में प्रकाशन तिथि 21 सितंबर है, जबकि Patchstack के अनुसार खामियाँ 22 सितंबर को सार्वजनिक की गई थीं। स्रोतों में एक दिन का अंतर है; CVE रिकॉर्ड क्रमशः 8.6.6 और 3.15.3 तक के प्रभावित प्लगइन संस्करण बताते हैं।[2], [3], [8], [9], [1]

2026-10-04 से 2026-10-05

Patchstack ने उसी post-exploitation चरण वाले प्रयास पहले WPC Product Bundles और फिर Ninja Forms के ज़रिए देखे। Patchstack ने 6 अक्टूबर को विश्लेषण प्रकाशित किया।[1]

हमले का चरण-दर-चरण प्रवाह

चरण 1

Stored XSS के दो अलग प्रवेश-बिंदु

Patchstack के अनुसार अभियान ने WPC Product Bundles में CVE-2026-93836 और Ninja Forms में CVE-2026-94504 का उपयोग किया। ये अलग खामियाँ हैं; रिपोर्ट उन्हें साझा बाद की गतिविधि से जोड़ती है।[1], [2], [3], [8], [9]

चरण 2

सहेजी सामग्री व्यवस्थापक के सामने आती है

भेजा गया डेटा सहेजा जाता है और बाद में ऑर्डर या फ़ॉर्म सबमिशन की प्रशासनिक स्क्रीन में दिखता है। असुरक्षित output handling उसे markup की तरह चला सकती है; व्यवस्थापक का पेज खोलना browser context देता है।[1], [8], [9], [10], [11], [12], [13], [14]

चरण 3

Script साइट का context विरासत में लेता है

WordPress origin में चल रहा code व्यवस्थापक के मौजूदा session के साथ same-origin requests कर सकता है। HttpOnly cookie की गोपनीयता बचाता है, पर उसी origin में पहले से चल रहे code को session उपयोग करने से नहीं रोकता।[1], [17], [18]

चरण 4

बाद की पहुँच खामी ठीक होने के बाद भी रह सकती है

Patchstack ने plugin install करने और अतिरिक्त persistence बनाने के प्रयास बताए। यह अभियान का अवलोकन है, हर लक्ष्य पर सफलता का प्रमाण नहीं; अपडेट कमजोर entry point रोकता है, पहले किए बदलाव वापस नहीं करता।[1], [4], [5]

सोर्स कोड: कमज़ोर बनाम सुरक्षित कार्यान्वयन

यह सामान्य मॉडल नहीं, बल्कि Ninja Forms के Textarea::admin_form_element() में स्रोत कोड का बदलाव है। संस्करण 3.15.3 सबमिशन के संग्रहीत पाठ को textarea के HTML बॉडी में सीधे जोड़ता था; 3.15.4 आउटपुट से पहले esc_textarea() लागू करता है। इससे इस संदर्भ में सामग्री को मार्कअप के रूप में समझे जाने का रास्ता बंद होता है। यह उदाहरण केवल CVE-2026-94504 के Ninja Forms पथ को दिखाता है; यह CVE-2026-93836 के लिए WPC Product Bundles का पैच नहीं है। अन्य संदर्भों में उपयुक्त escaping का उपयोग करें।[13], [15], [16]

कमज़ोर कार्यान्वयन
public function admin_form_element( $id, $value )
{
    return "<textarea class='widefat' name='fields[$id]'>$value</textarea>";
}
सुरक्षित और सुदृढ़ फ़िक्स
public function admin_form_element( $id, $value )
{
    return "<textarea class='widefat' name='fields[$id]'>" . esc_textarea( $value ) . "</textarea>";
}

इंजीनियरिंग और सिस्टम सुरक्षा चेकलिस्ट

स्रोत