标签 MindsDB 下的文章

MindsDB 未授权任意文件读取漏洞详细分析 前言 可能分析组件多了吧,都准备下播了,看到 360 又发了一个 AI 数据库的漏洞

漏洞描述 MindsDB 是一个基于企业数据构建人工智能的平台。在 25.11.1 版本之前,文件上传 API 中的非认证路径遍历允许任何调用者从服务器文件系统读取任意文件并将其移入 MindsDB 存储,从而暴露敏感数据。file.py 中的 PUT 处理程序会直接将用户控制的数据加入文件系统路径,当请求主体是 JSON 且 source_type 不是“url”时。只有多部分上传和基于 URL 的上传会被净化;JSON 上传没有调用 clear_filename 或等效检查。该漏洞在 25.11.1 中修复。 环境搭建

git clone --depth 1 --branch v25.11.0 https://github.com/mindsdb/mindsdb.git vulnerable-25.11.0

搭建成功 漏洞复现 首先模拟创建一个敏感文件

然后我们开始目录穿越

看到回显,证明穿越的路径不够

现在成功把文件内容写进数据库了,然后就是读取的问题了 我们通过 sql 查询,把内容查出来 /api/files/aaa 路由后面的 aaa,就是我们的文件名称

成功读取到了文件内容

漏洞分析 文件上传 当然第一个查看的就是 file 文件 注意,这个文件我们可以分为两个部分分析,其中有两种文件上传,一个是 Multipart 格式,但是对路径穿越是有检查的

但是为什么还是漏洞呢?我们看到全部代码

这里可以看到,如果是 json 格式,也就是我们漏洞复现的 payload 模式,没有检查可以直接绕过 文件读取部分

文件读取后直接把内容移动到 MindsDB 中存储,所以我们读取文件,可以直接从数据库查询文件内容 绝对路径读取 但是我后来发现,都不需要目录穿越,直接绝对路径就可以成功,其实还是因为一个漏洞

我们写一个例子代码,就明白了

可以看到当我的第二个路径是绝对路径的时候,直接被覆盖掉了 所以我们完全可以绝对路径去读取信息 尝试一手再说

完全没有问题

一键利用脚本 注意,只能在本地环境复现,因为,每次读取文件后,都会把原文件删除,所以请在虚拟机复现或者创建临时文件

漏洞修复 修复方案 file.py 第 214 行之前添加路径验证:

参考资料

资源
链接
GitHub Advisory
MindsDB Release
MindsDB Repository

免责声明 本报告仅供安全研究和教育目的使用。所有测试均在授权环境中进行。 请勿将本文提供的信息用于任何非法目的 本文所述漏洞利用方法仅用于帮助理解和修复安全漏洞 使用本文信息造成的任何后果,由使用者自行承担