Apache Submarine SQL注入漏洞分析

Apache Submarine SQL注入漏洞分析

项目介绍

Apache Submarine(简称 Submarine)是一个端到端的机器学习平台,允许数据科学家创建端到端的机器学习工作流。在Submarine上,数据科学家可以完成 ML 模型生命周期的每个阶段,包括数据探索、数据管道创建、模型训练、服务和监控。

项目地址

https://github.com/apache/submarine
https://submarine.apache.org/zh-cn/

漏洞概述

Apache Submarine的submarine-server模块SysUserRestApi
的queryPageList和list接口存在SQL注入漏洞,攻击者可借助username或email参数注入SQL语句。

影响版本

Apache Submarine <= rel/release-0.7.0

环境搭建

源码下载地址:
https://github.com/apache/submarine/tags
官方部署文档:
https://submarine.apache.org/zh-cn/docs/gettingStarted/quickstart

1、准备环境

Centos78G内存
Docker无版本要求
Kubernetes1.15.x - 1.21.x
kubectl1.15.x - 1.21.x
helmv3
minikubeLatest

2、启动 minikube 集群

minikube start --vm-driver=docker --cpus 8 --memory 4096 --kubernetes-version v1.21.2

3、克隆项目,通过 helm chart 安装 submarine operator 和依赖
①:Clone the project

git clone https://github.com/apache/submarine.git

②:Install the submarine operator and dependencies by helm chart

cd submarine
helm install submarine ./helm-charts/submarine

③:Create a Submarine custom resource and the operator will create the submarine server, database, etc. for us.

kubectl apply -f submarine-cloud-v2/artifacts/examples/example-submarine.yaml

4、使用kubectl查询pod的状态,确保每个pod都成功Running

kubectl get pods

在这里插入图片描述

5、暴露submarine的Web服务,并通过浏览器访问Web页面。

kubectl port-forward --address 192.168.108.153 service/submarine-traefik 32080:80

在这里插入图片描述

浏览器访问Web页面:http://192.168.108.153:32080
在这里插入图片描述

漏洞分析

api/sys/user/list接口

1、下载Apache Submarine 0.7.0 源代码,使用IDEA打开。
使用maven进行依赖编译。
在这里插入图片描述

2、进入submarine-server模块,直接定位到存在SQL注入的代码。
缺陷文件路径:
submarine-rel-release-0.7.0\submarine-server\server-core\src\main\resources\org\apache\submarine\database\mappers\SysUserMapper.xml
在这里插入图片描述

代码审计过程中,发现selectAll中使用了${}的格式接收userName和email参数的值,这种写法明显存在安全隐患。

向上跟踪,定位到SysUserMapper。
在这里插入图片描述

继续向上跟踪,定位到Servicec层,发现SysUserService.java的queryPageList方法调用了selectAll。
在这里插入图片描述

继续向上跟踪,最终定位到Controller层SysUserRestApi.java,发现userName和email的值可控,可借助这两个参数注入恶意SQL语句。
在这里插入图片描述

api/sys/dict/list接口

缺陷文件路径:
submarine-rel-release-0.7.0\submarine-server\server-core\src\main\resources\org\apache\submarine\database\mappers\SysDictMapper.xml!](https://img-blog.csdnimg.cn/0f8fe08565d645b38b756bab8339e8fc.png)
在这里插入图片描述
代码审计过程中,发现selectAll中使用了${}的格式接收dictCode和dictName参数的值,这种写法明显存在安全隐患。

向上跟踪,定位到SysDictMapper。
在这里插入图片描述

继续向上跟踪,定位到Controller层SysDictRestApi.java。
在这里插入图片描述

发现dictCode和dictName 的值可控,可借助这两个参数注入恶意SQL语句。
在这里插入图片描述

漏洞复现

api/sys/user/list接口

1、访问http://192.168.108.153:32080/user/login登录系统。
Admin用户的初始密码官方文档中没有给出,可通过点击登录页面的
Forgot password——>Already have an account? Sign-In 强行进入系统。
在这里插入图片描述
在这里插入图片描述

2、打开Burpsuite的抓包代理,进入系统的Manage—>user模块。
在这里插入图片描述

刷新该页面,Burpsuite获取到如下数据包:
在这里插入图片描述

通过阅读源码知道username和email这两个参数存在SQL注入漏洞,因此使用Burpsuite中的sqlmap插件进行漏洞复现。

最终执行结果如下,证明email和username参数存在SQL注入漏洞。
在这里插入图片描述

api/sys/user/list 接口无需身份认证即可访问,因此本漏洞利用上也无需任何身份认证。危害等级较高。

api/sys/dict/list接口

1、本接口同样存在未授权访问漏洞,URL如下:

http://192.168.108.153:32080/api/sys/dict/list?dictCode=demoData&dictName=demoData&column=&field=&order=pageNo=1&pageSize=10

2、数据包如下:

GET /api/sys/dict/list?dictCode=demoData&dictName=demoData&column=&field=&order=pageNo=1&pageSize=10 HTTP/1.1
Host: 192.168.108.153:32080
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.5195.102 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,/;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close
Content-Length: 4

通过漏洞分析,知道dictCode和dictName这两个参数存在SQL注入漏洞,因此使用Burpsuite中的sqlmap插件进行漏洞复现。

在这里插入图片描述
/api/sys/dict/list 接口无需身份认证即可访问,因此本漏洞利用上也无需任何身份认证。危害等级较高。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值