GitLab项目导入远程代码执行漏洞分析(CVE-2022-2185)

Gitlab Project Import RCE Analysis (CVE-2022-2185)

ENVIRONMENT SETUP & DEBUGGING

本部分详细介绍了如何搭建GitLab调试环境:

  1. 使用Ubuntu 18.04虚拟机
  2. 安装GitLab开发工具包(GDK)
  3. 检出漏洞版本(v15.1.0-ee)
  4. 配置关键文件(gitlab.yml, puma.rb)
  5. 使用RubyMine IDE配置调试环境
  6. 启动相关服务(webpack, sidekiq等)

CVE-2022-2185 ANALYSIS

漏洞存在于GitLab的项目导入功能中,CVSS评分高达9.9分。分析过程分为两个主要案例:

相关背景

  • 修复版本:15.1.1, 14.10.5
  • 关键提交:5d58c705
  • 漏洞点:DecompressedArchiveSizeValidator类中的命令拼接

GitLab中的工作线程机制

GitLab使用Sidekiq作为工作队列处理繁重任务,Web控制器将作业推送到工作队列。

案例1:文件导入路径分析

  1. 通过Import::GitlabProjectsController创建导入任务
  2. 经过多层服务调用(Projects::CreateService)
  3. 最终到达DecompressedArchiveSizeValidator执行命令
  4. @archive_path参数不可控

案例2:批量导入功能分析

  1. 通过隐藏的批量导入功能触发
  2. 使用BulkImportsController处理请求
  3. 通过ProjectPipeline管道处理数据
  4. 利用GraphQL提取器和转换器控制数据
  5. 最终通过模板导入路径触发漏洞

案例1+2组合利用

  1. 利用批量导入功能控制项目参数
  2. 通过模板导入路径绕过限制
  3. 最终实现命令注入
  4. 注入命令需要等待255秒才会执行

概念说明

批量导入中的管道机制

  • 管道包含extract/transform/load/after_run方法
  • 执行顺序:提取数据→转换数据→加载数据→后续处理
  • 通过stage.rb文件定义执行顺序

漏洞验证视频

文章最后提供了漏洞验证视频演示。


更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)
公众号二维码

posted @ 2025-08-04 14:01  qife  阅读(6)  评论(0)    收藏  举报