Le 14 septembre 2020, notre équipe Threat Intelligence a découvert deux vulnérabilités de gravité élevée dans Grille de publication, un plugin WordPress avec plus de 60 000 installations. En enquêtant sur l’une de ces vulnérabilités, nous avons découvert que des vulnérabilités presque identiques étaient également présentes dans Vitrine d’équipe, un plugin séparé du même auteur avec plus de 6 000 installations.
Nous avons d’abord contacté le développeur du plugin, PickPlugins, le 16 septembre 2020 et nous avons fourni une divulgation complète le lendemain. Les correctifs pour les deux plugins ont été mis à disposition quelques heures seulement après la divulgation le 17 septembre 2020.
Les utilisateurs de Wordfence Premium ont reçu une règle de pare-feu protégeant les deux plugins des deux vulnérabilités le 16 septembre 2020. Les sites exécutant toujours la version gratuite de Wordfence recevront cette règle après 30 jours, le 16 octobre 2020.
Produits concernés: Grille de publication, vitrine d’équipe
Plugin slug: post-grille, équipe
Versions concernées: Grille de publication
ID CVE: En attente
Score CVSS: 7,5 (élevé)
Vecteur CVSS: CVSS: 3.0 / AV: N / AC: H / PR: L / UI: N / S: U / C: H / I: H / A: H
Version entièrement corrigée: Post Grid 2.0.73 et Team Showcase 1.22.16
Post Grid est un plugin WordPress populaire qui permet aux utilisateurs d’afficher leurs publications dans une disposition en grille, tandis que Team Showcase est conçu pour présenter les membres de l’équipe d’une organisation. Ces deux plugins permettaient l’importation de mises en page personnalisées et contenaient des fonctions presque identiques afin d’importer ces mises en page. Post Grid n’utilisait plus réellement la fonction d’importation vulnérable, même si le code vulnérable était toujours présent.
Dans les deux cas, un attaquant connecté avec des autorisations minimales comme un abonné pourrait déclencher les fonctions en envoyant une requête AJAX, avec le action
mis à post_grid_import_xml_layouts
pour le plugin Post Grid ou team_import_xml_layouts
pour le plugin Team Showcase, chaque action déclenchant une fonction du même nom.
De plus, dans le plugin Post Grid, le post_grid_import_xml_layouts
La fonction peut également être déclenchée via un shortcode. Par défaut, cela signifiait que seuls les utilisateurs authentifiés pouvaient l’activer. Cependant, tout plugin tiers permettant l’exécution de shortcode non authentifié étendrait la vulnérabilité aux attaquants non authentifiés.
add_shortcode('post_grid_import_xml_layouts', 'post_grid_import_xml_layouts'); function post_grid_import_xml_layouts(){ $post_grid_info = get_option('post_grid_info'); $response = array(); $user_id = get_current_user_id(); $source = isset($_POST['source']) ? sanitize_text_field($_POST['source']) : ''; $skip = isset($_POST['skip']) ? sanitize_text_field($_POST['skip']) : ''; if($skip == 'yes'){ if(strpos($source, 'post-grid-pro')){ $post_grid_info['import_pro_layouts'] = 'done'; }else{ $post_grid_info['import_layouts'] = 'done'; } $response['skip_success'] = __('Import skipped','post-grid'); update_option('post_grid_info', $post_grid_info); echo json_encode($response); die(); } if(!empty($source)){ $json_obj = file_get_contents($source); }else{ $json_obj = ''; } //$xml_json = json_encode($html_obj); $xml_arr = json_decode($json_obj, true); $items = isset($xml_arr['rss']['channel']['item']) ? $xml_arr['rss']['channel']['item'] : array(); if(!empty($items)) foreach ($items as $item){ $post_title = isset($item['title']) ? $item['title'] : ''; $postmeta = isset($item['postmeta']) ? $item['postmeta'] : array(); $post_id = wp_insert_post( array( 'post_title' => $post_title, 'post_content' => '', 'post_status' => 'publish', 'post_type' => 'post_grid_layout', 'post_author' => $user_id, ) ); // echo '<br>'; // echo $post_title. ' Created'; // echo '<br>'; foreach ($postmeta as $meta){ $meta_key = isset($meta['meta_key']['__cdata']) ? $meta['meta_key']['__cdata'] : ''; $meta_value = isset($meta['meta_value']['__cdata']) ? $meta['meta_value']['__cdata'] : ''; // echo '<br>'; // //var_dump(unserialize($meta_value)); // echo '<br>'; if($meta_key == 'layout_options' || $meta_key == 'layout_elements_data' || $meta_key == 'custom_scripts' ){ print_r($meta_value); update_post_meta($post_id, $meta_key, unserialize($meta_value)); } } } $response['success'] = __('Import done','post-grid'); if(strpos($source, 'post-grid-pro')){ $post_grid_info['import_pro_layouts'] = 'done'; }else{ $post_grid_info['import_layouts'] = 'done'; } update_option('post_grid_info', $post_grid_info); echo json_encode($response); die(); } add_action('wp_ajax_post_grid_import_xml_layouts', 'post_grid_import_xml_layouts');
Indépendamment de la façon dont la fonction vulnérable a été déclenchée, un attaquant peut fournir un source
paramètre pointant vers une charge malveillante spécialement conçue hébergée ailleurs. La fonction ouvrirait alors le fichier contenant la charge utile, le décoderait et créerait une nouvelle mise en page basée sur son contenu. La mise en page créée comprenait un custom_scripts
section, et un attaquant pourrait ajouter du JavaScript malveillant au custom_css
partie de cette section. Cela serait alors exécuté chaque fois qu’un utilisateur administratif modifiait la mise en page ou qu’un visiteur visitait une page en fonction de la mise en page.
Tout JavaScript malveillant ajouté de cette manière pourrait être utilisé pour prendre le contrôle d’un site en ajoutant un administrateur malveillant, en ajoutant une porte dérobée aux fichiers de plugin ou de thème, ou en volant les informations de session de l’administrateur.
Produits concernés: Grille de publication, vitrine d’équipe
Plugin slug: post-grille, équipe
Versions concernées: Grille de publication
ID CVE: En attente
Score CVSS: 7,5 (élevé)
Vecteur CVSS: CVSS: 3.0 / AV: N / AC: H / PR: L / UI: N / S: U / C: H / I: H / A: H
Version entièrement corrigée: Post Grid 2.0.73 et Team Showcase 1.22.16
le post_grid_import_xml_layouts
et team_import_xml_layouts
les fonctions peuvent également être utilisées pour Injection d’objets PHP en utilisant le même mécanisme que l’attaque XSS. Cela a été possible car les fonctions vulnérables ont désérialisé la charge utile fournie dans le source
paramètre.
En tant que tel, un attaquant pourrait créer une chaîne qui serait désérialisée dans un objet PHP actif. Bien qu’aucun plugin n’utilise de méthode magique vulnérable, si un autre plugin utilisant une méthode magique vulnérable était installé, Object Injection pourrait être utilisé par un attaquant. Cela permettrait à un acteur malveillant d’exécuter du code arbitraire, de supprimer ou d’écrire des fichiers, ou d’effectuer un certain nombre d’autres actions qui pourraient conduire à la prise de contrôle du site.
Comme pour la vulnérabilité XSS, la vulnérabilité d’injection d’objet PHP nécessiterait généralement que l’attaquant ait un compte avec au moins des privilèges de niveau abonné. Cependant, les sites utilisant un plugin ou un thème permettant aux visiteurs non authentifiés d’exécuter des codes courts arbitraires seraient vulnérables aux attaquants non authentifiés.
Chronologie
14 septembre 2020 – Notre équipe Threat Intelligence trouve deux vulnérabilités dans le plugin Post Grid.
16 septembre 2020 – Nous découvrons des vulnérabilités identiques dans le plugin Team Showcase. Nous publions une règle de pare-feu pour les clients Wordfence Premium et contactons PickPlugins, le développeur des deux plugins.
17 septembre 2020 – PickPlugins répond, et nous fournissons une divulgation complète. PickPlugins publie des correctifs pour les deux plugins.
16 octobre 2020 – La règle de pare-feu devient disponible pour les utilisateurs gratuits de Wordfence.
Conclusion
Dans l’article d’aujourd’hui, nous avons détaillé deux vulnérabilités de haute gravité présentes à la fois dans le plugin Post Grid et dans le plugin Team Showcase, notamment une vulnérabilité XSS (Cross-Site Scripting) stockée et une vulnérabilité d’injection d’objets PHP.
Wordfence Premium les utilisateurs sont protégés des attaques contre les deux plugins depuis le 16 septembre 2020. Les sites exécutant toujours la version gratuite de Wordfence recevront la règle de pare-feu le 16 octobre 2020.
Si votre site exécute l’un de ces plugins, il est essentiel que vous mettiez à jour la dernière version dès que possible. Au moment d’écrire ces lignes, la dernière version de Post Grid est la 2.0.73 et la dernière version de Team Showcase est la 1.22.16. Si vous connaissez quelqu’un qui utilise l’un de ces plugins, veuillez également partager ce rapport avec eux.
Un merci spécial au développeur du plugin, PickPlugins, pour sa réponse rapide à la correction de ces vulnérabilités.
Source link