GitLab 是一个利用 Ruby on Rails 开发的开源应用程序用于自托管的 Git 项目仓库。该漏洞源于程序在处理用户提供的文档时没有正确检查符号链接软连接导致目录遍历漏洞。攻击者可以利用该漏洞读取任意文件的内容。GitLab是一套利用Ruby on Rails开发的开源应用程序可实现一个自托管的Git版本控制系统项目仓库它拥有与Github类似的功能可查阅项目的文件内容、提交历史、Bug列表等。 GitLab中的‘import/export project’功能中存在目录遍历漏洞该漏洞源于程序没有正确检查用户提供文档中的符号链接。攻击者可利用该漏洞检索任意文件的内容。以下版本受到影响GitLab CE和EE 8.13.0至8.13.2版本8.12.0至8.12.7版本8.11.0至8.11.10—内容来自中国国家信息安全漏洞库 CNNVD受影响版本GitLab CE和EE 8.13.0至8.13.2版本8.12.0至8.12.7版本8.11.0至8.11.10环境搭建下载镜像包后加载本地 tar 镜像包。启动容器dockercompose up-d然后验证容器状态# 查看所有 GitLab 容器dockerps|grepgitlab​# 查看端口映射dockerps--formattable {{.Names}}\t{{.Ports}}复现注册进来就行。点击新建一个项目后点击GitLab export将test.tar.gz上传将会读取到/etc/passwd文件内容这里的test.tar.gz值得解释一下。里面有五个文件其中._VERSION/._project.bundle是macOSAppleDouble 资源分叉文件由 macOS 自动生成包含文件扩展属性如隔离标记com.apple.quarantine在 Linux/Windows 上无实际用途。另外VERSION是版本号。project.bundle是一个Git Bundlev2 格式包含一条真实提交记录。关键在于project.json这是一个软链接指向系统敏感文件/etc/passwd。其内容为project.json -/etc/passwd这是一个经典的Symlink Attack符号链接攻击/ Zip Slip变种攻击流程 1. 受害应用接受 tar.gz 上传 ↓ 2. 服务端解压 test_tar.gz ↓ 3. project.json 被还原为指向 /etc/passwd 的符号链接 ↓ 4. 应用读取 project.json本意是读 JSON 配置 ↓ 5. 实际读取的是 /etc/passwd → 敏感信息泄露参考资料https://hackerone.com/reports/178152