📌 摘要
在 Frappe Framework v15.72.4 的 frappe.client.get_value API 端点中(以及 ERPNext v15.67.0 代码库中)发现了一个基于时间的盲 SQL 注入漏洞。具有 reporting/client API 访问权限的已认证用户可以通过 fieldname 参数注入 SQL。通过将时间延迟函数(例如 sleep(15))插入 fieldname 参数,攻击者可以通过可测量的响应延迟确认注入 — 从而实现拒绝服务、信息泄露(通过盲注技术)和数据篡改。
漏洞类型: SQL 注入(基于时间的盲注)(CWE‑89)
受影响产品: Frappe Framework / ERPNext
受影响版本(已报告):
受影响组件: frappe.client.get_value API 方法(frappe/client.py)
易受攻击的端点:
/api/method/frappe.client.get_value
易受攻击的查询示例:
/api/method/frappe.client.get_value?doctype=Report&fieldname=ref_doctype+%2F+sleep(15)+&filters=Profit+and+Loss+Statement&_=1752174156893
易受攻击的参数: fieldname(未正确清理/被拼接进 SQL)
攻击类型: 远程(需要认证和 reporting API 访问权限)
严重性: 高(基于时间的盲 SQL 注入可实现数据外泄、DoS 和数据篡改)
预估 CVSS v3.1 评分: 8.0(高) — 基于需要认证的远程 SQL 注入(可实现数据泄露和 DoS)的评估;权威评分应由 CVE 分配机构执行。
状态: 未修复(按报告所述)
发现者: Mohammed Aloli(GitHub:https://github.com/MoAlali)
发现日期: 报告中未指定
CVE ID: CVE-2025-56380
仅在已授权/实验室环境中测试。切勿对您不拥有或无明确测试许可的系统运行。
PoC 请求(示例):

GET /api/method/frappe.client.get_value?doctype=Report&fieldname=ref_doctype+%2F+sleep(15)+&filters=Profit+and+Loss+Statement&_=1752174156893
确认步骤
+%2F+sleep(15)+& 载荷,观察响应立即返回 — 确认注入造成了时间延迟。备注: 根据数据库引擎,可将 sleep(15) 替换为适合后端 DBMS 的其他时间函数或时间值(例如 PostgreSQL 使用 pg_sleep(n))。该 PoC 通过计时演示盲注;可以使用更复杂的载荷逐位提取数据。
攻击向量: 已认证用户向 /api/method/frappe.client.get_value 构造带有恶意 fieldname 参数(包含 SQL 载荷,即时间延迟函数)的 GET 请求。
影响:
fieldname 及所有用户提供的输入永远不会被直接拼接进 SQL。使用能正确绑定参数的参数化查询或 ORM API。sleep、pg_sleep、benchmark、/、;)。frappe.client.get_value 及处理 fieldname/filters 的代码路径,用安全 API 替换不安全的拼接,并发布安全补丁。运维人员应及时应用更新。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.html由 Mohammed Aloli 发现
此信息仅用于防御和修复目的。请不要尝试针对您不拥有或未经明确授权测试的系统利用此漏洞。运维人员应优先进行修补、应用安全编码修复,并遵循上述缓解建议。