
Uma vulnerabilidade de cross-site scripting (XSS) armazenado no recurso de postagem de blog do ERPNEXT v15.67.0 permite que atacantes executem scripts web ou HTML arbitrários por meio de um payload malicioso injetado no campo de conteúdo.
📌 Resumo
Existe uma vulnerabilidade de Cross‑Site Scripting (XSS) armazenado no módulo de Blog do ERPNext (v15.67.0) / Frappe (v15.72.4). Um utilizador autenticado com permissão para criar ou editar publicações de blog pode injetar HTML/JavaScript malicioso no campo content. Esse payload é armazenado e será executado no navegador de qualquer utilizador que visualizar a página da publicação, permitindo execução arbitrária de scripts, divulgação de informações, negação de serviço e outros ataques no lado do cliente. Privilégios de administrador não são estritamente necessários — qualquer utilizador com permissão para criar/editar publicações de blog pode explorá-la.
Tipo de Vulnerabilidade: Cross‑Site Scripting Armazenado (CWE‑79)
Produto(s) Afetado(s): ERPNext / Frappe
Versões Afetadas (relatadas):
Componente Afetado: Módulo de Blog do ERPNext
Rota: /app/blog-post/<blog_name>
Campo Vulnerável: (formulário de criação / edição de publicação de blog)
contentTipo de Ataque: Remoto (requer autenticação e privilégios de criação de publicações de blog)
Gravidade: Alta (execução de código no lado do cliente, roubo de dados, possibilidade de sequestro de sessão)
Pontuação CVSS v3.1 Estimada: 7.5 (Alta) — estimativa; a entidade oficial de atribuição deve calcular a pontuação final
Estado: Não corrigido (conforme relatado)
Descoberto por: Mohammed Aloli
Data da Descoberta: Não especificada
CVE ID: CVE-2025-56379
Teste apenas em ambientes autorizados / de laboratório. NÃO execute contra sistemas que não possui ou para os quais não tem permissão explícita para testar.
Passos para reproduzir
Autentique-se na instância ERPNext alvo como um utilizador com permissão para criar/editar publicações de blog.
Navegue até a rota de criação/edição de publicação de blog, por exemplo:
/app/blog-post/<blog_name>
No campo content insira o payload e guarde a publicação:
Abra a página da publicação de blog (/app/blog-post/<blog_name>) como outro utilizador (ou o mesmo utilizador num navegador novo). O payload é executado no navegador do visualizador (aqui, alert("xss")).
Notas: a PoC usa um simples alerta onerror. Ataques reais poderiam exfiltrar cookies, executar ações em nome da vítima ou carregar scripts remotos (sujeitos a CSP e flags de cookies).
Um atacante que pode criar ou editar publicações de blog armazena um script malicioso no campo content. Qualquer utilizador — incluindo administradores — que visitar a página da publicação executará o script do atacante no contexto do seu navegador. As consequências incluem roubo de sessão (se os cookies não forem HttpOnly), ações forçadas na sessão da vítima, exfiltração de dados de páginas a que o atacante tem acesso, ataques de UI redress e potencial DoS de componentes no lado do cliente.
content na entrada e/ou efetue o escape na saída, usando um sanitizador de HTML seguro que remova tags e atributos perigosos (remova atributos on*, URIs javascript:, <script>, ``, etc.). Prefira bibliotecas bem mantidas.<p>, <b>, <i>, <ul>, <li>, <a href> com validação rigorosa de href). Não permita manipuladores de eventos inline.'unsafe-inline', use permissões de scripts baseadas em nonce/hash quando necessário).HttpOnly e defina atributos SameSite apropriados para reduzir o roubo de cookies e os riscos semelhantes a CSRF.https://github.com/frappe/erpnexthttps://github.com/frappe/frappehttps://cheatsheetseries.owasp.org/cheatsheets/Cross_Site_Scripting_Prevention_Cheat_Sheet.htmlautor : Mohammed Aloli
Este relatório destina-se apenas a fins defensivos, de remediação e de sensibilização. Não tente explorar esta vulnerabilidade contra sistemas que não possui ou para os quais não tem autorização explícita para testar. Se opera ERPNext/Frappe, aplique as correções, imponha a sanitização e siga as orientações de mitigação acima.