Em outubro de 2026, dois fornecedores de plugins WordPress tiveram de avisar os clientes de que um canal de confiança tinha sido usado contra eles. Os atacantes entraram por ligações que os próprios donos dos sites tinham aprovado, por vezes sem saber. Este guia serve qualquer empresa com site ou loja online, seja em WordPress, WooCommerce, Shopify ou código próprio: mostra como listar os serviços que têm uma chave para o seu site, revogar as que já não fazem falta, renovar as restantes e o que exigir por escrito a fornecedores e agências.
O que aconteceu no incidente do UpdraftCentral
No aviso de incidente da TeamUpdraft, a empresa explica que detetou acesso não autorizado a teamupdraft.com no fim de semana de 17 e 18 de outubro e acredita que a base de dados de clientes foi lida. Continha nomes, endereços de email, palavras-passe em hash, definições de autenticação de dois fatores e as chaves de ligação do UpdraftCentral, UpdraftVault e UpdraftClone. Dados de cartão não eram guardados. O atacante usou a ligação aos sites dos clientes para criar contas de administrador e instalar plugins maliciosos, e mais tarde a TeamUpdraft alertou para um padrão de contas inesperadas com a função de editor. O UpdraftPlus 1.26.13 (gratuito) e 2.26.13 (Premium), publicados a 19 de outubro, desligam todas as ligações ao UpdraftCentral criadas antes das 13:07 (hora britânica) de 18 de outubro.
A análise da Patchstack explica por que as proteções habituais não serviram. Os comandos vinham assinados com chaves verdadeiras do painel, por isso passavam em todas as verificações do plugin. Um site ligado executa qualquer comando assinado com as permissões do utilizador que criou a ligação, e ninguém confirma comandos um a um. Muitos donos nunca escolheram isto: ao ligar uma conta TeamUpdraft.com, a caixa que adicionava o site ao UpdraftCentral vinha assinalada por omissão. As chaves também não expiravam, e a Patchstack viu chaves de novembro de 2025 a funcionar em outubro de 2026. As contas da porta das traseiras apareciam como editores, mas tinham as capacidades manage_options e install_plugins, pelo que uma revisão da lista de administradores não as mostrava.
O que aconteceu com o download do Rank Math PRO
Segundo o comunicado do Rank Math, a versão PRO 3.0.123 descarregada entre as 20:02 UTC de 15 de outubro e as 07:12 UTC de 16 de outubro continha malware. A 3.0.124 é a versão limpa, e a versão gratuita do WordPress.org não foi afetada. Quem ativou a versão infetada deve partir do princípio de que todos os segredos do site foram expostos e mudar: palavras-passe do WordPress, credenciais da base de dados, chaves e salts do wp-config.php, chaves dos gateways de pagamento, credenciais SMTP, outras chaves API, acessos ao alojamento, FTP e SSH, e rever a autenticação de dois fatores dos administradores.
Esta lista descreve bem o que um site guarda. O seu site guarda chaves para sistemas de terceiros, e sistemas de terceiros guardam chaves para o seu site. A auditoria cobre as duas direções. O contexto mais amplo está no nosso artigo sobre ataques à cadeia de fornecimento no WordPress em 2026.
Como saber quem tem acesso ao meu site
Reúna a lista a partir de três sítios: o próprio site (utilizadores, plugins ou apps, definições), as contas da empresa (faturas, gestor de palavras-passe, a caixa de email onde chegam as confirmações de registo) e a infraestrutura (DNS, CDN, painel do alojamento, repositório de código). Para cada entrada anote o serviço, o que pode fazer, quem criou a chave, onde está a chave nas duas pontas, quando foi usada pela última vez e quem na empresa é responsável. Uma entrada sem responsável é a primeira candidata a ser apagada.
Painéis de gestão de vários sites
UpdraftCentral, ManageWP, MainWP e Jetpack ligam-se ao site através de um componente instalado no WordPress: o UpdraftPlus traz o cliente do UpdraftCentral, o ManageWP usa o plugin ManageWP Worker e o MainWP o plugin MainWP Child. A outra metade das credenciais fica nos servidores do fornecedor ou num servidor da agência. Reveja a lista de plugins, incluindo o separador de plugins obrigatórios (must-use), e pergunte à sua agência que painéis utiliza. A lição da Patchstack vale para qualquer produto deste tipo: remover o site do painel não chega, porque a chave que conta está guardada no site.
Apps da loja e integrações com acesso à API
Na Shopify, abra as definições, a secção de apps, e clique em cada uma. Segundo a documentação da Shopify, a página da app mostra as áreas da loja que pode ver ou editar e a data da última atividade em cada área. As permissões não usadas nos últimos 30 dias aparecem numa subsecção própria de acesso não utilizado. O âmbito read_all_orders alarga o acesso para além da janela habitual de encomendas dos últimos 60 dias (âmbitos de acesso), por isso pergunte por que motivo a app precisa dele. Antes de desinstalar, exporte os dados de que precisa, porque algumas apps guardam dados que não podem ser recuperados depois.
No WooCommerce, as chaves estão nas definições do WooCommerce, em avançado, REST API. Cada chave está associada a um utilizador do WordPress e tem acesso de leitura, escrita ou ambos, e o segredo só é mostrado uma vez (documentação do WooCommerce). Verifique a quem pertence cada chave e se essa pessoa ainda trabalha consigo. O mesmo vale para as chaves de MB WAY ou Multibanco guardadas nas definições do plugin de pagamentos.
Palavras-passe de aplicação e contas técnicas
As palavras-passe de aplicação permitem que uma ferramenta entre na REST API com Basic Auth. Criam-se e revogam-se no ecrã de edição do utilizador. O núcleo do WordPress não limita o seu âmbito: o guia de integração refere essa limitação como desenvolvimento futuro, por isso uma palavra-passe de aplicação pode fazer tudo o que o seu utilizador pode. O WordPress regista a última utilização (com precisão de um dia) e o último endereço IP. Com WP-CLI:
wp user list --role=administrator
wp user list --role=editor
wp user application-password list 1 --fields=name,created,last_used,last_ipA lista de editores faz parte da revisão depois do caso UpdraftCentral, porque as contas da porta das traseiras tinham precisamente essa função.
Tokens de CDN e DNS
Um token com permissão de edição de DNS basta para desviar o domínio ou os registos de email. Na Cloudflare, um token API fica limitado às permissões e zonas escolhidas e pode ainda ser restringido por endereço IP e por prazo de validade (criar um token). A antiga Global API key tem acesso a todos os recursos do utilizador com as permissões completas dele, e a Cloudflare desaconselha-a em novas configurações (Global API key). Se um plugin, um processo de CI ou um script de limpeza de cache ainda a usa, substitua-a por um token limitado a uma zona.
Chaves de implementação no GitHub
Uma chave de implementação (deploy key) do GitHub é uma chave SSH com acesso a um único repositório. Por omissão só lê, e com permissão de escrita pode fazer o mesmo que um membro da organização com acesso de administrador. Segundo a documentação do GitHub, estas chaves não têm data de expiração, normalmente não têm frase-passe e continuam ativas quando a pessoa que as adicionou é removida do repositório. Reveja-as nas definições do repositório, na secção de chaves de implementação: apague as que não reconhece e aprove as válidas.
Chaves de pagamento, email e cópias de segurança
A Stripe permite criar chaves restritas com as permissões que escolher, e ao rodar uma chave no painel decide quando expira a antiga: de imediato ou após um prazo que dá tempo à integração para mudar (chaves API da Stripe). A palavra-passe SMTP ou a chave API do serviço de email está num plugin ou no wp-config.php; onde exatamente, mostramos no guia de SMTP.
Uma cópia de segurança contém a base de dados completa, com dados de clientes e todas as chaves guardadas nas definições. A TeamUpdraft desligou todos os sites do UpdraftVault e emitiu novas credenciais, e recomendou aos sites acedidos através do UpdraftCentral que voltassem a autorizar o armazenamento remoto (Google Drive, Dropbox, Amazon S3) e mudassem as chaves de acesso. Verifique quem pode ler o armazenamento das cópias e se a ferramenta de cópias pode apagar versões antigas.
Lista de verificação de acessos ao site e à loja
| Tipo de serviço | Onde está a chave | Como revogar | Quando renovar |
|---|---|---|---|
| Painel de gestão (UpdraftCentral, ManageWP, MainWP, Jetpack) | Definições do plugin de ligação no site e painel do fornecedor ou da agência | Apagar primeiro a chave no site, depois o site do painel | Incidente no fornecedor, mudança de agência, painel sem uso |
| App Shopify | Permissões da app nas definições da loja | Exportar dados, desinstalar a app | Acesso não utilizado, incidente no fornecedor, app dispensável |
| Chave REST API do WooCommerce | Definições do WooCommerce, associada a um utilizador WordPress | Ligação de revogação junto à chave | Saída do utilizador associado, troca de integração |
| Palavra-passe de aplicação do WordPress | Perfil do utilizador, guardada em hash | Revogar no perfil ou com WP-CLI | Sem uso desde a última auditoria, saída da pessoa, intrusão |
| Token de CDN ou DNS (Cloudflare) | Conta Cloudflare e a ferramenta que chama a API | Apagar o token no perfil Cloudflare | Token visto em logs ou repositório, saída de pessoa ou ferramenta |
| Chave de implementação (GitHub) | Chave privada no servidor, pública nas definições do repositório | Apagar na secção de chaves de implementação | Servidor reconstruído ou comprometido, mudança de agência |
| Chave de pagamento (Stripe, MB WAY, Multibanco) | Definições do plugin da loja ou variáveis de ambiente | Rodar com prazo de expiração para a chave antiga | Intrusão, fim da colaboração com o programador |
| Chave de email ou SMTP | Plugin SMTP, wp-config.php, variáveis de ambiente | Apagar a chave no fornecedor de email | Intrusão, troca de plugin ou fornecedor |
| Credenciais do armazenamento de cópias | Definições do plugin de cópias e permissões no fornecedor de armazenamento | Revogar no fornecedor e voltar a autorizar | Incidente no fornecedor, intrusão |
Como revogar uma chave API sem parar o site
Num site saudável, siga esta ordem: descubra o que usa a chave (descrição, última utilização, registos da ferramenta), crie uma substituta com permissões mais estreitas, coloque-a na ferramenta e confirme que funciona, e só então revogue a antiga. Durante alguns dias, vigie encomendas falhadas, emails em falta e implementações interrompidas. O prazo de expiração da Stripe existe precisamente para esta troca.
Num site comprometido, a ordem inverte-se: revogue primeiro e volte a ligar depois as integrações que pararem. As instruções da TeamUpdraft para utilizadores do UpdraftCentral seguem essa lógica: entrar diretamente em cada site, atualizar, apagar a chave de ligação, remover contas e plugins desconhecidos, mudar as palavras-passe de administrador e só depois voltar a ligar. Se a chave tem duas pontas, revogue nas duas. Uma chave apagada apenas no painel do fornecedor pode continuar a ser aceite pelo site, e uma chave apagada apenas no site pode continuar na base de dados do fornecedor.
Quando renovar chaves API
Renove quando algo acontece, porque um calendário sozinho não teria ajudado ninguém em outubro de 2026. Vale a pena escrever nos procedimentos:
- um incidente de segurança num fornecedor que tem uma chave para o seu site ou recebe uma dele,
- código malicioso que correu no site, ou seja, tudo o que está na lista do Rank Math acima,
- a saída de um colaborador, freelancer ou agência com acesso,
- uma chave encontrada onde não devia estar: num repositório, num pedido de suporte, numa troca de emails, numa captura de ecrã,
- a substituição de uma integração por outra ferramenta.
Junte uma revisão fixa por ano e apague todas as chaves que ninguém sabe explicar. Chaves sem data de expiração, como as chaves de implementação do GitHub ou as chaves do UpdraftCentral que a Patchstack analisou, continuam válidas até alguém as remover.
O que exigir à agência e aos fornecedores de software
Uma agência que mantém o seu site cria chaves em seu nome. O Decreto-Lei n.º 125/2025, que transpõe a NIS2 e reforça o CNCS como autoridade nacional de cibersegurança, dedica o artigo 28.º à cadeia de abastecimento, incluindo as relações de cada entidade com os seus fornecedores e prestadores de serviços diretos. Mesmo que a sua empresa não esteja abrangida, estes pontos devem constar do contrato:
- um registo de todas as chaves, tokens e contas que a agência cria, com finalidade e responsável, entregue a pedido e no fim do contrato,
- chaves criadas nas suas próprias contas sempre que a plataforma o permita, por exemplo um token Cloudflare na sua conta limitado à sua zona, para que a revogação não dependa da agência,
- uma chave por site e por ferramenta, e contas nominais em vez de um login partilhado da agência,
- revogação de todos os acessos num número de dias acordado após o fim do contrato, confirmada por escrito,
- um prazo de notificação de incidentes. Uma agência com acesso a dados de clientes é em regra subcontratante, por isso precisa de um contrato nos termos do artigo 28.º do RGPD. Pelo artigo 33.º do RGPD, o subcontratante notifica o responsável sem demora injustificada, e o responsável tem 72 horas, sempre que possível, para notificar a CNPD. Escreva um número concreto de horas no contrato.
Antes de instalar software com funções remotas, pergunte ao fornecedor se a ligação remota vem ativa por omissão e se as chaves expiram. No UpdraftCentral, a Patchstack encontrou uma caixa já assinalada e chaves sem prazo de validade.
Fazemos esta revisão no âmbito da auditoria de segurança WordPress e mantemos o registo de chaves atualizado na manutenção de sites WordPress. Em lojas WooCommerce faz parte do plano de fiabilidade da loja, e em lojas Shopify revemos as permissões das apps no trabalho de desenvolvedor Shopify. Para perceber como as atualizações de plugins chegam ao site e onde uma versão adulterada pode passar, leia sobre o atraso de atualizações no WordPress.org e sobre quatro backdoors em plugins num mês.







