
Foi descoberto que o Frappe Framework v15.72.4 contém uma vulnerabilidade de injeção de SQL por meio do parâmetro fieldname no endpoint da API frappe.client.get_value.
📌 Resumo
Uma vulnerabilidade de injeção SQL cega baseada em tempo foi descoberta no endpoint da API frappe.client.get_value no Frappe Framework v15.72.4 (e presente no código do ERPNext v15.67.0). Um usuário autenticado com acesso à API de relatórios/clientes pode injetar SQL por meio do parâmetro fieldname. Ao inserir funções de atraso de tempo (por exemplo, sleep(15)) no parâmetro fieldname, um atacante pode confirmar a injeção por meio de atrasos mensuráveis na resposta — possibilitando negação de serviço, divulgação de informações (por meio de técnicas cegas) e manipulação de dados.
Tipo de Vulnerabilidade: Injeção de SQL (cega baseada em tempo) (CWE‑89)
Produto(s) Afetado(s): Frappe Framework / ERPNext
Versões Afetadas (relatadas):
Componente Afetado: método da API frappe.client.get_value (frappe/client.py)
Endpoint Vulnerável:
/api/method/frappe.client.get_value
Exemplo de consulta vulnerável:
/api/method/frappe.client.get_value?doctype=Report&fieldname=ref_doctype+%2F+sleep(15)+&filters=Profit+and+Loss+Statement&_=1752174156893
Parâmetro Vulnerável: fieldname (sanitizado de forma inadequada / concatenado ao SQL)
Tipo de Ataque: Remoto (requer autenticação e acesso à API de relatórios)
Gravidade: Alta (SQLi cego baseado em tempo possibilita exfiltração de dados, DoS e manipulação)
Pontuação CVSS v3.1 Estimada: 8.0 (Alta) — estimativa baseada em injeção de SQL remota que requer autenticação e possibilita divulgação de dados e DoS; a pontuação oficial deve ser realizada pelos designadores.
Status: Não corrigido (conforme relatado)
Descoberto por: Mohammed Aloli (GitHub: https://github.com/MoAlali)
Data da Descoberta: Não especificada no relatório
ID CVE: CVE-2025-56380
Teste apenas em ambientes autorizados / laboratoriais. NÃO execute contra sistemas que você não possua ou para os quais não tenha permissão explícita para testar.
Solicitação PoC (exemplo):

GET /api/method/frappe.client.get_value?doctype=Report&fieldname=ref_doctype+%2F+sleep(15)+&filters=Profit+and+Loss+Statement&_=1752174156893
Passos para confirmar
+%2F+sleep(15)+& injetado e observe que a resposta retorna imediatamente — confirmando que a injeção causa o atraso de tempo.Notas: Substitua sleep(15) por outras funções de tempo ou valores de tempo adequados ao SGBD do backend (por exemplo, pg_sleep(n) para PostgreSQL), dependendo do mecanismo de banco de dados. A PoC demonstra injeção cega por meio de temporização; payloads mais complexos poderiam ser usados para extrair dados bit a bit.
Vetor de ataque: Usuário autenticado cria solicitações GET para /api/method/frappe.client.get_value com um parâmetro fieldname malicioso contendo payloads de SQL (funções de atraso de tempo).
Impacto:
fieldname e toda entrada fornecida pelo usuário nunca sejam concatenados diretamente no SQL. Use consultas parametrizadas ou APIs ORM que façam a vinculação adequada dos parâmetros.sleep, pg_sleep, benchmark, /, ;).frappe.client.get_value e o caminho de código que lida com fieldname/filtros, substituir a concatenação insegura por APIs seguras e lançar um patch de segurança. Os operadores devem aplicar as atualizações prontamente.https://github.com/MoAlali — X: https://x.com/alaliksa_ — LinkedIn: https://www.linkedin.com/in/mohammedaloli/https://github.com/frappe/frappe , https://github.com/frappe/erpnexthttps://cheatsheetseries.owasp.org/cheatsheets/SQL_Injection_Prevention_Cheat_Sheet.htmlDescoberto por Mohammed Aloli
Esta informação é fornecida apenas para fins defensivos e de remediação. Não tente explorar esta vulnerabilidade contra sistemas que você não possua ou para os quais não tenha autorização explícita para testar. Os operadores devem priorizar a aplicação de patches, adotar correções de codificação segura e seguir as orientações de mitigação acima.