命令注入漏洞解析

news2024/11/15 20:33:01

漏洞简介

Atlassian Bitbucket Server 和 Data Center 是 Atlassian 推出的一款现代化代码协作平台,支持代码审查、分支权限管理、CICD 等功能。
受影响的Bitbucket Server 和 Data Center版本存在使用环境变量的命令注入漏洞,具有控制其用户名权限的攻击者可以在系统上执行任意命令。

影响范围

Bitbucket Data Center and Server 7.0 到 7.21的版本。

调试环境设置

需要设置jvm参数,在启动文件start-bitbucket.sh中并没有发现相关参数,注意到这里加载了_start-webapp.sh

图片.png

在其中找到了JAVA_OPTS参数并在最后加上:

-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=5005,server=y,suspend=n"
LAUNCHER="com.atlassian.bitbucket.internal.launcher.BitbucketServerLauncher

图片.png

【一一帮助安全学习,所有资源获取处一一】
①网络安全学习路线
②20份渗透测试电子书
③安全攻防357页笔记
④50份安全攻防面试指南
⑤安全红队渗透工具包
⑥网络安全必备书籍
⑦100个漏洞实战案例
⑧安全大厂内部视频资源
⑨历年CTF夺旗赛题解析

执行service atlbitbucket stop、service atlbitbucket start重启Bitbucket,观察进程发现带上了后面加的jvm参数
图片.png

然后配置idea并调试启动

图片.png

漏洞分析

根据漏洞影响范围下载了8.4.2和8.4.1版本进行对比后发现差异太大了,于是又下载了7.6.19和7.6.18版本。根据两个修复版本之间共同的差异最终锁定安全更新的部分为两个jar包:bitbucket-process-*.jarnuprocess-*.jar
反编译后进一步对比发现bitbucket-process-*.jarDefaultNioProcessConfigurer.java、NioProcessParameters.java、RemoteUserNioProcessConfigurer.java中的差异符合官方漏洞描述:有权控制其用户名权限的攻击者能够利用环境变量进行命令注入
\com\atlassian\bitbucket\internal\process\DefaultNioProcessConfigurer.java中将环境变量的设置改为了NioProcessParameters.environmentPutIfAbsent函数

图片.png

这个函数是\com\atlassian\bitbucket\internal\process\NioProcessParameters.java中新增的,其中调用的函数对key进行了非空判断,对key和valve都进行了空字节的检测

图片.png

图片.png

\com\atlassian\bitbucket\internal\process\RemoteUserNioProcessConfigurer.java中发现了官方描述的用户名环境变量:REMOTE_USER

图片.png

通过回溯相关类及其继承类的调用找到了路由入口,如:com.atlassian.stash.internal.rest.content.FileListResource
联想到Bitbucket也是用于Git 代码管理,猜测这里会执行git命令
图片.png

创建仓库后根据路由访问:
图片.png

跟进看一下命令在哪里执行的以及环境变量用来干什么
在RemoteUserNioProcessConfigurer中的configure方法成功命中断点,这里发现已经传入了git命令,但是漏洞描述说的是使用用户名环境变量造成的注入,所以只需关注环境变量部分

图片.png

调用DefaultAuthenticationContext.getCurrentUser方法后生成user,其中包含注册的用户名:test
图片.png

其getName方法主要逻辑就是返回注册信息中的用户名

图片.png

随后赋值给环境变量REMOTE_USER

图片.png

返回之后回到NuNioProcessHelper.run方法

图片.png

然后调用NuProcessBuilder.run方法,prepareEnvironment方法进行格式转换,取出环境变量中的key和value以’=’拼接放入字符数组

图片.png

一直跟入后发现在LinuxProcess.prepareProcess方法中环境变量经过toEnvironmentBlock方法处理

图片.png

该函数主要逻辑就是将环境变量数组中的全部环境变量转化为字节后赋值给新的block字节数组并返回。其中每次拷贝一个环境变量字节后新的拷贝位置会加一,以实现环境变量间的分隔。根据漏洞修复方式,在环境变量中使用空字节后,在这里空字节后面部分就是一个新的环境变量,猜测可能是注入了一个恶意环境变量

图片.png

