CVE-2022-43781随便写写分析

CVE-2022-43781漏洞介绍

  Atlassian Bitbucket Server和Atlassian Bitbucket Data Center都是澳大利亚Atlassian公司的产品。Atlassian Bitbucket Server是一款Git代码托管解决方案。该方案能够管理并审查代码,具有差异视图、JIRA集成和构建集成等功能。Atlassian Bitbucket Data Center是Atlassian Bitbucket的数据中心版本。

  Atlassian Bitbucket Server和Bitbucket Data Center存在安全漏洞,该漏洞源于具有用户名控制权限的攻击者可以通过环境变量实现命令注入导致在系统上执行任意代码。

CVE-2022-43781漏洞原理分析

  在这个漏洞中,NuProcessBuilder的实现逻辑被用来执行有缺陷的处理,这与之前的CVE-2022-36804漏洞有着显著的相似性。关键点在于,创建进程时所使用的环境变量和命令参数是通过一个数组复制的,而数组的分隔标志是NULL字符。CVE-2022-36804漏洞通过插入NULL字符来切断命令行参数,实现向Git参数中注入恶意代码,从而达到远程代码执行(RCE)。而在这次的漏洞中,同样采用了NULL字符截断的策略,不过是针对环境变量的截断,进而注入与Git相关的环境变量以实现RCE。

  特别是在处理与repos相关的命令时,系统会调用Git命令。例如,在创建repos之前,需要先设置一系列相关的环境变量。这一过程主要发生在com.atlassian.bitbucket.internal.process.nu.NuNioProcessHelper类的run方法中,该方法负责调用applyConfigurers方法,以应用配置并创建所需的进程参数。

在执行applyConfigurers方法时,系统按顺序调用了两个主要配置器:DefaultNioProcessConfigurerRemoteUserNioProcessConfigurer。这两个配置器共同作用于进程配置,每个承担着特定的设置和调整功能,以确保进程的正确初始化和执行。这种配置方法展现了系统在处理进程创建时的细致和层次化的管理策略。

主要重点关注第二个RemoteUserNioProcessConfigurer配置器,其configure方法如下

在此过程中,updateEnvironment函数的主要职责是刷新环境变量,具体操作是捕获并存储当前的用户名。这个用户名随后被赋值给REMOTE_USER变量,并嵌入环境变量之中。进而,在初始化执行Git命令的进程时,系统的环境映射中已经预设了当前用户的身份信息。

然后调用prepareEnvironment()将其转化为一个String数组.

在此系统中,根据操作系统的不同,会创建一个LinuxProcess对象,并随后调用其run方法。在开始实际执行(call)之前,系统会进行一项重要的预处理步骤,即prepareProcess,用于设定进程的相关属性。这个步骤涵盖了环境变量数组的传入。特别值得注意的是,系统在这一环节使用toEnvironmentBlock()方法,将字符串数组(String array)转换为字节数组(byte array),这是整个过程中的一个关键转换点。

在处理数组拷贝的过程中,系统采用了System.arraycopy方法,这里的关键是以NULL字符作为数组元素之间的分隔符。这正是CVE-2022-36804漏洞利用的关键点。在此环境中,可控制的变量是用户名。若在用户名中插入NULL字符,那么在数组拷贝完成后,得到的环境变量数组中会额外出现一个注入的变量。例如,使用用户名poc%00a=c进行测试,可以观察到在拷贝后的字节数组中,REMOTE_USER变量后会新增一个a=c的键值对。这种方法揭示了在环境变量设置过程中潜在的安全风险。

现在能注入执行Git命令的环境变量之后则还需要找到一个可以利用的git环境变量,从Git的文档中对各个环境变量有说明文档,其中GIT_EXTERNAL_DIFF环境变量的说明如下

当该环境变量被设置时,只要执行git diff命令则Git还会去调用该环境变量指定的程序. 所以最后的利用思路就很简单了,注入GIT_EXTERNAL_DIFF环境变量,执行diff操作,触发cmd.exe或者bash等执行命令即可.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值