CVE-2019-19781: Citrix ADC RCE漏洞分析 - 嘶吼 RoarTalk – 网络安全行业综合服务平台,4hou.com

CVE-2019-19781: Citrix ADC RCE漏洞分析

ang010ela 资讯 2020-01-13 11:10:00
1361005
收藏

导语:上个月,研究人员在Citrix ADC和Citrix网关设备中发现一个严重漏洞——CVE-2019-19781。未授权的攻击者可以利用该漏洞来入侵设备。

上个月,研究人员在Citrix ADC和Citrix网关设备中发现一个严重漏洞——CVE-2019-19781。未授权的攻击者可以利用该漏洞来入侵设备。但Positive Technologies和Paddy Power Betfair在发现该漏洞后并没有公布漏洞相关的细节。

漏洞分析

虽然没有公布漏洞相关的细节,但Citrix仍然发布的公告中仍然给出了该漏洞类型的一些线索。

从以上信息可以发现,漏洞存在于路径/vpns/中,因此这可能是一个目录遍历漏洞。因此,研究人员开始在 httpd.conf 文件中寻找路径/vpns的定义,发现/vpn/portal/scripts/ 是由NetScaler::Portal::Handler Perl Module (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.”); {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 header中构建了一个路径。最后,调用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文件的 filewrite函数。

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 的文章https://www.tripwire.com/state-of-security/vert/citrix-netscaler-cve-2019-19781-what-you-need-to-know/

研究人员进一步分析发现可以插入特定指令到XML文件中,如果模板引擎分析后就会用来执行命令。模板分析示例如下:

 

有了部分文件写原语后就可以用来注入Perl Template Toolkit指令,但仍然需要强制脚本分析模板的方法。

研究人员在代码中找了所有使用模板的引用,发现了Handler.pm模块:

变量$tmplfile是从HTTP Request Path构建的,新版本构建后就会用来处理该文件。复制前面创建模板目录的 test.xml 文件,就可以触发模板分析。

为了利用该漏洞,需要通过以下步骤:

· 找到一种通过模板执行perl代码的方法

· 使用路径遍历方法将伪造的XML文件写入模板目录;

· 浏览上传的XML文件,触发模板分析。

最后一步是使用模板来执行任意命令,但这在默认配置中是不可能的。允许任意perl代码执行是一个没有记录的特征。但使用该信息研究人员有足够的信息来重新该问题。由于有大量的设备受到影响,MDSec决定不为该漏洞提供漏洞利用,但同时也有多个攻击者开始武器化该漏洞。

PoC

PoC代码见:

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

CVE-2019-19781.sh demo

漏洞利用PoC视频如下:

https://www.youtube.com/embed/5U5Hk2CzIAk

解决办法

Citrix也发布了缓解CVE-2019-19781漏洞的公告,研究人员建议Citrix ADC用户遵循该步骤。同时,可以对含有 “/vpns/”和“/../”字符串的POST请求的URL和为以xml扩展中含有@buffaloverflow的GET请求发出告警来实现对漏洞利用的检测。


本文翻译自:https://www.mdsec.co.uk/2020/01/deep-dive-to-citrix-adc-remote-code-execution-cve-2019-19781/如若转载,请注明原文地址
  • 分享至
取消

感谢您的支持,我会继续努力的!

扫码支持

打开微信扫一扫后点击右上角即可分享哟

发表评论

 
本站4hou.com,所使用的字体和图片文字等素材部分来源于原作者或互联网共享平台。如使用任何字体和图片文字有侵犯其版权所有方的,嘶吼将配合联系原作者核实,并做出删除处理。
©2024 北京嘶吼文化传媒有限公司 京ICP备16063439号-1 本站由 提供云计算服务