返回赋值给envBlock后调用LibJava10.Java_java_lang_ProcessImpl_forkAndExec方法,这里通过调用java native方法实现命令执行

图片.png

图片.png

图片.png

这里并没有发现环境变量如何造成任意命令执行,回看其它地方也没有发现环境变量引入到命令执行触发点。相关的历史漏洞都是git参数注入

图片.png

才意识到是git环境变量:https://git-scm.com/book/zh/v2/Git-%E5%86%85%E9%83%A8%E5%8E%9F%E7%90%86-%E7%8E%AF%E5%A2%83%E5%8F%98%E9%87%8F

图片.png

简单来说就是执行git命令时会自动调用相关的环境变量,而某些环境变量可以执行命令如上面的GIT_EXTERNAL_DIFF
根据文章描述该环境变量是在执行git diff时用到的,而上面的git命令用不到该环境变量
按照描述注册一个用户名为:’test GIT_EXTERNAL_DIFF=touch /tmp/test’,然后去仓库执行diff操作

图片.png

根据路由,调用到CommitDiffResource. streamDiff函数。后续流程和上面一样了,只是现在执行的git diff命令,会用到注入的git环境变量‘GIT_EXTERNAL_DIFF‘造成命令执行

图片.png

漏洞复现

注册一个带有环境变量的用户名,然后burp拦截将空格改为%00

图片.png

图片.png

然后进入仓库进行diff

图片.png

成功在/tmp目录下创建test文件

图片.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/56045.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

代码随想录刷题记录day34 动态规划理论基础+斐波那契数+爬楼梯+使用最小花费爬楼梯

代码随想录刷题记录day34 动态规划理论基础斐波那契数爬楼梯使用最小花费爬楼梯 动态规划理论基础 解决的问题 由前一个状态决定了后一个的状态,可以用动态规划来解决。贪心是没有状态推导的。 解题步骤 确定dp数组(dp table)以及下标的…

一键集成 SQL 审核到你的 GitLab 和 GitHub CI/CD

本文以 GitLab 为例,GitHub 方式类似。 操作步骤 事先准备 开启 Bytebase 团队版(从 v1.8.0 开始,你可以直接开启 14 天的团队版免费试用)。 为你的 Bytebase workspace 和项目开启 VCS 工作流:https://www.bytebas…

基于钉钉通讯录,同步构建本地LDAP服务

上一篇《利用飞书通讯录同步搭建本地LDAP》方案发出后,引起不少企业 IT 人员共鸣。本次,宁盾针对使用了钉钉社交应用的企业推出基于钉钉通讯录(组织架构和用户信息)同步搭建本地 LDAP的方案。 钉钉已经成为很多企业日常处理工作的…

基于FPGA的智能小车系统

目 录 前 言 1 第1章 系统总体方案设计 4 1.1 系统任务描述 4 1.2 控制系统要求 4 1.3 方案设计与论证 4 1.3.1 小车载体选择 4 1.3.2 主控制器选择 5 1.3.3 传感器选择 5 1.3.4 电机驱动选择 6 1.3.5 稳压电源选择 7 1.3.6 智能小车系统最终方案 7 1.4 系统总体设计 8 1.4.…

【Java开发】 Spring 07 :Spring AOP 实践详解(通过 AOP 打印数据访问层)

AOP 指是面向切面编程(通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术),利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提…

SpringBoot 3.0 新特性,内置声明式 HTTP 客户端

http interface 从 Spring 6 和 Spring Boot 3 开始,Spring 框架支持将远程 HTTP 服务代理成带有特定注解的 Java http interface。类似的库,如 OpenFeign 和 Retrofit 仍然可以使用,但 http interface 为 Spring 框架添加内置支持。 什么是…

RabbitMQ之集群方案原理

对于无状态应用(如普通的微服务)很容易实现负载均衡、高可用集群。而对于有状态的系统(如数据库等)就比较复杂。 1、业界实践 主备模式:单活,容量对等,可以实现故障转移。使用独立存储时需要借…

【Matplotlib绘制图像大全】(二十五):Matplotlib使用figure()添加画布

