0%

Redmine 4.2.0 任意文件读取漏洞

漏洞摘要

Remine 4.2.0中的SCM允许使用git做版本管理,然而在repositories_controller.rb控制器中的diff函数中,没有对外部参数revrev_to做合适校验,导致攻击者可以注入一些git参数,达到读取任意文件的目的。发现漏洞后正值HW敏感时期,提交给官方修复后没有公开POC,不过也简单,这里记录下。

漏洞复现

漏洞利用条件

  • redmine <= 4.2.0
  • git <= 2.21.4

漏洞环境搭建

  1. 搭建redmine服务,也可以直接下载bitnami镜像https://bitnami.com/stack/redmine/virtual-machine,如果镜像中的git版本较高,可以编译一个低版本替换。
  2. 配置一个git仓库,git仓库如果配置任何人都可以访问,那么漏洞利用就不需要登录;如果需要登陆后才能访问,那么就需要登录权限了。
  3. 漏洞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

漏洞分析

不分析了,时间太久我也忘了,还要洗衣做饭,大佬自己看下源码就知道原因了:)