【漏洞预警】Palo Alto Networks PAN-OS命令执行漏洞(CVE-2020-2038)

该漏洞的风险等级极高,由Knownsec提交在知道创宇的漏洞列表中

漏洞分析

授权的RCE#1

【漏洞预警】Palo Alto Networks PAN-OS命令执行漏洞(CVE-2020-2038)

在对防火墙Web管理界面进行黑盒分析期间检测到第一个漏洞,该漏洞是由于缺少用户输入过滤而导致的。PHP脚本处理用户请求,然后将所有相关数据转发到侦听本地端口的服务。它解析数据,并将结果返回给Web应用程序的用户。

要利用CVE-2020-2037漏洞,我们首先登录Web管理界面。

【漏洞预警】Palo Alto Networks PAN-OS命令执行漏洞(CVE-2020-2038)1

在“对象”选项卡上,转到“外部动态列表”。

【漏洞预警】Palo Alto Networks PAN-OS命令执行漏洞(CVE-2020-2038)2

现在,我们需要添加一个新的列表源,并在“源”字段中输入有效负载。重要的是要注意,此漏洞是盲目的OS命令注入。需要外部服务或带外有效负载才能查看结果。

【漏洞预警】Palo Alto Networks PAN-OS命令执行漏洞(CVE-2020-2038)3

盲目命令注入的分步发现:

有效载荷服务器响应
http://myServer/URL访问错误
http://myServer/'不能打开文件
http://myServer/''URL访问错误
http://myServer/'||'URL可访问
http://myServer/'`sleep 5`'URL访问错误(5秒后)

产品状态

版本号做作的
PAN OS 10.0没有
PAN OS 9.1<9.1.3
PAN OS 9.0<9.0.10
PAN OS 8.1<8.1.16

授权的RCE#2

另一个漏洞涉及对用户输入的过滤不足。

对Web目录的详细检查显示该文件夹/var/appweb/htdocs/php/rest包含PHP文件。该文件RestApi.php包含一个描述客户端通过RestApi请求(XML查询)与PAN-OS交互的类。通过仔细检查脚本,找到了RestApi类的execute方法。

【漏洞预警】Palo Alto Networks PAN-OS命令执行漏洞(CVE-2020-2038)4

身份验证是使用此方法的先决条件。满足所有先决条件使用户可以处理不同类型的请求。我们在PAN-OS XML API请求类型以及操作运行操作模式命令(API)的Palo Alto Networks官方文档中找到了这些请求的描述。这些信息极大地促进了我们的分析。

我们的主要兴趣是op(操作模式命令)请求,该请求调用了buildOpRequest(私有方法)处理程序,并允许执行某些诊断系统调用。检查了请求内容的必需cmd参数:

【漏洞预警】Palo Alto Networks PAN-OS命令执行漏洞(CVE-2020-2038)5

据推测,此方法组装了一个XML请求,该请求已发送到第三方服务器以执行。通过分析PAN-OS内部,可以识别收件人:mgmt服务。该服务负责我们的请求的后续处理。

通过查看官方文档并在二进制文件上运行字符串,我们能够找到负责解析和分析系统命令的库。现在我们知道了感兴趣的处理程序。然后确定xml中的命令参数值是按原样提取的,并在格式字符串的帮助下插入到传递给/bin/sh -c <сmd>执行的命令中。

但是,事实证明这比预期要棘手。正如我们稍后发现的,在某一时刻,请求内容被过滤并检查正确性。这阻止了我们直接执行发送的命令,尽管仍然可以不受任何限制地提取它们。

【漏洞预警】Palo Alto Networks PAN-OS命令执行漏洞(CVE-2020-2038)6

我们最终克服了这一挫折,这归功于XML内容处理中的某些细微之处,最终使我们能够调用任意系统命令。

产品状态

版本号做作的
PAN OS 10.0<10.0.1
PAN OS 9.1<9.1.4
PAN OS 9.0<9.0.10
PAN OS 8.1没有

未经身份验证的DoS

以下漏洞允许任何未经身份验证的用户进行DoS攻击。结果,Palo Alto Networks NGFW网站管理面板可能变得完全不可用。

防火墙使用Nginx Web服务器。主要的Nginx配置文件位于/etc/nginx/nginx.conf

