【网络安全】网络安全漏洞分析之远程代码执行

介绍

Apache Flume 是一个分布式的,可靠的,并且可用于高效地收集,汇总和移动大量日志数据的软件。它具有基于流数据流的简单而灵活的体系结构。它具有可调的可靠性机制以及许多故障转移和恢复机制,并且具有健壮性和容错性。它使用一个简单的可扩展数据模型,该模型允许进行在线分析应用程序。

漏洞描述

在 7 月 22 日,Apache 发布安全公告,修复了一个存在于 Apache Flume 中的远程代码执行漏洞,CVE 编号为 CVE-2022-34916。当攻击者控制目标 LDAP 服务器时,如果配置使用带有 JNDI LDAP 数据源 URI 的 JMS 源,Apache Flume 版本 1.4.0 到 1.10.0 很容易受到远程代码执行 (RCE) 攻击。

利用范围

1.4.0 <= Apache Flume <= 1.10.0

漏洞分析

环境搭建

从 GitHub 上下载 1.10.0 版本,导入 IDEA。

项目 jdk 使用 1.8,然后修改 TestIntegrationActiveMQ 测试类中的 DESTINATION_NAME,因为 destinationName 是由 DESTINATION_NAME 定义;修改 JNDI_PREFIX 为 ldap://

在 JMSMessageConsumerTestBase.java 中将 destinationLocator = JMSDestinationLocator.CDI;修改为 destinationLocator = JMSDestinationLocator.JNDI;

最后运行 TestIntegrationActiveMQ 测试类即可。

漏洞原理

根据 Apache Flume 漏洞描述,可以确定问题是出现在了 JMSMessageConsumer 中。

查看 DIff(https://github.com/apache/flume/commit/7fe9af49)记录发现,修复方式是在 JMSMessageConsumer 中的 else 分支下,在 initialContext.lookup(destinationName)前新增了对 destinationName 的校验。

那么漏洞触发点已经很明确了,在没有增加校验前,只要进入 JMSMessageConsumer 中 else 分支,控制 destinationName 参数,即可实现 JNDI 注入。

代码分析

知道了漏洞原理后,分析一下代码。

首先在 TestJMSMessageConsumer#testCreateDurableSubscription 初始化了 JMSMessageConsumer 并传入 destinationLocator

destinationLocator 的定义是在 JMSMessageConsumerTestBase.java 中。

在搭建环境时,我们是将 destinationLocator = JMSDestinationLocator.CDI;修改为了 destinationLocator = JMSDestinationLocator.JNDI;

这样配置,是为了在 JMSMessageConsumer 中不满足 if 条件后,能够进入到 else,到达漏洞触发点。

而在官方提供的测试类中,TestIntegrationActiveMQ 类存在 testQueueLocatedWithJndi,将作为 source 点传入参数。

修改 DESTINATION_NAME 为恶意 JNDI 地址,将 JNDI_PREFIX 修改为 ldap://

通过参数的传入,经过如上分析的流程,到达 else 后,由于没有校验,直接触发 initialContext.lookup,造成 JNDI 注入,从而执行恶意远程代码。

漏洞复现

修复建议

官方已发布安全版本,请尽快更新至安全版本

网络安全工程师(白帽子)企业级学习路线

第一阶段:安全基础(入门)

img

第二阶段:Web渗透(初级网安工程师)

img

第三阶段:进阶部分(中级网络安全工程师)

img

如果你对网络安全入门感兴趣,那么你需要的话可以点击这里👉【整整282G!】网络安全&黑客技术小白到大神全套资料,免费分享!

学习资源分享

在这里插入图片描述

  • 16
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

网安导师小李

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值