🎉 USE O CUPOM DESCONTO.FULL | 20% OFF acima de R$ 50,00

Como corrigir API REST do WordPress exposta

Time Full Services Time Full Services
Tipo Seguranca
Nome do erro API REST do WordPress exposta EN: Exposed WordPress REST API
Severidade Grave
Descrição A API REST exposta no WordPress é o problema de a rota /wp-json/wp/v2/users listar publicamente os nomes de usuário do site, entregando ao invasor metade do par login-senha. Corrigir significa restringir esse endpoint e os dados sensíveis sem desligar a REST API, que muitos recursos do site usam.

O que é a API REST exposta no WordPress?

A API REST do WordPress é a interface em /wp-json/ que o editor de blocos, plugins e apps usam para ler e gravar dados. O problema de segurança não é a API existir, e sim ela expor informação sensível sem autenticação. A rota /wp-json/wp/v2/users lista os nomes de usuário (logins) de quem já publicou no site, e /wp-json/wp/v2/ revela quais plugins registram endpoints. Com os logins em mãos, o atacante só precisa quebrar a senha por força bruta. A correção certa é restringir as rotas que vazam dados, mantendo o resto da REST API funcionando, e não bloquear tudo, o que quebraria o editor e vários plugins.

Como identificar

  • Abrir “seudominio.com/wp-json/wp/v2/users” no navegador retorna um JSON com os nomes de usuário do site.
  • O scanner de segurança aponta “User Enumeration via REST API” ou “REST API users endpoint exposed”.
  • No log, requisições repetidas a /wp-json/wp/v2/users coincidem com picos de tentativas de login.
  • A rota “/wp-json/” lista publicamente todos os namespaces de plugins instalados no site.
Antes de começar: Não desative a REST API inteira para resolver isso. O editor de blocos, vários plugins e o app oficial dependem dela; bloquear tudo quebra o painel e funções do site. Restrinja apenas as rotas que vazam dados e teste o editor após aplicar.

Como prevenir

  • Mantenha a rota /wp/v2/users restrita a usuários autenticados e bloqueie /?author=N para anônimos
  • Declare permission_callback em todo endpoint REST customizado de plugins próprios
  • Use um WAF que limite requisições anônimas às rotas sensíveis e detecte enumeração de usuários

Causa

  • A rota /wp/v2/users da REST API lista nomes de usuário publicamente por padrão, sem exigir autenticação.
  • Enumeração de usuários também possível por /?author=1, que redireciona e revela o slug do login.
  • Endpoints de plugins mal escritos que retornam dados sensíveis sem checar permissão (permission_callback).
  • A rota índice /wp-json/ expõe todos os namespaces, mapeando os plugins instalados para o atacante.
  • Falta de um WAF ou regra que limite o acesso anônimo às rotas que vazam informação.

Como resolver

  1. Confirme a exposição: abra seudominio.com/wp-json/wp/v2/users no navegador. Se retornar a lista de usuários em JSON, a enumeração via REST está aberta e precisa ser restringida.
  2. Restrinja a rota de usuários por código: no functions.php do tema-filho ou em um plugin de snippets, filtre o endpoint /users para exigir autenticação, devolvendo erro a quem não estiver logado.
  3. Bloqueie a enumeração por author: barre o acesso a /?author=N para visitantes anônimos, evitando que o slug do login vaze pela URL do autor.
  4. Revise os endpoints dos seus plugins: garanta que todo endpoint customizado declare um permission_callback. Endpoint sem checagem de permissão é o vetor mais comum de vazamento de dados pela REST.
  5. Adicione uma camada de WAF: configure o firewall/WAF para limitar requisições anônimas às rotas sensíveis da REST API e bloquear padrões de enumeração de usuários.
PHP
// Exige autenticacao na rota /wp/v2/users e bloqueia enumeracao por author
// (functions.php do tema-filho ou plugin de snippets)
add_filter( 'rest_endpoints', function ( $endpoints ) {
    if ( isset( $endpoints['/wp/v2/users'] ) ) {
        unset( $endpoints['/wp/v2/users'] );
    }
    if ( isset( $endpoints['/wp/v2/users/(?P<id>[d]+)'] ) ) {
        unset( $endpoints['/wp/v2/users/(?P<id>[d]+)'] );
    }
    return $endpoints;
} );

// Bloqueia a enumeracao classica por /?author=N para visitantes anonimos
add_action( 'template_redirect', function () {
    if ( ! is_user_logged_in() && isset( $_GET['author'] ) ) {
        wp_safe_redirect( home_url(), 301 );
        exit;
    }
} );

Perguntas frequentes

Posso simplesmente desativar a REST API inteira do WordPress?
Não é recomendado. O editor de blocos, o app oficial e muitos plugins dependem da REST API para funcionar. Desligar tudo quebra o painel e recursos do site. O certo é restringir só as rotas que vazam dados, como /wp/v2/users, mantendo o resto ativo.
Por que a rota /wp-json/wp/v2/users é um risco?
Ela lista publicamente os nomes de usuário (logins) de quem publicou no site. Com o login em mãos, o atacante já tem metade do par login-senha e só precisa quebrar a senha por força bruta. Restringir essa rota tira do invasor essa informação de partida.
Bloquear /users na REST resolve a enumeração de usuários?
Resolve a via REST, mas não a via /?author=N, que também revela o slug do login pela URL do autor. Por isso a correção completa bloqueia as duas: a rota /wp/v2/users e o acesso anônimo a /?author=N. Cobrir só uma deixa a outra aberta.
Como sei se a API REST do meu site está exposta?
Abra seudominio.com/wp-json/wp/v2/users no navegador. Se aparecer um JSON com a lista de usuários, a enumeração está aberta. Um scanner de segurança também sinaliza "User Enumeration via REST API" quando detecta essa exposição.
Restringir a REST API quebra o editor de blocos?
Não, se você restringir só as rotas sensíveis. O editor usa outras rotas da REST (posts, mídia, blocos) que continuam funcionando. Remover apenas /wp/v2/users do acesso anônimo não afeta o editor; só teste após aplicar para confirmar.
Endpoints de plugins também podem vazar dados pela REST?
Sim. Um endpoint customizado sem permission_callback retorna dados a qualquer um, sem checar permissão. É um vetor comum de vazamento. Revise os plugins próprios para garantir que toda rota registrada valide a permissão antes de responder.

Seja PRO.

Tenha acesso a snippets de código premium — PHP, JavaScript, CSS e HTML prontos para usar em seus projetos.

Conhecer o plano Pro →

Uma nova era para o WordPress.

A FULL Services redefine o CMS com uma arquitetura modular que transforma o WordPress em um motor de crescimento digital. 

Painéis personalizados

Um novo nível de controle para o WordPress. Acompanhe métricas, automações e evolução do seu site em um único painel visual.

A força por trás de grandes marcas

Para agências, estúdios e profissionais independentes que desejam oferecer soluções de alto nível com sua própria marca.

Componentes

Hero Sections

30 componentes

Seções de CTA

14 componentes

Login

14 componentes

Blog

14 componentes

Cabeçalhos

24 componentes

Seções de FAQ

53 componentes

Cadastro

53 componentes

Blog individual

53 componentes

Rodapés

28 componentes

Seções de contato

27 componentes

Seções de preços

27 componentes

Faixas

27 componentes

Portfólio

16 componentes

Seções de equipe

12 componentes

Números

12 componentes

Logotipos

12 componentes