Um comunicado foi publicado sobre uma vulnerabilidade descoberta no Membership Plugin By StellarWP que expõe dados confidenciais de configuração de pagamento do Stripe em sites WordPress usando o plugin. A falha permite que invasores não autenticados lancem ataques e é classificada como 8,2 (Alta).
Plug-in de associação por StellarWP
O Membership Plugin – Restrict Content By StellarWP é usado por sites WordPress para gerenciar conteúdo pago e privado. Ele permite que os proprietários de sites restrinjam o acesso a páginas, postagens ou outros recursos para que apenas usuários logados ou membros pagantes possam visualizá-los e gerenciar o que os visitantes não pagantes do site podem ver. O plug-in é comumente implantado em sites baseados em assinaturas e membros.
Vulnerável a invasores não autenticados
O comunicado do Wordfence afirma que a vulnerabilidade pode ser explorada por invasores não autenticados, o que significa que nenhum login ou conta de usuário do WordPress é necessário para lançar um ataque. As funções de permissão do usuário não levam em consideração se o problema pode ser acionado, e é isso que torna essa vulnerabilidade específica mais perigosa porque é mais fácil de acionar.
Qual é a vulnerabilidade
O problema decorre da falta de verificações de segurança relacionadas ao processamento de pagamentos do Stripe. Especificamente, o plug-in não conseguiu proteger adequadamente os dados do Stripe SetupIntent.
Um Stripe SetupIntent é usado durante a finalização da compra para coletar e salvar a forma de pagamento de um cliente para uso futuro. Cada SetupIntent inclui um valor client_secret que deve ser compartilhado durante uma finalização de compra ou fluxo de configuração de conta.
O oficial Assessoria Wordfence explica:
“O plugin Membership Plugin – Restrict Content para WordPress é vulnerável à falta de autenticação em todas as versões até, inclusive, 3.2.16 por meio da função 'rcp_stripe_create_setup_intent_for_saved_card' devido à falta de verificação de capacidade.
Além disso, o plug-in não verifica uma chave controlada pelo usuário, o que permite que invasores não autenticados vazem valores stripe SetupIntent client_secret para qualquer associação.”
De acordo com a documentação oficial do Stripe, a API Setup Intents é usada para configurar um método de pagamento para cobranças futuras sem criar um pagamento imediato. Um SetupIntent inclui um client_secret. A documentação do Stripe afirma que os valores client_secret não devem ser armazenados, registrados ou expostos a ninguém que não seja o cliente pretendido.
É assim que Stripe documentação explica qual é o propósito da API Setup Intents:
“Use a API Setup Intents para configurar um método de pagamento para pagamentos futuros. É semelhante a um pagamento, mas nenhuma cobrança é criada.
O objetivo é ter as credenciais de pagamento salvas e otimizadas para pagamentos futuros, ou seja, a forma de pagamento está configurada corretamente para qualquer cenário. Ao configurar um cartão, por exemplo, pode ser necessário autenticar o cliente ou verificar a validade do cartão junto ao banco do cliente. Stripe atualiza o objeto SetupIntent durante todo esse processo.”
A documentação do Stripe também explica que os valores client_secret são usados no lado do cliente para concluir ações relacionadas ao pagamento e devem ser transmitidos com segurança do servidor para o navegador. Stripe afirma que esses valores não devem ser armazenados, registrados ou expostos a ninguém que não seja o cliente relevante.
É assim que Stripe documentação explica o valor client_secret:
“client_secret
O segredo do cliente desta Sessão do Cliente. Usado no cliente para configurar o acesso seguro a um determinado cliente.O segredo do cliente pode ser usado para fornecer acesso aos clientes do seu front-end. Não devem ser armazenados, registrados ou expostos a ninguém que não seja o cliente relevante. Certifique-se de ter o TLS ativado em qualquer página que inclua o segredo do cliente.”
Como o plug-in não impôs as proteções apropriadas, os valores client_secret do Stripe SetupIntent podem ser expostos.
O que isso significa na vida real é que os dados de configuração de pagamento do Stripe associados às assinaturas estavam acessíveis além do escopo pretendido.
Versões afetadas
A vulnerabilidade afeta todas as versões do plugin até a versão 3.2.16 inclusive. O Wordfence atribuiu ao problema uma pontuação CVSS de 8,2, refletindo a sensibilidade dos dados expostos e o fato de que nenhuma autenticação é necessária para desencadear o problema.
Uma pontuação nesta faixa indica uma vulnerabilidade de alta gravidade que pode ser explorada remotamente sem acesso especial, aumentando a importância de atualizações oportunas para sites que dependem do plug-in para gerenciar assinaturas pagas ou conteúdo restrito.
Disponibilidade de patches
O plugin foi atualizado com um patch e já está disponível. O problema foi corrigido na versão 3.2.17 do plugin. A atualização adiciona verificações de permissão e nonce ausentes relacionadas ao tratamento de pagamentos Stripe, abordando as condições que permitiram a exposição dos valores SetupIntent client_secret. Um nonce é um token de segurança temporário que garante que uma ação específica em um site WordPress foi solicitada intencionalmente pelo usuário e não por um invasor mal-intencionado.
O plugin oficial de associação registro de alterações divulga com responsabilidade as atualizações:
“3.2.17
Segurança: Adicionadas verificações de permissão e nonce para adicionar métodos de pagamento Stripe.
3.2.16
Segurança: Melhor escape e higienização para atributos de shortcode (restrict) e (register_form).
O que os proprietários de sites devem fazer
Sites que usam Membership Plugin – Restrict Content devem ser atualizados para a versão 3.2.17 ou mais recente.
A falha na atualização do plug-in deixará os dados client_secret do Stripe SetupIntent expostos a invasores não autenticados.
Imagem em destaque por Shutterstock/file404