SD-PWN第二部分 — Citrix SD-WAN Center — 又一次网络接管
众所周知,Citrix非常重视安全性。这是我们如何在Citrix SD-WAN平台中获得远程代码执行的故事。
公平地说,我们对Silver Peak和其他两家领先的网络公司也做了同样的事情,这些将在未来的文章中披露。我们发现的所有漏洞都允许完整的远程代码执行。这是否代表了SD-WAN安全整体存在的问题?
如果您使用Citrix SD-WAN,请确保立即更新。这是一个主要漏洞,允许某人拦截流量或摧毁您的整个国际网络。
谁不喜欢Cake
Tenable的Chris Lyne之前研究过Citrix SD-WAN。他提出了一个一直延伸到SD-WAN设备的RCE链。他的《Bug猎手的CakePHP入门》对我们帮助很大。
Citrix SD-WAN基础设施没有太大变化。它仍然在Apache上运行,使用CakePHP2作为框架。
安全审计最重要的部分之一是检查过去的工作,并验证过去的修复是否已正确实施。Tenable提出的主要bug是通过使用Collector端点访问诊断来绕过身份验证。Citrix决定通过在/etc/apache2/sites-enabled/talari的apache配置中添加以下访问限制来阻止此访问:
|
|
这看起来很合理。要使用Collector端点,您必须提供由供应商签名的客户端证书。由于我们没有找到任何绕过此限制的方法,我们无法发送以/Collector/开头的请求。但是CakePHP2框架如何处理URL?让我们看看CakeRequest.php中的_url函数:
|
|
换句话说,如果我们的REQUEST_URI在://之后包含?,URI的开头将被删除。这将导致Apache看待URI的方式与CakePHP分析它的方式之间存在差异,这反过来允许我们绕过Collector端点的客户端证书检查。形式为aaaaaaaaaaaaaaaaa/://?/collector/diagnostics/stop_ping的URI将转换为/collector/diagnostics/stop_ping,并且既不需要客户端证书也不需要身份验证。
我们内部讨论了这是Citrix漏洞还是更广泛的CakePHP2漏洞。我们还没有得出结论,很想听听您的意见。
实际的CVE:
未经身份验证的路径遍历和Shell注入在stop_ping中 — CVE-2020–8271
/collector/diagnostics/stop_ping端点读取文件"/tmp/pid_" . $req_id并将其内容用于shell_exec调用。对用户提供的$req_id没有执行任何清理,这允许路径遍历。可以在任何地方放置具有用户控制内容的文件(例如,使用/collector/licensing/upload)并运行任意shell命令。
ConfigEditor身份验证绕过 — CVE-2020–8272
这是一个与CakePHP如何将URI转换为端点函数参数相关的有趣bug。端点名称后的URI路径的每个元素将被视为处理程序函数参数。如果我们有路由器定义:
|
|
而我们的处理程序定义是:
|
|
$auth参数专门用于内部调用,不应从外部设置。但是,使用以下URI:
|
|
将导致以下参数分配:
|
|
由于现在分配了$auth参数,所有configEditor功能都可以在没有身份验证的情况下访问。
CreateAzureDeployment Shell注入 — CVE-2020–8273
在AzureDeployment/createAzureDeployment端点中,用户提供的数据正在被JSON编码并使用以下代码连接到exec调用:
|
|
传递形式为{"loginData": "test';ping -c 5 192.168.1.1;'", "param": "1"}的参数将运行shell命令ping -c 5 192.168.1.1。
RCE链
结合Collector身份验证绕过和stop_ping shell注入将导致预身份验证的远程代码执行。这是一个利用脚本:
RealmodeLabs/SD-PWN 各种SD-WAN供应商的RCE脚本。通过在GitHub上创建帐户为RealmodeLabs/SD-PWN开发做贡献。 github.com
结束语
我们在这篇文章中展示了Citrix SD-WAN Center中的两个身份验证绕过和两个shell注入。
为Citrix辩护,我们承认很难预料到CakePHP会以这种方式处理URL。这就是为什么对产品执行专门的安全审计如此重要。
如果您想在其他人之前了解下一个SD-PWN漏洞,请确保在LinkedIn上关注我们或通过contact@realmodelabs.com联系我们。