前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >深入研究Citrix ADC远程执行代码 CVE-2019-19781

深入研究Citrix ADC远程执行代码 CVE-2019-19781

作者头像
洛米唯熊
发布2020-02-17 13:59:41
7150
发布2020-02-17 13:59:41
举报
文章被收录于专栏:洛米唯熊洛米唯熊

0x00:前言

CVE-2019-19781下发布了Citrix ADCCitrix Gateway中的一个严重漏洞。该漏洞引起了大家们的注意,因为它表明未经身份验证的对手可以利用它来破坏设备。尽管最初的发现是由Positive Technologies和Paddy Power Betfair做出的,但是没有公开的关于如何利用它的详细信息,因此值得进一步研究。

0x01:漏洞分析

尽管没有有关如何利用此问题的公开详细信息,但Citrix 的缓解咨询建议揭示了此漏洞类型的潜在线索。

从此信息中,我们可以看到漏洞可能存在的路径(/V**s/),并且这可能是目录遍历漏洞.考虑到这一点,开始在httpd.conf文件中查找/V**s路径的定义,并发现

/V**/portal/scripts/NetScaler :: Portal :: Handler Perl模块(Handler.pm).

此目录中包含几个脚本,但是由于此漏洞是潜在的目录遍历,因此我们选择调查文件写入操作的所有潜在代码路径。

这导致在UsersPrefs perl模块中发现以下代码:

代码语言:javascript
复制
sub csd {
my $self = shift;
my $skip_read = shift || "";
# Santity Check
my $cgi = new CGI;
print "Content-type: text/html\n\n";

// Username variable initialized by the NSC_USER HTTP Header
my $username = Encode::decode('utf8', $ENV{'HTTP_NSC_USER'}) || errorpage("Missing NSC_USER header.”); <- MARK THIS

    $self->{username} = $username;
...
    $self->{session} = %session;

// Constructing the path from the username.
        $self->{filename} = NetScaler::Portal::Config::c->{bookmark_dir} . Encode::encode('utf8', $username) . '.xml’;
        if($skip_read eq 1) {
                return;
        }

简而言之,这段代码实质上是从NSC_USER HTTP标头构建路径的,而无需进行任何处理。因此,任何调用csd函数的脚本都将能够触发目录漏洞。

几乎所有脚本都使用此功能,但是对我们而言最有趣的一个脚本是newbm.pl脚本文件:

代码语言:javascript
复制
my $cgi = new CGI;
print "Content-type: text/html\n\n";
my $user = NetScaler::Portal::UserPrefs->new();
my $doc = $user->csd();
...
my $newurl = Encode::decode('utf8', $cgi->param('url'));
my $newtitle = Encode::decode('utf8', $cgi->param('title'));
my $newdesc = Encode::decode('utf8', $cgi->param('desc'));
my $UI_inuse = Encode::decode('utf8', $cgi->param('UI_inuse'));
...
my $newBM = {   url => $newurl,
    title => $newtitle,
    descr => $newdesc,
    UI_inuse => $UI_inuse,
};
...

该脚本创建几个参数与信息数组,然后以后,调用FILEWRITE功能将写的内容到磁盘上的XML文件。

代码语言:javascript
复制
if ($newBM->{url} =~ /^\/){
   push @{$doc->{filesystems}->{filesystem}}, $newBM;
 } else { # bookmark
   push @{$doc->{bookmarks}->{bookmark}}, $newBM;
 }
// Writing XML file to disk
 $user->filewrite($doc);

通过进一步的研究,我们发现可以在XML文件上插入特定的指令,如果通过模板引擎解析该指令可以执行命令。

模板解析的示例可以在下面找到:

再次探讨我们的漏洞利用,我们现在有了部分文件写入原语,可用于注入Perl Template Toolkit指令,但仍需要一种方法来强制脚本解析模板。

在实际使用模板的代码上找到所有引用,Handler.pm模块看起来很有希望:

tmplfile $变量是从HTTP请求路径构建一个新的模板是建立与该文件进行处理。

将我们先前创建的test.xml文件复制到模板目录,即可触发模板解析。

概括地说,为了利用此漏洞,应遵循以下步骤:

  1. 探索通过模板执行Perl代码的方法(需要绕过),
  2. 使用路径遍历将精心制作的XML文件写入模板目录,
  3. 浏览到上载的XML文件,触发模板解析。

最后一个难题是使用模板执行任意命令,在默认配置下,这是“不可能”的。有一个未记录的功能,它允许执行任意的perl代码,但是目前,我们不打算记录此技术。但是,使用此信息安全团队应具有足够的详细信息来重现此问题,但没有用于执行代码的详细信息。

由于受影响的设备数量众多,MDSec决定不提供针对此漏洞的现成攻击,但是我们知道多个参与者现在已为该漏洞提供了武器,并认为分享这项研究很重要,以便其他人可以采取适当的措施。

视频链接:https://youtu.be/5U5Hk2CzIAk

效果图

0x02:预防

Citrix发布了缓解措施,以防止利用此问题,如CVE-2019-19781的缓解步骤中所述。强烈建议任何Citrix ADC用户将此缓解措施作为当务之急。

此外,可以通过警告包含带有"/V**s/"和"/../"字符串的POST请求的URL,然后是对以xml扩展名结尾的文件的GET请求(由@突出显示)来识别对利用尝试的检测。

本文翻译至:

代码语言:javascript
复制
https://www.mdsec.co.uk/2020/01/deep-dive-to-citrix-adc-remote-code-execution-cve-2019-19781/
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-01-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 洛米唯熊 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
多因子身份认证
多因子身份认证(Multi-factor Authentication Service,MFAS)的目的是建立一个多层次的防御体系,通过结合两种或三种认证因子(基于记忆的/基于持有物的/基于生物特征的认证因子)验证访问者的身份,使系统或资源更加安全。攻击者即使破解单一因子(如口令、人脸),应用的安全依然可以得到保障。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档