未经允许,不得擅自转载,违者必究
一、前言
@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远程命令执行漏洞