摘要
这个UploadsRewriter不验证文件名,允许在将问题转移到新项目时通过目录遍历复制任意文件。
用于查找引用的模式是:

MARKDOWN_PATTERN = %r{!?[.*?](/uploads/(?<secret>[0-9a-f]{32})/(?<file>.*?))}.freeze

这是由UploadsRewriter在复制问题时,也要跨文件复制:

@text.gsub(@pattern) do |markdown|file = find_file(@source_project, $~[:secret], $~[:file])break markdown unless file.try(:exists?)klass = target_parent.is_a?(Namespace) ? NamespaceFileUploader : FileUploadermoved = klass.copy_to(file, target_parent)
...def find_file(project, secret, file)uploader = FileUploader.new(project, secret: secret)uploader.retrieve_from_store!(file)uploaderend

因为对什么没有任何限制file可以,路径遍历可用于复制任何文件。

演示

演示视频https://www.zhihu.com/video/1241105980542746624

复制步骤

  1. 创建两个项目
  2. 添加具有以下描述的问题:
![a](/uploads/11111111111111111111111111111111/../../../../../../../../../../../../../../etc/passwd)

  1. 将问题转移到第二个项目
  2. 该文件将被复制到项目中。

危害性
允许攻击者读取服务器上的任意文件,包括令牌、私有数据、信任等等。

漏洞原理
在项目之间复制问题时,不检查文件名和路径。

修复方案
在复制文件之前,应该验证文件或路径。

检查输出
GitLab环境信息结果

System information
System:     Ubuntu 18.04
Proxy:      no
Current User:   git
Using RVM:  no
Ruby Version:   2.6.5p114
Gem Version:    2.7.10
Bundler Version:1.17.3
Rake Version:   12.3.3
Redis Version:  5.0.7
Git Version:    2.24.1
Sidekiq Version:5.2.7
Go Version: unknownGitLab information
Version:    12.8.7-ee
Revision:   2643fd87200
Directory:  /opt/gitlab/embedded/service/gitlab-rails
DB Adapter: PostgreSQL
DB Version: 10.12
URL:        http://gitlab-vm.local
HTTP Clone URL: http://gitlab-vm.local/some-group/some-project.git
SSH Clone URL:  git@gitlab-vm.local:some-group/some-project.git
Elasticsearch:  no
Geo:        no
Using LDAP: no
Using Omniauth: yes
Omniauth Providers:GitLab Shell
Version:    11.0.0
Repository storage paths:
- default:  /var/opt/gitlab/git-data/repositories
GitLab Shell path:      /opt/gitlab/embedded/service/gitlab-shell
Git:        /opt/gitlab/embedded/bin/git

project文件_移动和发出时通过UploadsReWriter读取的任意文件相关推荐

  1. python文件审计_Python代码审计实战案例总结之CRLF和任意文件读取

    文章目录 介绍 CRLF和任意文件读取的审计实战 CRLF 审计实战 urllib CRLF漏洞(CVE-2019-9740和CVE-2019-9947) httplib CRLF 漏洞 任意文件读取 ...

  2. access vba打开excel文件_除了VBA,还有哪些编程语言可以操作Excel文件?

    Excel(Microsoft office)是现在最常用的办公软件,主要涉及电子表格制作.数据处理.报表输出展示以及更高端的还有金融建模等:我们知道,在需要批处理多个Excel工作表以及工作簿的时候 ...

  3. nginx不同server不同日志文件_招标里的答疑是什么?和澄清文件有何不同?

    招标过程中,由于招投标文件的失误,经常会需要澄清文件,那么招标里的答疑又是什么?和澄清文件是否一样?今天保标招标小编就来重点研究一下这个问题. 招标里的答疑是什么? 答疑应该是指是投标人购买招标文件后 ...

  4. python打开文件_用Python(in PsychoPy)打开SPSS数据文件

    用Python(in PsychoPy)打开SPSS数据文件 有时,要访问SPSS的sav文件中的内容,而手里电脑没有SPSS软件,或者需要对SPSS数据文件中的数据进行SPSS支持不够好的操作,如对 ...

  5. 保存多序列tiff文件_干货技巧!如何使你保存的Phtoshop文件容量更小?

    设计师使用Photoshop储存文件时,保存的文件时可能会占用过多的磁盘空间,并且发送或者下载PSD文件的时候也会花费太多的时间,那么我们有些什么方法技巧可以缩小,或者优化我们的PSD文件呢?我们以一 ...

  6. 转储sql文件_在Linux上SQL Server中更改SQL转储文件位置

    转储sql文件 In this article, we will talk about SQL Dump files and the process to change the dump direct ...

  7. 局域网传文件_手机和电脑之间互传比较大的文件,哪种方式比较好?

    在我们的生活中,大家经常会遇到手机电脑没法方便地互传文件的问题.如果你是用iPhone和MacOS,那么使用AirDrop功能还好方便些,但大多数读者可能都是使用Windows为主. 那么今天小趣带大 ...

  8. matlab读int16读文件_[转载]Matlab中的textread textscan读取文本文件

    1.MATLAB从文本文件中读取格式化的数据函数是textread. 调用方式 [A,B,C,...] = textread('filename','format') [A,B,C,...] = te ...

  9. windows文件读取 xxe_XXE任意文件读取(当xml解析内容有输出时)

    利用XXE漏洞读取文件 参考:https://www.jianshu.com/p/4fc721398e97 首先找到登录源码如下: 由题目可以利用XXE漏洞读取文件 先登录用Burp Suite抓包: ...

最新文章

  1. 【yolov4目标检测】(4) opencv+yolov4-tiny 实现选择性目标检测,附python完整代码
  2. ubuntu体验python_在Ubuntu下配置舒服的Python开发环境
  3. 关于E1的一些扫盲资料
  4. 基于BP神经网络+HOG特征提取的视频中车辆车牌识别算法仿真
  5. 【Android】SlidingMenu属性详解(转)
  6. ASP.NET事件顺序
  7. 二路单调自增子序列模型【acdream 1216】
  8. rtp发送h264和h265
  9. 装饰器,语法糖.有参装饰器 ,无参装饰器
  10. SQL 中OPENQUERY的使用
  11. CentOS-6.5-x86_64 最小化安装,已安装包的总数,这些包?
  12. python经典实例pdf-Python机器学习经典实例_PDF电子书
  13. 用python 开发合同管理系统_python3.6+django2.0 一小时学会开发一套学员管理系统demo...
  14. linux shell用变量的值作为新变量名
  15. linux下的man和info命令
  16. ITIL4-foundation学习和考试心得
  17. window安装ipython_windows ipython安装
  18. USB转I2C芯片操作EEPROM--CH347应用
  19. .Net再次使用FlashPaper
  20. 2022最新WiFi大师小程序3.0.9源码+独立版后台

热门文章

  1. TCP协议之三次握手与四次挥手
  2. 冒泡排序算法的 JavaScript 实现
  3. C#树状图 初始默认选中节点
  4. pydev导入eclipse
  5. CodeProject每日精选: Progress controls 进度条
  6. nodejs的PM2进程管理
  7. css3实现的精美菜单
  8. 「ECharts」主题这样配置才能更绚丽
  9. 7-35 情人节 (15 分)
  10. 条件编译指令:#if,#endif