Le 14 décembre 2020, l’équipe de Wordfence Threat Intelligence a terminé la recherche de deux vulnérabilités de falsification de requêtes intersites (CSRF) dans Galerie NextGen, un plugin WordPress avec plus de 800 000 installations, y compris une vulnérabilité de gravité critique qui pourrait conduire à l’exécution de code à distance (RCE) et à des scripts intersites stockés (XSS). L’exploitation de ces vulnérabilités pourrait entraîner une prise de contrôle de site, des redirections malveillantes, une injection de spam, du phishing et bien plus encore.

Nous avons initialement contacté l’éditeur du plugin, Imagely, le même jour, et nous avons fourni une divulgation complète le lendemain, le 15 décembre 2020. Imagely nous a envoyé des correctifs pour examen le 16 décembre et publié la version corrigée, 3.5.0, sur 17 décembre 2020.

Les utilisateurs de Wordfence Premium ont reçu des règles de pare-feu protégeant contre ces vulnérabilités le 14 décembre 2020. Les sites exécutant toujours la version gratuite de Wordfence ont reçu ces règles 30 jours plus tard, le 13 janvier 2021.

La description: Falsification de requêtes intersites (CSRF) menant à XSS et RCE via le téléchargement de fichiers et LFI
Plugin concerné: Plugin de galerie WordPress – NextGEN Gallery
Plugin Slug: nextgen-galerie
Versions concernées:
ID CVE: CVE-2020-35942
Score CVSS: 9.6 (CRITIQUE)
Vecteur CVSS: CVSS: 3.0 / AV: N / AC: L / PR: N / UI: R / S: C / C: H / I: H / A: H
Version entièrement corrigée: 3.5.0

NextGEN Gallery est un plugin WordPress populaire conçu pour créer des galeries d’images hautement réactives. Il est clair que le développeur du plugin a pris soin d’intégrer la sécurité dans le code du plugin. NextGen Gallery a une seule fonction de sécurité, is_authorized_request, qui sert à protéger la plupart de ses paramètres:

    function is_authorized_request($privilege = NULL)
    {
        $retval = TRUE;
        if (!$privilege) {
            $privilege = $this->object->get_required_permission();
        }
        // Ensure that the user has permission to access this page
        if (!M_Security::is_allowed($privilege)) {
            $retval = FALSE;
        }
        // Ensure that nonce is valid
        if ($this->object->is_post_request() && (isset($_REQUEST['nonce']) && !M_Security::verify_nonce($_REQUEST['nonce'], $privilege))) {
            $retval = FALSE;
        }
        return $retval;
    }

Cette fonction a intégré à la fois un contrôle de capacité et un contrôle nonce dans une seule fonction pour une application plus facile dans tout le plugin. Malheureusement, une faille de logique dans le is_authorized_request signifie que le contrôle nonce permettrait aux demandes de se poursuivre si le $_REQUEST[‘nonce’] le paramètre était manquant, plutôt que non valide.

Cela a ouvert un certain nombre d’opportunités aux attaquants d’exploiter via Cross-Site Request Forgery. Une fonctionnalité de NextGen Gallery est la possibilité pour les administrateurs de télécharger des fichiers CSS personnalisés à utiliser pour styliser les galeries. Alors que le fichier téléchargé devait se terminer par l’extension .css, il était possible de télécharger du code arbitraire avec des extensions doubles, (par exemple, file.php.css). Bien que ces fichiers ne soient exécutables que sur certaines configurations, telles qu’Apache / mod_php avec une directive AddHandler, cela pourrait toujours entraîner l’exécution de code à distance sur toutes les configurations vulnérables.

Malheureusement, il était également possible de réaliser l’exécution de code même sur des configurations non vulnérables aux doubles extensions. NextGen Gallery a une fonctionnalité distincte qui permet aux utilisateurs de spécifier la façon dont les galeries sont affichées via une fonction «Modèles hérités», qui utilise également le is_authorized_request fonction de sécurité. Ainsi, il était possible de définir différents types d’album pour utiliser un modèle avec le chemin absolu du fichier téléchargé à l’étape précédente, ou effectuer une attaque de traversée de répertoire en utilisant le chemin relatif du fichier téléchargé, quelle que soit l’extension de ce fichier, via un Attaque CSRF.

Cela entraînerait une inclusion de fichier local (LFI) et une exécution de code à distance (RCE), car le fichier téléchargé serait alors inclus et exécuté chaque fois que le type d’album sélectionné était consulté sur le site. Tout JavaScript inclus dans le fichier téléchargé serait également exécuté, ce qui entraînerait le Cross-Site Scripting (XSS).

