Você cuida de 40 sites WordPress. O wp2shell custou quantas horas do seu fim de semana?
Quando um exploit público de WordPress aparece numa sexta-feira à noite, a agência com inventário responde em minutos e a agência sem inventário perde o fim de semana. Veja a conta em horas, o roteiro de triagem e como transformar isso em serviço cobrável.
Sexta-feira, 17 de julho, 21h. O WordPress publica correção de emergência para dois CVEs encadeados que dão execução de código sem autenticação. Antes de amanhecer, o exploit está público e a varredura em massa começou.
Você atende 40 clientes. Trinta e poucos são WordPress. E a pergunta que decide o seu fim de semana é a mais simples possível:
Quais deles estão nas versões afetadas?
Se você levou mais de dez minutos pra responder, esse post é sobre a sua operação — não sobre segurança de WordPress.
A conta em horas
Sem inventário, o roteiro é:
- Abrir a lista de clientes em algum lugar (planilha, Notion, memória).
- Pra cada um: achar credencial, entrar no painel ou no cPanel, ver a versão.
- Anotar quem está exposto.
- Atualizar, testar se o tema quebrou, avisar o cliente.
Uns 15 minutos por site quando dá tudo certo. Com credencial errada, 2FA no meio, hospedagem lenta e um cliente que trocou de servidor sem avisar, chega fácil a 25.
35 sites × 20 minutos = quase 12 horas. Um fim de semana inteiro, contando o café e a irritação.
E o pior nem é o tempo: é que as primeiras seis horas dessas doze foram gastas descobrindo o que você já deveria saber. A atualização em si leva dois minutos por site.
O roteiro de triagem, se você precisar dele hoje
Se você tem acesso SSH ou WP-CLI ao parque, isso resolve o levantamento em um comando por site. Vale montar mesmo que você adote ferramenta depois — parque sem inventário é dívida operacional que vence sempre no pior dia.
# lista.txt = um caminho de instalação por linha
while read -r path; do
ver=$(wp core version --path="$path" 2>/dev/null)
printf '%s\t%s\n' "$ver" "$path"
done < lista.txt | sort
Versões abaixo de 6.9.5 (linha 6.9) ou 7.0.2 (linha 7.0) entram na fila. E o SQL injection sozinho ainda pega toda a linha 6.8.0–6.8.5.
Se o acesso é só HTTP, dá pra fazer de fora — que é, aliás, exatamente o que o atacante faz:
while read -r host; do
v=$(curl -s --max-time 8 "https://$host/" | grep -o 'content="WordPress [0-9.]*"' | head -1)
printf '%s\t%s\n' "$host" "${v:-nao-exposta}"
done < dominios.txt
Sites que devolvem nao-exposta não estão seguros — só não te contaram. Precisam de checagem manual.
Depois do levantamento, cada site afetado precisa da triagem de comprometimento: conta de administrador criada a partir de 17 de julho, plugin que ninguém instalou, .php dentro de wp-content/uploads/, tarefa cron desconhecida. O passo a passo completo está no post sobre o wp2shell.
Por que a agência é o alvo mais rentável
Duas coisas que aconteceram em julho contam a mesma história.
O wp2shell atingiu o core — ou seja, todo mundo, inclusive o cliente cujo site é uma landing page de cinco seções sem plugin nenhum.
E o WP-SHELLSTORM, campanha revelada quando pesquisadores expuseram um servidor dos atacantes, mostrou a rotina do outro lado: um conjunto de ferramentas automatizadas varrendo em busca de vulnerabilidades conhecidas de plugins populares, plantando web shells persistentes e backdoors em milhares de sites. Nada de sofisticação — inventário deles contra a falta de inventário nosso.
Repare no padrão. O atacante trabalha em escala porque ele tem lista. A agência apanha porque a lista dela está espalhada em 40 painéis diferentes.
Só que a agência tem uma vantagem estrutural que o cliente final não tem: ela já é a lista. Falta transformá-la em ativo.
Do reativo pro cobrável
Aqui a coisa fica interessante comercialmente. As mesmas 12 horas que você queimou de graça no fim de semana são, com processo, um serviço recorrente com margem alta.
Reativo (o que aconteceu): você descobriu o problema pelo Twitter, correu atrás, resolveu, não cobrou, e o cliente nem soube que existiu risco. Zero receita, zero percepção de valor, e o desgaste é todo seu.
Cobrável (o que dá pra montar): o cliente recebe todo mês um relatório com a marca da sua agência dizendo o que foi verificado, o que estava exposto, o que você corrigiu e qual é a nota atual. Quando aparece um CVE crítico, ele recebe de você o aviso de que o site dele foi verificado e está coberto — no mesmo dia da notícia, não uma semana depois.
A diferença entre os dois não é competência técnica. É ter o inventário e o registro.
Fizemos a conta completa de precificação e margem em receita recorrente para agências. O resumo: monitoramento e segurança sustentam mensalidade por site com margem que projeto pontual não alcança, porque o custo marginal do 41º site é quase zero.
O que a gente montou pra esse caso
O plano Agência do Sentinela nasceu desse cenário. O que muda na prática:
Parque num lugar só. Até 400 monitores e auditorias ilimitadas na conta, com um workspace separado por cliente. A versão de WordPress, os plugins detectados e as versões de cada um ficam registrados como inventário — não como print de relatório.
Reavaliação diária sem tocar nos sites. O feed de vulnerabilidades de WordPress sincroniza todo dia e é cruzado com o inventário do parque inteiro. Isso não gera requisição nos sites dos clientes: é banco contra banco. Quando um CVE relevante atinge algo que você hospeda, o alerta sai pelos canais configurados — e-mail, Slack, Discord, Telegram, webhook. O mecanismo está detalhado em do patch ao exploit em massa.
Relatório com a sua marca. White-label incluso no plano Agência: o cliente vê o seu logo, não o nosso. O construtor de relatórios monta o PDF com as seções que você escolher — postura de segurança, uptime do período, performance —, e o que aparece na tela do construtor é literalmente o que sai no PDF.
API de leitura. Se você já tem painel próprio ou usa Notion/ClickUp pra operação, a API pública devolve os dados por workspace. Dá pra montar a sua própria tabela "quem está desatualizado" e colar onde o time olha.
Histórico de 2 anos. Quando o cliente perguntar em janeiro "vocês verificaram isso em julho?", a resposta tem data e evidência.
Preço: R$ 399/mês pro plano Agência. Em parque de 40 sites, dá R$ 10 por site por mês. A comparação relevante não é com a ferramenta mais barata — é com as 12 horas do último fim de semana.
Onde a honestidade entra
Duas coisas que ferramenta externa nenhuma resolve, e é melhor você saber antes de vender:
Detecção de intruso já dentro do WordPress não acontece de fora. Conta de administrador plantada, plugin falso no disco, cron malicioso — nada disso é visível pra quem observa pela internet, incluindo a gente. Isso é WP-CLI, acesso ao servidor e olho humano. O Sentinela vê o inventário, a superfície exposta e o sintoma do comprometimento (spam injetado, redirecionamento, cloaking pro Googlebot), não o arquivo PHP plantado.
Atualizar continua sendo trabalho seu. A gente diz quem está exposto e com que urgência. Quem aperta o botão, testa o tema e conversa com o cliente é a agência. Ferramenta que promete "atualização automática segura" em parque de tema customizado está te vendendo um problema pra depois.
O que muda com inventário não é a existência do trabalho. É a ordem: você começa pela lista dos 6 sites afetados às 9h de sábado, em vez de descobrir quem são eles até as 15h.
Um exercício de dez minutos
Independentemente de ferramenta, faça isso ainda esta semana:
- Liste todos os domínios que você administra. Todos — inclusive o do cliente que sumiu e o site institucional que você fez em 2019 e nunca mais tocou.
- Ao lado de cada um, anote a versão do WordPress. Se você não conseguir, marque "não sei".
- Conte quantos "não sei" ficaram.
Esse número é o seu tempo de resposta no próximo wp2shell. E vai ter próximo.
Se quiser que essa lista se mantenha sozinha, veja o plano Agência. O plano Free é grátis pra sempre, sem cartão: dá pra colocar os primeiros domínios de cliente e ver o inventário antes de decidir qualquer coisa.
Fontes
Descubra em 30 segundos o que o seu domínio está mostrando.
Checagem passiva, sem tocar no seu servidor. Sai nota e lista de achados por gravidade — e você decide se quer acompanhar todo mês.