
Se descubrió que Frappe Framework v15.72.4 contiene una vulnerabilidad de inyección SQL a través del parámetro fieldname en el endpoint de API frappe.client.get_value.
📌 Resumen
Se descubrió una vulnerabilidad de inyección SQL ciega basada en tiempo en el endpoint de API frappe.client.get_value en Frappe Framework v15.72.4 (y presente en el código de ERPNext v15.67.0). Un usuario autenticado con acceso a la API de informes/cliente puede inyectar SQL a través del parámetro fieldname. Al insertar funciones de retardo de tiempo (p. ej., sleep(15)) en el parámetro fieldname, un atacante puede confirmar la inyección mediante retardos de respuesta medibles, lo que permite denegación de servicio, divulgación de información (mediante técnicas ciegas) y manipulación de datos.
Tipo de vulnerabilidad: Inyección SQL (ciega basada en tiempo) (CWE‑89)
Producto(s) afectado(s): Frappe Framework / ERPNext
Versiones afectadas (reportadas):
Componente afectado: método de API frappe.client.get_value (frappe/client.py)
Endpoint vulnerable:
/api/method/frappe.client.get_value
Ejemplo de consulta vulnerable:
/api/method/frappe.client.get_value?doctype=Report&fieldname=ref_doctype+%2F+sleep(15)+&filters=Profit+and+Loss+Statement&_=1752174156893
Parámetro vulnerable: fieldname (sanitizado incorrectamente / concatenado en SQL)
Tipo de ataque: Remoto (requiere autenticación y acceso a la API de informes)
Gravedad: Alta (la inyección SQL ciega basada en tiempo permite exfiltración de datos, DoS y manipulación)
Puntuación CVSS v3.1 estimada: 8.0 (Alta) — estimación basada en una inyección SQL remota que requiere autenticación y permite divulgación de datos y DoS; la puntuación oficial debe ser realizada por los asignadores.
Estado: Sin corregir (según lo reportado)
Descubierto por: Mohammed Aloli (GitHub: https://github.com/MoAlali)
Fecha de descubrimiento: No especificada en el informe
ID CVE: CVE-2025-56380
Solo pruébelo en entornos autorizados / de laboratorio. No lo ejecute contra sistemas que no posea o para los que no tenga permiso explícito de prueba.
Solicitud PoC (ejemplo):

GET /api/method/frappe.client.get_value?doctype=Report&fieldname=ref_doctype+%2F+sleep(15)+&filters=Profit+and+Loss+Statement&_=1752174156893
Pasos para confirmar
+%2F+sleep(15)+& y observe que la respuesta se devuelve de inmediato, lo que confirma que la inyección causa el retardo.Notas: Reemplace sleep(15) con otras funciones de tiempo o valores de tiempo adecuados al DBMS del backend (p. ej., pg_sleep(n) para PostgreSQL) según el motor de base de datos. El PoC demuestra la inyección ciega mediante temporización; se podrían usar payloads más complejos para extraer datos bit a bit.
Vector de ataque: Un usuario autenticado crea solicitudes GET a /api/method/frappe.client.get_value con un parámetro fieldname malicioso que contiene payloads SQL (funciones de retardo de tiempo).
Impacto:
fieldname y toda entrada proporcionada por el usuario nunca se concatenen directamente en SQL. Utilice consultas parametrizadas o APIs ORM que enlacen parámetros correctamente.sleep, pg_sleep, benchmark, /, ;).frappe.client.get_value y la ruta de código que maneja fieldname/filters, reemplazar la concatenación insegura con APIs seguras y lanzar un parche de seguridad. Los operadores deben aplicar las actualizaciones con prontitud.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.htmlDescubierto por Mohammed Aloli
Esta información se proporciona únicamente con fines defensivos y de remediación. No intente explotar esta vulnerabilidad contra sistemas que no posea o para los que no tenga autorización explícita de prueba. Los operadores deben priorizar el parcheo, aplicar correcciones de codificación segura y seguir las recomendaciones de mitigación anteriores.