Adminxe's Blog | 低调求发展 - 潜心习安全 ,技术永无止境 | 谢谢您对本站的支持,有什么问题或者建议请及时联系:点击这里给我发消息

CVE-2019-19781 Citrix ADC&NetScaler远程命令执行漏洞

漏洞复现 Adminxe 2697℃ 0评论

未经允许,不得擅自转载,违者必究

一、前言

@Adminxe

因为最近在刷edusrc,由此发现这个漏洞,涉及多所高校,所以过来给大家实战POC测试一波,可直接进行命令执行,Citrix产品中的漏洞使80000家公司面临风险,漏洞危害程度:严重!!!

二、漏洞详情

CVE-2019-19781 漏洞可能导致在 NetScaler ADC 或 NetScaler Gateway 上任意代码执行。
Citrix在2019年12月17日发布了安全公告 CTX267027 ( https://support.citrix.com/article/CTX267027 )
CVE-2019-19781的缓解步骤 CTX267679 ( https://support.citrix.com/article/CTX267679 )
缓解策略是阻止通过任何IP(VIP,例如vpn vserver或启用管理的nsip / snips)进行访问。nsapimgr命令确保全局绑定的响应者策略(可通过任何VIP保护所有Web请求)也将适用于管理ip。目前,建议是保护所有入口点。

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

漏洞分析尽管没有公开披露如何利用此问题的详细信息,但Citrix的缓解建议显示了这种漏洞类型的潜在线索。

从此信息中,我们可以看到漏洞可能存在的路径(/ vpns /),这可能是目录遍历漏洞。考虑到这一点,我们开始在httpd.conf文件中查找/ vpns路径的定义,并发现/ vpn / portal / scripts /由NetScaler :: Portal :: Handler Perl模块(Handler.pm)处理。 )。

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

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

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脚本文件:

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,
};
...

该脚本使用来自几个参数的信息创建一个数组,然后调用文件写入函数,该函数会将内容写入磁盘上的XML文件。

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

本质上,我们有一个部分文件写入原语,在这里我们控制路径而不是文件扩展名,并控制xml文件中的某些内容。仅凭此漏洞,我们几乎无能为力,但是在看到Craig Yong的文章后,它强调了使用Perl模板工具包进行开发的潜在途径。

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

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

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

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

$ tmplfile变量是从HTTP请求路径构造的,并为该文件构建并处理了一个新模板。

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

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

探索一种通过模板执行perl代码的方法(需要绕过),使用路径遍历在模板目录上编写精巧的XML文件,浏览到上载的XML文件,触发模板解析。最后一个难题是使用模板执行任意命令,在默认配置下,这是“不可能”的。有一个未记录的功能,它允许执行任意的perl代码,但是目前,我们不打算记录此技术。但是,使用此信息安全团队应具有足够的详细信息来重现此问题,但没有用于执行代码的详细信息。

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

漏洞利用的示例如下所示:

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

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

三、POC测试:

先把exploit脚本献上:

https://github.com/projectzeroindia/CVE-2019-19781

https://www.exploit-db.com/exploits/47902

POC测试脚本代码:

复现开始:

随机采集某大学站点:

工具:BurpSuite

站点:http://212.95.XXX.XXX/

从poc代码中可以看,主要是通过目录遍历漏洞测试URL+/vpn/../vpns/cfg/smb.conf

所以我们可以对/vpn/../vpns/cfg/smb.conf就行burp抓包改包操作

附加信息

优先权冲突

给予响应者策略的优先级为1。如果还有其他具有相同优先级的响应者策略绑定,则策略绑定可能会失败。建议客户适当调整其他策略的优先级,同时确保此处给出的策略具有优先级1


‘skip_systemaccess_policyeval’标志

此标志可确保在管理门户流量上评估响应者策略。
如果管理门户IP在安全环境中,则不需要此旋钮。 
启用此功能可能会导致某些管理页面受阻。在这种情况下,客户可以在维护窗口期间切换标志并将其设置回值“ 1”。
 

从集群中删除的节点很容易受到攻击

删除群集节点后,将清除其配置。以上响应者策略及其附带的保护也已清除。因此,该节点将失去这些缓解步骤提供的保护。

管理员界面中的插件下载链接

当前的管理用户界面具有下载插件的链接(/vpns/scripts/vista/*.exe)。此链接中包含“ vpns”,因此在此修复之后将无法访问。

/ vpns /在后端网址中

如果任何后端Web服务器资源的路径中都有/ vpns /,则该资源将被阻止。

转载请注明:Adminxe's Blog » CVE-2019-19781 Citrix ADC&NetScaler远程命令执行漏洞

喜欢 (8)or分享 (0)
发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址