前言 大家好,我是阿光。 本专栏整理了《Matplotlib绘制图像大全》,内包含了各种常见的绘图方法,以及Matplotlib各种内置函数的使用方法,帮助我们快速便捷的绘制出数据图像。 正在更新中~ ✨ 🚨 我的项目环境: 平台:Windows10语言环境:python3.7编译器:PyCharmMatp…

2022re:Invent:亚马逊云科技拥有超过15年的数据创新经验

在探索适合企业的数据战略的道路上,企业并不孤单。亚马逊云科技有着超过15年的数据领域创新经验。并一直在尝试通过创新的方法去改进数据存储和分析的过程:亚马逊云科技在云中提供了第一个可扩展存储服务S3、发布了云上第一个专门构建的数据库DynamoDB和…

easyrecovery2023免费版电脑数据恢复软件下载功能介绍

误删了重要文件?电脑中毒数据丢失?本想拷贝却手抖格式化了?那可以试试easyrecovery,这是一款十分强大的电脑数据恢复软件,界面简洁明了,操作也是十分的简单,只需要根据文字提示来进行操作即可进…

B端产品实战课读书笔记:第七章B端产品常用功能设计

目录 一、工作台 二、列表 三、搜索/筛选 3.1输入框搜索 3.2 单选/复选筛选 3.3 独立/联动筛选 3.4 其他 四、审批 4.1概念 4.2扩展功能 4.3设计要点 五、用户--角色--权限 5.1 什么是RBAC模型 5.2单系统的用户权限设计 5.3多系统的用户权限设计 六、可视化 6.…

用HTML+CSS做一个漂亮简单的音乐网站

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…

[附源码]计算机毕业设计springboot新能源汽车租赁

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

基于STM32G431嵌入式学习笔记——九、IIC总线(一)EEPROM

一、基础原理剖析 先前的实验中我们都是通过程序设计语言去调用串口、定时器、引脚等硬件设备进行从0到有的功能实现,所有的指令以及数据均来自程序设计语言,而没有想计算机一样将一些必要数据存入存储器中。 IIC总线是我们嵌入式板子上进行数据传输的主…

太简单了,一文彻底搞懂Jenkins的用法

程序员宝藏库:https://gitee.com/sharetech_lee/CS-Books-Store 你想要的,这里都有! 我在前公司的某个部门做过一年CV算法工程师,部门推崇全栈式开发。换句话说,做算法,不能只聚焦于算法,要全流…

阿里云NAS存储部署简介

近期在阿里云上部署OCP需要用到NAS,其中遇到NAS无法扩容的问题,在此简单笔记。 1、部署NAS 参照github.com\kubernetes-sigs\alibaba-cloud-csi-driver\docs\nas.md部署说明,需要执行以下步骤: Step 1: Create RBAC resource …

四、伊森商城 前端基础-Vue MVVM思想Vue安装单向绑定 p21

目录 一、MVVM 思想 二、Vue 简介 2.1、安装 2.1.1、初始化vue项目 -y默认确定 2.1.2、安装上vue的2.6.11版本 三、Vue的单向绑定 一、MVVM 思想 M:即 Model,模型,包括数据和一些基本操作 V:即 View,视图&#xf…

【Docker】常用命令总结

Docker是基于Go语言实现的云开源项目。Docker的主要目标是**“Build,Ship and Run Any App,Anywhere”**。也就是通过对应用组件的封装、分发、部署、运行等生命周期的管理,使用户的APP(可以是一个WEB应用或数据库应用等等)及其运…

容器开发运维人员的 Linux 操作机配置优化建议

"工欲善其事必先利其器", 作为一个PAAS平台架构师, 容器相关技术(docker, k8s等)是必不可少的. 本文简单介绍下我自己的Linux操作机配置. 提升工作效率, 提高使用体验. :heart::heart::heart: :exclamation: 注意: 本文以CentOS 7.6 为例, RHEL7.6 操作类似. Ubuntu系…

为什么简历上不要轻易写“精通分布式”,一线大厂为什么面试必问分布式?

为什么要学习分布式? 作为一名后端 Java 程序员,我们在找工作写简历的时候除了高并发经验。一般情况下都还会写上自己熟悉/了解/掌握/精通分布式系统,所以高并发和分布式大多是成对出现的。 在某直聘网站上搜到的 Java 岗位 这么多金的一个知…