...

upstream backend_mgmt {
      server 127.0.0.1:28250;
    }

...

     set $gohost "backend_mgmt";
     set $devonly  0;
     set $gohostExt  "";

...
  
 include conf/locations.conf;
 include conf/server*.conf;

主要配置包括其他配置文件。我们对该文件特别感兴趣/etc/nginx/conf/locations.conf

...

location /upload {
    error_page 402 =200 @upload_regular; return 402;
}

...

location @upload_regular {
    upload_pass @back_upload_regular;
    include conf/upload_default.conf;
}

location @back_upload_regular {
    proxy_intercept_errors on;
    include conf/proxy_default.conf;
    proxy_pass http://$gohost$gohostExt;
}

...

在这里我们看到了/uploadURL的处理。对此URL的请求在内部重定向到命名位置upload_regular。请求体传递到back_upload_regular/etc/nginx/conf/upload_default.conf配置文件包括在内,我们将在后面讨论了一下。最后,该请求被代理到http:// $ gohost $ gohostExt(http://127.0.0.1:28250),该服务器原来是本地Apache Web服务器。现在让我们upload_default.conf更仔细地看看。


    upload_pass_args on;

    # Store files to this directory
    # The directory is hashed, subdirectories 0 1 2 3 4 5 6 7 8 9 should exist
    upload_store /opt/pancfg/tmp;

    # Allow uploaded files to be read only by user
    upload_store_access user:rw;

    # Set specified fields in request body
    upload_set_form_field "FILE_CLIENT_FILENAME_${upload_field_name}" "$upload_file_name";
    upload_set_form_field "FILE_CONTENT_TYPE_${upload_field_name}" "$upload_content_type";
    upload_set_form_field "FILE_FILENAME_${upload_field_name}" "$upload_tmp_path";

    # Inform backend about hash and size of a file
    upload_aggregate_form_field "FILE_MD5_${upload_field_name}" "$upload_file_md5";
    upload_aggregate_form_field "FILE_SIZE_${upload_field_name}" "$upload_file_size";

    upload_pass_form_field "(.*)";

    upload_cleanup 400 404 499 500-505;

该文件进行配置nginx-upload-module。该模块从用户那里获取文件并将其存储在系统上。在我们的例子中,可以通过URL访问该模块/upload请注意upload_cleanup,如果返回了代码400、404、499或500-505,该指令将删除上载的文件。

通过向发送POST请求/upload,我们可以看到Apache响应代码为301(在响应主体中可见),而nginx代理响应消息为200。这些特殊代码不会触发删除上传的文件。

【漏洞预警】Palo Alto Networks PAN-OS命令执行漏洞(CVE-2020-2038)7

为了验证该漏洞,我们尝试将大量文件上传到服务器。最初,主磁盘具有15 GB的可用空间。

【漏洞预警】Palo Alto Networks PAN-OS命令执行漏洞(CVE-2020-2038)8

攻击后,它已100%充满。

【漏洞预警】Palo Alto Networks PAN-OS命令执行漏洞(CVE-2020-2038)9

我们试图打开Web管理界面,但无法登录。这很可能是由于缺少可用的磁盘空间,PHP无法在磁盘上创建会话文件而发生的。

结果,我们能够对未经身份验证的用户帕洛阿尔托NGFW组件进行DoS攻击。

产品状态

版本号做作的
PAN OS 10.0<10.0.1
PAN OS 9.1<9.1.4
PAN OS 9.0<9.0.10
PAN OS 8.1<8.1.16

反映的XSS

在脚本中发现了最后一个漏洞/unauth/php/change_password.php

【漏洞预警】Palo Alto Networks PAN-OS命令执行漏洞(CVE-2020-2038)10

该脚本利用了由$_SERVER['PHP_SELF']用户控制的变量。该变量无需任何过滤即可插入到表单标签的属性值中,从而使XSS漏洞易于利用。

【漏洞预警】Palo Alto Networks PAN-OS命令执行漏洞(CVE-2020-2038)11

产品状态

版本号做作的
PAN OS 10.0没有
PAN OS 9.1没有
PAN OS 9.0<9.0.9
PAN OS 8.1<8.1.16

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
大佬不来一句? 抢沙发

请登录后发表评论