首页 » NetworkSec » Penetration » 正文

citrix netscaler网关RCE漏洞重现及分析(CVE-2019-19781)

0x00 概述

201912,网上爆出citrix网管的rce漏洞,具体细节已公开(20200111),此漏洞无需身份验证,影响较大(8w)。首先利用目录穿越(有限文件读取)写入恶意xml文件到特定目录,再利用模板解析造成rce。

 

0x01 漏洞重现

 

 

 

0x02 修复方案

参考官方
https://support.citrix.com/article/CTX267027

 

0x03 漏洞分析

//图片来自https://twitter.com/mpgn_x64

从HTTP_NSC_USER获取$username,变量的过滤被注释了……

UsersPrefs perl module:

所以攻击者可以控制$username,作为后续的xml文件名,比如设置成../../some/path造成目录穿越,导致写入到任意目录(./portal/templates/)
而且这个xml内容的title和desc可控
//所有调用这个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,
};
...

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

调用filewrite方法写入一些数据到$doc,即可控的文件名($username)。

当恶意的xml文件(Perl Template Toolkit)写入到./portal/templates/这个目录下,利用GET请求/vpn/../vpns/portal/zxcxz.xml就可以使模板工具包引擎加载解析这个恶意xml文件造成rce。

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

 

0x04 参考资料

https://twitter.com/mpgn_x64

https://www.mdsec.co.uk/2020/01/deep-dive-to-citrix-adc-remote-code-execution-cve-2019-19781/

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

Comment

please input captcha *