← volver
CVE-2019-9978mediumbajo ataqueCWE-79

CVE-2019-9978

100Vexday Risk Score

Corrige ahora. Ella está bajo explotación confirmada por CISA y tiene exploit funcional público.

ssvc Actcvss 6.1epss 73%
de la publicación al arma1 días
Publicada en NVD24 mar
1ª PoC+1d
CISA KEV+955d
probabilidad de explotación
73%top 1% de las CVE
explotación observada
CISA + VulnCheck
33 exploit(s) público(s)
Acción exigida por CISAplazo federal: 2022-05-03

Apply updates per vendor instructions.

Resumen

Falha de Cross-Site Scripting (XSS) armazenado no plugin Social Warfare para WordPress (e sua variante Pro), presente em uma função de depuração acessível sem autenticação via wp-admin/admin-post.php. O endpoint aceita um parâmetro swp_url que o plugin busca e grava como configuração do site sem sanitização, permitindo injetar JavaScript persistente que executa no contexto de qualquer visitante — incluindo administradores logados. Foi explorada em massa em março de 2019 antes da divulgação pública, está no catálogo KEV da CISA, e o CVSS 6.1 subestima o risco prático: é pré-autenticação, automatizável e afetou site com dezenas de milhares de instalações ativas.

Detalle técnico

A causa raiz (CWE-79, XSS armazenado) está numa rotina de depuração do plugin, acionada pelo parâmetro swp_debug=load_options no endpoint wp-admin/admin-post.php. Essa rotina recebe outro parâmetro, swp_url, faz uma requisição para a URL informada e trata o conteúdo retornado como um array de opções de configuração do plugin (campos como 'twitter_id', usados para atribuição de autoria em compartilhamentos), gravando-o diretamente no banco de dados do WordPress sem qualquer sanitização ou escaping.

Como o admin-post.php é registrado no WordPress para aceitar requisições tanto de usuários autenticados quanto não autenticados (dependendo de como a action é gravada), e a função de debug não valida sessão nem nonce, o atacante controla integralmente o conteúdo remoto buscado — ele hospeda um payload (por exemplo, num paste público) contendo um valor como '">...' dentro do campo esperado e o plugin importa esse valor como configuração legítima.

O payload armazenado é depois renderizado sem escaping nas páginas que exibem os botões de compartilhamento social (front-end) e possivelmente em telas administrativas do plugin, disparando execução de JavaScript arbitrário no navegador de qualquer visitante ou administrador que carregue a página afetada. Por ser armazenado (não refletido), um único disparo compromete o site persistentemente até a limpeza manual da opção corrompida.

Cómo se explota

O vetor é uma única requisição HTTP GET não autenticada para /wp-admin/admin-post.php?swp_debug=load_options&swp_url=, sem necessidade de login, CSRF token ou interação prévia com a vítima — o único pré-requisito real é o plugin estar instalado, ativo e em versão anterior à 3.5.3. A campanha observada em março de 2019 usou pastebins públicos hospedando o payload disfarçado de configuração do plugin (campo 'twitter_id' contendo script codificado em fromCharCode), e a Sucuri registrou tentativas de mais de cem IPs distintos em poucos dias, com o script injetado redirecionando visitantes para sites maliciosos.

A exploração é trivial de automatizar (por isso o EPSS alto e a listagem no KEV) e não exige conhecimento de credenciais nem de estrutura interna do site-alvo, só a URL pública do site WordPress com o plugin ativo. Existem PoCs públicas, incluindo uma submissão de 2025 na lista Full Disclosure descrita pelo autor como 'Remote Code Execution' — rotulagem que não corresponde à natureza real da falha (XSS armazenado); a CVE oficial e a análise da Sucuri confirmam XSS, não execução de código no servidor. A confusão provavelmente vem do fato de que XSS armazenado atingindo um administrador logado pode ser encadeado (via ações administrativas do WordPress, como edição de plugin/tema) para chegar a RCE, mas isso é uma etapa adicional, não parte do exploit documentado.

O impacto final documentado é sequestro de sessão/ações no contexto do navegador da vítima e redirecionamento para infraestrutura maliciosa — consistente com campanhas de infecção em massa (padrão associado a famílias como Balada Injector) que visam SEO spam e redirecionamento, não necessariamente controle total do servidor.

Versiones

Afectadas
Social Warfare e Social Warfare Pro em todas as versões anteriores a 3.5.3.
Corregidas en
3.5.3 (não há menção a backports para ramos mais antigos nas fontes consultadas).

Cómo protegerse

A correção do fornecedor é a atualização para a versão 3.5.3 do Social Warfare (e Social Warfare Pro), que remove ou neutraliza a rota de debug vulnerável. Não há indicação nas fontes de backport para ramos anteriores — trata-se de um plugin de terceiros sem versões LTS documentadas, então a única via oficial é subir para 3.5.3 ou posterior.

