Le 24 août 2023, notre équipe Wordfence Threat Intelligence a identifié et a commencé le processus de divulgation responsable d’une vulnérabilité de script intersite (XSS) stockée et d’injection SQL aveugle dans le Plugin Slimstat Analytics, qui est activement installé sur plus de 100 000 sites Web WordPress. La vulnérabilité permet aux acteurs malveillants disposant d’autorisations de niveau contributeur ou supérieures d’injecter des scripts Web malveillants dans des pages ou d’exécuter des requêtes SQL en les ajoutant à une requête SQL existante à l’aide du shortcode du plugin.
Tous Wordfence Premium, Entretien de la clôture des motset Réponse de Wordfence les clients, ainsi que ceux qui utilisent encore la version gratuite de notre plugin, sont protégés contre tout exploit ciblant cette vulnérabilité par la protection intégrée contre les scripts intersites et les injections SQL du pare-feu Wordfence.
Nous avons contacté VeronaLabs le 24 août 2023 et nous avons reçu une réponse le même jour. Après avoir fourni tous les détails, le développeur a publié un correctif le 28 août 2023. Nous tenons à féliciter VeronaLabs pour sa réponse rapide et son correctif opportun.
Nous invitons les utilisateurs à mettre à jour leurs sites avec la dernière version corrigée de Slimstat Analytics, version 5.0.10 au moment d’écrire ces lignes, dès que possible.
Résumé des vulnérabilités de Wordfence Intelligence
Le plugin Slimstat Analytics pour WordPress est vulnérable au Stored Cross-Site Scripting via le shortcode « slimstat » dans les versions jusqu’à 5.0.9 incluses en raison d’une vérification insuffisante des entrées et d’un échappement de sortie sur les attributs fournis par l’utilisateur. Cela permet aux attaquants authentifiés disposant d’autorisations de niveau contributeur et supérieures d’injecter des scripts Web arbitraires dans des pages qui s’exécuteront chaque fois qu’un utilisateur accède à une page injectée.
Le plugin Slimstat Analytics pour WordPress est vulnérable à l’injection SQL via le shortcode du plugin dans les versions jusqu’à 5.0.9 incluses en raison d’un échappement insuffisant sur le paramètre fourni par l’utilisateur et d’un manque de préparation suffisante sur la requête SQL existante. Cela permet aux attaquants authentifiés disposant d’autorisations de niveau contributeur et supérieures d’ajouter des requêtes SQL supplémentaires à des requêtes déjà existantes qui peuvent être utilisées pour extraire des informations sensibles de la base de données.
Analyse technique
Slimstat Analytics est un plugin d’analyse du trafic de sites Web WordPress qui offre plusieurs fonctionnalités d’analyse et de surveillance du trafic. Il fournit un shortcode ([slimstat]
) qui affiche différents types de statistiques lorsqu’il est ajouté à une page ou une publication WordPress.
Malheureusement, la mise en œuvre non sécurisée de la fonctionnalité shortcode du plugin permet l’injection de scripts Web arbitraires dans ces pages. L’examen du code révèle que le shortcode a plusieurs types basés sur le paramètre « f ». Dans les versions vulnérables, le type « top-all » ne nettoie pas correctement l’attribut « w » fourni par l’utilisateur, puis ne parvient pas à échapper à la sortie « class » dérivée du paramètre « w » lorsqu’il affiche les statistiques. Cela permet d’injecter des charges utiles Cross-Site Scripting basées sur des attributs via l’attribut « w ».
public static function slimstat_shortcode($_attributes = '', $_content = '') { shortcode_atts(array( 'f' => '', // recent, popular, count, widget 'w' => '', // column to use (for recent, popular and count) or widget to use 's' => ' ', // separator 'o' => 0 // offset for counters ), $_attributes); line 724 $output = '<ul class="slimstat-shortcode ' . $f . implode('-', $w) . '">' . implode('', $output) . '</ul>';
L’extrait de méthode slimstat_shortcode dans la classe wp_slimstat
Cela permet aux acteurs malveillants disposant d’un accès au niveau contributeur à un site de mener des attaques XSS stockées. Une fois qu’un script est injecté dans une page ou une publication, il s’exécutera chaque fois qu’un utilisateur accède à la page concernée. Bien que cette vulnérabilité nécessite qu’un compte de contributeur de confiance soit compromis ou qu’un utilisateur puisse s’inscrire en tant que contributeur, les acteurs malveillants qui réussissent pourraient voler des informations sensibles, manipuler le contenu du site, injecter des utilisateurs administratifs, modifier des fichiers ou rediriger les utilisateurs vers des sites Web malveillants. qui sont toutes des conséquences graves.
En examinant plus en profondeur le code, nous avons également trouvé une vulnérabilité d’injection SQL dans le même shortcode. Bien que le paramètre « w » soit converti en tableau, il n’est pas correctement nettoyé. Ce paramètre est utilisé pour la colonne dans la requête de base de données, et bien que la fonction de préparation soit utilisée, la colonne n’est pas spécifiée comme espace réservé, ce qui permet à un attaquant d’effectuer des attaques par injection SQL.
$w = self::string_to_array($w);
L’extrait de méthode slimstat_shortcode dans la classe wp_slimstat
public static function get_top($_column = 'id', $_where = '', $_having = '', $_use_date_filters = true, $_as_column = '') { // This function can be passed individual arguments, or an array of arguments if (is_array($_column)) { $_where = !empty($_column['where']) ? $_column['where'] : ''; $_having = !empty($_column['having']) ? $_column['having'] : ''; $_use_date_filters = !empty($_column['use_date_filters']) ? $_column['use_date_filters'] : true; $_as_column = !empty($_column['as_column']) ? $_column['as_column'] : ''; $_column = $_column['columns']; } $group_by_column = $_column; if (!empty($_as_column)) { $_column = "$_column AS $_as_column"; } else { $_as_column = $_column; } $_where = self::get_combined_where($_where, $_as_column, $_use_date_filters); // prepare the query $sql = $GLOBALS['wpdb']->prepare(" SELECT $_column, COUNT(*) counthits FROM {$GLOBALS['wpdb']->prefix}slim_stats WHERE $_where GROUP BY $group_by_column $_having ORDER BY counthits DESC LIMIT 0, %d", self::$filters_normalized['misc']['limit_results']); return self::get_results($sql, ((!empty($_as_column) && $_as_column != $_column) ? $_as_column : $_column), 'counthits DESC', ((!empty($_as_column) && $_as_column != $_column) ? $_as_column : $_column), 'SUM(counthits) AS counthits'); }
La méthode get_top dans la classe wp_slimstat_db
Étant donné qu’aucune donnée de la requête SQL n’a été renvoyée dans la réponse, un attaquant devrait utiliser une approche aveugle basée sur le temps pour extraire les informations de la base de données. Cela signifie qu’ils devront utiliser des instructions SQL CASE avec le SLEEP()
commande tout en observant le temps de réponse de chaque demande de vol d’informations de la base de données. Il s’agit d’une méthode complexe, mais souvent efficace, pour obtenir des informations à partir d’une base de données lors de l’exploitation des vulnérabilités d’injection SQL.
Chronologie de la divulgation
24 août 2023 – L’équipe Wordfence Threat Intelligence découvre les vulnérabilités XSS et SQL Injection stockées dans Slimstat Analytics.
24 août 2023 – Nous prenons contact avec le fournisseur du plugin en lui demandant de confirmer la boîte de réception pour gérer la discussion.
26 août 2023 – Le vendeur confirme la boîte de réception pour gérer la discussion.
26 août 2023 – Nous envoyons les détails complets de la divulgation de la vulnérabilité XSS.
27 août 2023 – Nous envoyons les détails complets de la divulgation de la vulnérabilité d’injection SQL.
27 août 2023 – Le fournisseur accuse réception du rapport et commence à travailler sur un correctif.
28 août 2023 – La version entièrement corrigée, 5.0.10, est publiée.
Conclusion
Dans cet article de blog, nous avons détaillé les vulnérabilités XSS et SQL Injection stockées dans le Plugin Slimstat Analytics affectant les versions 5.0.9 et antérieures. Cette vulnérabilité permet aux auteurs de menaces authentifiés disposant d’autorisations de niveau contributeur ou supérieures d’injecter des scripts Web malveillants dans des pages qui s’exécutent lorsqu’un utilisateur accède à une page affectée et d’extraire des informations sensibles d’une base de données. Ces vulnérabilités ont été entièrement corrigées dans la version 5.0.10 du plugin.
Nous encourageons les utilisateurs de WordPress à vérifier que leurs sites sont mis à jour avec la dernière version corrigée de Slimstat Analytics.
Tous les utilisateurs de Wordfence, y compris ceux qui utilisent Wordfence Premium, Entretien de la clôture des motset Réponse de Wordfenceainsi que les sites exécutant toujours la version gratuite de Wordfence, sont entièrement protégés contre cette vulnérabilité.
Si vous connaissez quelqu’un qui utilise ce plugin sur son site, nous vous recommandons de partager cet avis avec lui pour garantir la sécurité de son site, car cette vulnérabilité présente un risque important.
Pour les chercheurs en sécurité cherchant à divulguer les vulnérabilités de manière responsable et à obtenir un identifiant CVE, vous pouvez soumettez vos conclusions à Wordfence Intelligence et potentiellement gagner une place sur notre classement.
Source link