flawopen.com/Incidents/wordpress-stored-xss-admin-session-campaign-october-2026
Campanha de XSS armazenado no WordPress: dois plugins, uma cadeia de persistência
A Patchstack observou tentativas de usar o mesmo implante pós-exploração por meio de duas falhas de XSS armazenado no WordPress. Atualize os dois plugins e investigue persistência; a correção não limpa um site já comprometido.[1], [2], [3], [4], [5]
Imagine duas caixas públicas de sugestões cujos bilhetes são lidos depois pelo administrador do site. Se o site guardar um bilhete como marcação executável em vez de exibi-lo como texto, ele poderá agir com os privilégios do navegador do administrador quando for aberto. O relatório da campanha diz que duas falhas distintas de plugins foram usadas como pontos de entrada, seguidas por tentativas de manter o acesso após uma atualização.[1], [8], [9]
Conceitos Centrais e Termos
XSS armazenado- Texto controlado por um atacante é salvo e depois exibido no navegador como marcação executável. Aqui, o contexto importante era a área administrativa do WordPress.[2], [3], [8], [9]
Sessão de mesma origem- O navegador envia automaticamente a sessão do site em solicitações de mesma origem. Um script já executado nesse site pode agir pela página sem ler um cookie HttpOnly.[1], [17], [18]
Persistência- Acesso que continua após a correção da falha inicial, por exemplo, contas ou arquivos não autorizados. Uma atualização limpa não remove essas alterações.[1]
Atribuição do CVSS- Os registros CNA da Wordfence atribuem CVSS 3.1 7,2 a cada CVE. A Patchstack mostra 7,1 em seu aviso do WPC Product Bundles; este artigo usa a pontuação do registro CVE e mantém a atribuição da fonte.[2], [3], [6]
Referências ao código-fonte- As referências da CNA da Wordfence apontam arquivos versionados do WPC Product Bundles e do Ninja Forms relacionados à validação, ao armazenamento e à exibição administrativa. São pistas para consulta, não um diff de correção verificado. O par PHP acima é um modelo ilustrativo de codificação de saída, não código reconstruído dos plugins.[8], [9], [10], [11], [12], [13], [14], [15], [16]
Mapeamentos de frameworks
- Referência CWE para a fraqueza descrita neste guia: CWE-79
- OWASP Top 10:2025 — A05:2025 Injection
Linha do Tempo do Incidente
A Patchstack relata tentativas com a mesma etapa pós-exploração, primeiro pelo WPC Product Bundles e depois pelo Ninja Forms. A Patchstack publicou a análise em 6 de outubro.[1]
Fluxo de Ataque Passo a Paso
Conteúdo armazenado chega a um administrador
Os dados enviados são salvos e depois exibidos em uma tela administrativa de pedido ou envio de formulário. Se o tratamento inseguro da saída permitir execução como marcação, a visita do administrador fornece o contexto do navegador.[1], [8], [9], [10], [11], [12], [13], [14]
Código-Fonte: Vulnerável vs. Seguro
Esta é a alteração no código-fonte de Textarea::admin_form_element() do Ninja Forms, não um modelo genérico. A versão 3.15.3 inseria diretamente o texto armazenado da submissão no corpo HTML de um textarea; a 3.15.4 aplica esc_textarea() antes da saída. Isso impede que o conteúdo seja interpretado como marcação nesse contexto. O exemplo documenta apenas o caminho do Ninja Forms para CVE-2026-94504; não é a correção do WPC Product Bundles para CVE-2026-93836. Use escape específico para cada contexto nos demais casos.[13], [15], [16]
public function admin_form_element( $id, $value )
{
return "<textarea class='widefat' name='fields[$id]'>$value</textarea>";
}public function admin_form_element( $id, $value )
{
return "<textarea class='widefat' name='fields[$id]'>" . esc_textarea( $value ) . "</textarea>";
}Lista de Verificação de Segurança para Engenharia
- ✓Atualize WPC Product Bundles para pelo menos 8.6.7 para corrigir
CVE-2026-93836; na verificação de 2026-10-11, WordPress.org listava 8.7.4 como atual. O changelog da 8.7.3 também menciona reforço contra XSS armazenado sem vinculá-lo a esta CVE; instale a versão atual. Atualize Ninja Forms para pelo menos 3.15.4 para corrigirCVE-2026-94504; na verificação de 2026-10-11, WordPress.org listava 3.15.5 como atual. O changelog da 3.15.5 acrescenta proteção contra XSS armazenado em envios do campo Paragraph Text (Rich Text), separada da correção da CVE na 3.15.4. Verifique as versões instaladas dos dois plugins em todos os sites de produção.[2], [3], [4], [5] - ✓Se uma versão vulnerável ficou exposta, investigue antes de declarar a recuperação: compare as contas administrativas no banco com o painel e revise plugins inesperados, inclusive must-use.[1]
- ✓Examine logs web, WordPress e hospedagem em busca de ações administrativas, instalações de plugins e alterações inesperadas durante a visualização de pedidos ou envios.[1]
- ✓Orientação operacional da FlawOpen: Remova acessos não autorizados com um processo confiável de resposta a incidentes; após a contenção, troque credenciais privilegiadas e salts de autenticação do WordPress e revise outros segredos acessíveis.
- ✓Orientação operacional da FlawOpen: Mantenha um backup íntegro e valide banco de dados, arquivos de plugins e checkout/formulários antes de restaurar o serviço; atualizar a versão não prova que a persistência foi removida.
Fontes
- Patchstack — Four ways back in: the WordPress XSS campaign that hides its own admin account (2026-10-06)
- CVE-2026-93836 — CVE record (Wordfence CNA)
- CVE-2026-94504 — CVE record (Wordfence CNA)
- WPC Product Bundles for WooCommerce — WordPress.org changelog
- Ninja Forms — WordPress.org changelog
- Patchstack — WPC Product Bundles advisory
- NCSA Qatar — Cybersecurity advisories (October 7, 2026)
- Wordfence CNA — CVE-2026-93836 vulnerability record
- Wordfence CNA — CVE-2026-94504 vulnerability record
- CVE-2026-93836 — WPC Product Bundles 8.6.5 source pointer: class-woosb.php
- CVE-2026-93836 — WPC Product Bundles 8.6.5 source pointer: class-backend.php
- CVE-2026-94504 — Ninja Forms 3.15.3 source pointer: Submission.php
- CVE-2026-94504 — Ninja Forms 3.15.3 source pointer: Textarea.php
- CVE-2026-94504 — Ninja Forms 3.15.3 source pointer: admin submission template
- Ninja Forms 3.15.3 to 3.15.4 changeset referenced by CVE-2026-94504
- Correção no código do Ninja Forms 3.15.4 — Textarea::admin_form_element()
- MDN — Política de mesma origem