Pour rappel, une fois qu’un attaquant a réalisé l’exécution de code à distance sur un site Web, il a effectivement pris le contrôle de ce site. XSS peut également être utilisé pour prendre en charge un site si un administrateur connecté visite une page exécutant un script injecté malveillant.

Cette attaque nécessiterait probablement un certain degré d’ingénierie sociale, car un attaquant devrait inciter un administrateur à cliquer sur un lien qui soumettait des demandes spécialement conçues pour effectuer ces actions. De plus, l’exécution de ces actions nécessiterait 2 requêtes distinctes, bien que cela soit simple à mettre en œuvre et que nous avons pu le faire lors de nos tests. Enfin, le site exigerait qu’au moins un album soit publié et accessible à l’attaquant.

La description: Falsification de demandes intersites (CSRF) menant au téléchargement de fichiers
Plugin concerné: Plugin de galerie WordPress – NextGEN Gallery
Plugin Slug: nextgen-galerie
Versions concernées:
ID CVE: CVE-2020-35943
Score CVSS: 8,8 (HAUT)
Vecteur CVSS: CVSS: 3.0 / AV: N / AC: L / PR: N / UI: R / S: U / C: H / I: H / A: H
Version entièrement corrigée: 3.5.0

NextGen Gallery a également utilisé une fonction de sécurité distincte, validate_ajax_request, pour diverses actions AJAX, y compris celles utilisées pour télécharger des images:

    function validate_ajax_request($action = NULL, $token = false)
    {
        if ($token === TRUE) {
            $token = isset($_REQUEST['nonce']) ? $_REQUEST['nonce'] : FALSE;
        }
        // TODO: Remove !$action condition. Necessary for Proofing at the moment
        return (!$action || M_Security::is_allowed($action)) && (!$token || M_Security::verify_nonce($token, $action));
    }

Cette fonction présentait une faille logique similaire qui permettrait aux requêtes de se poursuivre si le $_REQUEST[‘nonce’] le paramètre était manquant, plutôt que non valide.

Cela a permis de tromper un administrateur en lui soumettant une demande conçue pour télécharger un fichier image arbitraire. Alors que le fichier téléchargé devait être un fichier image valide, il est possible de cacher une webshell ou un autre code PHP exécutable dans un tel fichier image.

Cela pourrait également être combiné avec la vulnérabilité précédente, et le fichier image pourrait être défini comme un «modèle hérité», auquel point il serait inclus et le code qu’il contenait serait exécuté. Encore une fois, cela nécessiterait un certain degré d’ingénierie sociale, car un attaquant devrait inciter un administrateur à cliquer sur un lien qui a entraîné l’envoi de ces demandes.

Chronologie

14 décembre 2020 – L’équipe Wordfence Threat Intelligence termine ses recherches sur les vulnérabilités dans NextGen Gallery. Nous déployons des règles de pare-feu et contactons Imagely.
15 décembre 2020 – Réponses imagely et nous fournissons une divulgation complète.
16 décembre 2020 – Imagely nous envoie une version corrigée du plugin à examiner.
17 décembre 2020 – Une version corrigée de NextGen Gallery est mise à la disposition du public.
13 janvier 2021 – Les sites exécutant la version gratuite de Wordfence reçoivent des règles de pare-feu.

Conclusion

Dans l’article d’aujourd’hui, nous avons couvert deux vulnérabilités dans NextGen Gallery, y compris un CSRF (Critical Severity Cross-Site Request Forgery) qui pourrait être utilisé pour prendre le contrôle d’un site via Remote Code Execution (RCE). Ces vulnérabilités ont été entièrement corrigées dans la version 3.5.0, et nous recommandons vivement aux propriétaires de sites de mettre immédiatement à jour vers la dernière version disponible pour le moment, à savoir la 3.5.0.

Wordfence Premium les utilisateurs ont reçu des règles de pare-feu protégeant contre ces vulnérabilités le 14 décembre 2020. Les sites exécutant toujours la version gratuite de Wordfence ont reçu ces règles le 13 janvier 2021.

Si vous connaissez un ami ou un collègue qui utilise ce plugin sur son site, nous vous recommandons vivement de lui transmettre cet avis pour aider à garder ses sites protégés car il s’agit de vulnérabilités critiques et de haute gravité qui peuvent conduire à une prise de contrôle complète du site.

Un merci spécial à l’analyste des menaces Chloe Chamberland, qui a aidé à analyser cette vulnérabilité, ainsi qu’à l’éditeur du plugin, Imagely, pour sa réponse rapide et professionnelle.


Source link