Se a atualização imediata não for possível, o paliativo real é bloquear no WAF ou no servidor web requisições para /wp-admin/admin-post.php contendo os parâmetros swp_debug=load_options e swp_url — a Sucuri recomendou exatamente essa virtual-patch enquanto o update não era aplicado. Outra opção de custo baixo é desativar o plugin até a atualização, já que a função de debug não é usada em operação normal do site (não há perda funcional relevante em desativar temporariamente). Vale checar e limpar manualmente as opções do plugin no banco de dados (wp_options) caso a exploração já tenha ocorrido antes da correção, pois o payload permanece armazenado até ser sobrescrito.

Não funciona como mitigação apenas restringir acesso ao painel /wp-admin por IP ou senha adicional, porque o endpoint admin-post.php explorado não exige autenticação prévia — a falha está no processamento da requisição em si, não em contornar login.

Cómo detectar

O indicador mais confiável, segundo a Sucuri, é buscar nos logs de acesso requisições a qualquer arquivo PHP dentro de /wp-admin/ contendo os parâmetros swp_debug e swp_url — em particular GET para admin-post.php?swp_debug=load_options&swp_url=, frequentemente apontando para pastebin.com/raw/... ou hosts similares usados para hospedar o payload. Respostas com código 403 nesses padrões (bloqueadas por WAF) ainda indicam tentativa de exploração, não sucesso.

Como sinal secundário, vale inspecionar a tabela wp_options do WordPress por valores de configuração do Social Warfare (campos como 'twitter_id') contendo tags ou JavaScript codificado — presença disso confirma exploração bem-sucedida e persistência do payload, mesmo que o plugin já tenha sido atualizado depois.

Investigado y redactado con IA a partir del advisory del fabricante y análisis públicos, con las fuentes citadas. Verifica siempre la versión corregida en el advisory oficial antes de actuar.
The social-warfare plugin before 3.5.3 for WordPress has stored XSS via the wp-admin/admin-post.php?swp_debug=load_options swp_url parameter, as exploited in the wild in March 2019. This affects Social Warfare and Social Warfare Pro.
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N
Productos afectados
n/a · n/a
PoCs públicas encontradas33
exploitdbwww.exploit-db.com/exploits/52346no verificadoexploitdbwww.exploit-db.com/exploits/46794no verificadogithubgithub.com/hash3liZer/CVE-2019-997822githubgithub.com/mpgn/CVE-2019-99788githubgithub.com/KTN1990/CVE-2019-99786githubgithub.com/grimlockx/CVE-2019-99784githubgithub.com/yup-Ivan/CVE-2019-99784githubgithub.com/d3fudd/CVE-2019-9978_Exploit3githubgithub.com/TokyoHunter/CVE-2019-9978-Social-Warfare-WordPress-RCE1githubgithub.com/echoosso/CVE-2019-99781githubgithub.com/B4ntGrim/Vuln_Exploitation_MegaQuagga_Pentest0githubgithub.com/cved-sources/cve-2019-99780githubgithub.com/h8handles/CVE-2019-9978-Python30githubgithub.com/0xMoonrise/cve-2019-99780githubgithub.com/MAHajian/CVE-2019-99780githubgithub.com/Vaidehim55/CVE-2019-9978-RCE-PoC0githubgithub.com/aktia1/MegaQuagga_Pentesting_Report0githubgithub.com/B4ntGrim/Vuln_Remediation_MegaQuagga0githubgithub.com/Housma/CVE-2019-9978-Social-Warfare-WordPress-Plugin-RCE0cve_referencewww.exploit-db.com/exploits/46794/no verificadovulncheckvulncheck.com/xdb/797f3f17dcb3no verificadovulncheckvulncheck.com/xdb/7621c2e4cc97no verificadovulncheckvulncheck.com/xdb/4c5c4c61dda3no verificadovulncheckvulncheck.com/xdb/89a9def6ffedno verificadovulncheckvulncheck.com/xdb/b1aa6ec20c75no verificadovulncheckvulncheck.com/xdb/4f8c76c78bceno verificadovulncheckvulncheck.com/xdb/e62bb9f01805no verificadovulncheckvulncheck.com/xdb/5b8f3f707d29no verificadovulncheckvulncheck.com/xdb/5fa69ee6d630no verificadovulncheckvulncheck.com/xdb/86c5d721b741no verificadovulncheckvulncheck.com/xdb/0a0645e7d05bno verificadocve_referencepacketstormsecurity.com/files/163680/WordPress-Social-Warfare-3.5.2-Remote-Code-Execution.htmlno verificadocve_referencepacketstormsecurity.com/files/152722/Wordpress-Social-Warfare-Remote-Code-Execution.htmlno verificado
⚠ Recursos públicos, para evaluar la exposición de sistemas que controlas o estás autorizado a probar. Prueba solo con autorización.