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

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *