Apache Submarine 信息泄露导致任意用户密码重置漏洞分析

ApacheSubmarine是一个机器学习平台,但在0.7.0之前的版本中,其submarine-server模块有未授权访问漏洞,允许攻击者获取用户敏感信息,包括加密密码。此外,还存在任意用户密码重置问题,攻击者无需验证即可更改任何用户的密码,这主要由于接口权限检查缺失。这些漏洞可以通过未公开的初始密码和API接口暴露来利用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Apache Submarine 信息泄露漏洞

项目介绍

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

项目地址

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

漏洞概述

Apache Submarine的submarine-server模块存在未授权访问漏洞,该漏洞源于submarine-server模块全部RestApi未添加认证或授权机制。以/api/sys/user/list接口为例,攻击者无需认证即可通过queryPageList方法获取系统全部用户的md5加密后的密文密码(可破解)、手机号、邮箱等敏感信息。

影响版本

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
在这里插入图片描述

漏洞分析

1、下载Apache Submarine 源代码,使用IDEA打开。
使用maven进行依赖编译。
在这里插入图片描述
2、进入submarine-server模块,查看存在未授权访问的API接口。

以/api/sys/user/list接口为例,通过查看源码发现该接口未添加认证机制/权限校验,导致无需认证即可执行queryPageList方法获取系统全部用户的用户实体类信息,包括md5加密后的用户密码(可破解)、手机号、邮箱等。
在这里插入图片描述

漏洞复现

无需任何身份认证,浏览器中直接访问 http://192.168.108.153:32080/api/sys/user/list 即可获取系统敏感信息。
在这里插入图片描述

Apache Submarine 信息泄露导致任意用户密码重置漏洞

项目介绍

已省略,请参考上文内容。

项目地址

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

漏洞概述

Apache Submarine的submarine-server模块存在任意用户密码重置漏洞。该漏洞源于SysUserRestApi的changePassword接口未校验传入用户id值是否属于当前用户,同时未对原始密码进行校验。更严重的是该接口可未授权访问,并且上文中已知api/sys/user/list接口可未授权访问获取系统全部用户的id值字段,导致攻击者无需身份认证即可重置系统任意用户的密码信息。

影响版本

Apache Submarine <= rel/release-0.7.0

环境搭建

已省略,请参考上文内容。

漏洞分析

进入submarine-server模块,定位到存在缺陷的文件。
缺陷文件路径:
submarine-rel-release-0.7.0\submarine-server\server-core\src\main\java\org\apache\submarine\server\rest\workbench\SysUserRestApi.java#changePassword

重置用户密码接口changePassword,参数sysUser可控。
在这里插入图片描述
跟进到userService.changePassword
在这里插入图片描述
继续跟进到userMapper.changePassword,接着跟进到SysUserMapper.xml。发现整个流程中存在如下缺陷:
①:未判断传入的user是否属于当前用户
②:未校验用户原来的密码,直接将password 的值替换成了新的。

综上两点,证明该方法存在任意用户密码重置漏洞。

在这里插入图片描述

漏洞复现

1、访问http://192.168.108.153:32080/user/login登录系统。
Admin用户的初始密码官方文档中没有给出,可通过点击登录页面的
Forgot password——>Already have an account? Sign-In 强行进入系统。
在这里插入图片描述
在这里插入图片描述
2、进入系统的Manage—>user模块,点击Add User添加1-2个测试用户。
在这里插入图片描述
3、打开Burpsuite的抓包代理,重置admin的密码并获取到数据包。
在这里插入图片描述
输入您要设置的新密码,例如123456,接下来您就可以使用admin/123456登录系统了,无法再利用第一步中的方法强行登陆。
在这里插入图片描述
Burpsuite获取到数据包如下:
Id:用户实体表中的id字段,值固定。
Password:md5加密后的格式,例如e10adc3949ba59abbe56e057f20f883e对应123456
在这里插入图片描述
可以看出,重置密码的过程中未校验原始密码。
那么,id的值是否可控呢?结合之前代码审计的成果,已知 /api/sys/user/list接口存在未授权访问漏洞,因此可以零权限拿到系统全部用户的id值。
如下图所示:
Admin的id:e9ca23d68d884d4ebb19d07889727dae
Test的id:d605edfd7c8711ed82b80242ac110009
在这里插入图片描述
接下来是漏洞证明:
将上述数据包发送到Burpsuite的Repeater模块,替换id的值为其它用户的,例如test(d605edfd7c8711ed82b80242ac110009)。利用md5生成器生成一个密码,如下图:
在这里插入图片描述
构造数据包如下:
在这里插入图片描述
尝试test/test123456登录系统,登陆成功,漏洞复现完成。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值