GitLab项目导入远程代码执行漏洞分析(CVE-2022-2185)
Gitlab Project Import RCE Analysis (CVE-2022-2185)
ENVIRONMENT SETUP & DEBUGGING
本部分详细介绍了如何搭建GitLab调试环境:
- 使用Ubuntu 18.04虚拟机
- 安装GitLab开发工具包(GDK)
- 检出漏洞版本(v15.1.0-ee)
- 配置关键文件(gitlab.yml, puma.rb)
- 使用RubyMine IDE配置调试环境
- 启动相关服务(webpack, sidekiq等)
CVE-2022-2185 ANALYSIS
漏洞存在于GitLab的项目导入功能中,CVSS评分高达9.9分。分析过程分为两个主要案例:
相关背景
- 修复版本:15.1.1, 14.10.5
- 关键提交:5d58c705
- 漏洞点:
DecompressedArchiveSizeValidator
类中的命令拼接
GitLab中的工作线程机制
GitLab使用Sidekiq作为工作队列处理繁重任务,Web控制器将作业推送到工作队列。
案例1:文件导入路径分析
- 通过
Import::GitlabProjectsController
创建导入任务 - 经过多层服务调用(
Projects::CreateService
) - 最终到达
DecompressedArchiveSizeValidator
执行命令 - 但
@archive_path
参数不可控
案例2:批量导入功能分析
- 通过隐藏的批量导入功能触发
- 使用
BulkImportsController
处理请求 - 通过
ProjectPipeline
管道处理数据 - 利用GraphQL提取器和转换器控制数据
- 最终通过模板导入路径触发漏洞
案例1+2组合利用
- 利用批量导入功能控制项目参数
- 通过模板导入路径绕过限制
- 最终实现命令注入
- 注入命令需要等待255秒才会执行
概念说明
批量导入中的管道机制
- 管道包含extract/transform/load/after_run方法
- 执行顺序:提取数据→转换数据→加载数据→后续处理
- 通过
stage.rb
文件定义执行顺序
漏洞验证视频
文章最后提供了漏洞验证视频演示。
更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)
公众号二维码