漏洞摘要
Remine 4.2.0中的SCM允许使用git做版本管理,然而在repositories_controller.rb
控制器中的diff
函数中,没有对外部参数rev
和rev_to
做合适校验,导致攻击者可以注入一些git参数,达到读取任意文件的目的。发现漏洞后正值HW敏感时期,提交给官方修复后没有公开POC,不过也简单,这里记录下。
漏洞复现
漏洞利用条件
- redmine <= 4.2.0
- git <= 2.21.4
漏洞环境搭建
- 搭建redmine服务,也可以直接下载bitnami镜像https://bitnami.com/stack/redmine/virtual-machine,如果镜像中的git版本较高,可以编译一个低版本替换。
- 配置一个git仓库,git仓库如果配置任何人都可以访问,那么漏洞利用就不需要登录;如果需要登陆后才能访问,那么就需要登录权限了。
- 漏洞POC
POC中,第一个URL通过--output
在redmine web根目录写入了一个--no-renames
的文件。
POC中,第二个URL通过把/etc/passwd
和--no-renames
的文件对比,读取/etc/passwd
文件,再写通过--output
写入public
目录niubl.txt
文件。
POC中,第三个URL访问niubl.txt就可以下载/etc/passwd
。
漏洞分析
不分析了,时间太久我也忘了,还要洗衣做饭,大佬自己看下源码就知道原因了:)