施耐德电气U.Motion Builder命令注入漏洞安全通告

发布时间 2019-05-22

漏洞编号和级别


CVE编号:CVE-2018-7841,危险级别:严重,CVSS分值:9.8


影响版本


Schneider Electric U.Motion Builder 1.3.4及之前版本


漏洞概述


Schneider Electric U.Motion Builder是法国施耐德电气(Schneider Electric)公司的一套建筑物智能管理系统。

Schneider Electric U.Motion Builder 1.3.4及之前版本中的track_import_export.php脚本中存在操作系统命令注入漏洞,该漏洞源于外部输入数据构造操作系统可执行命令过程中,网络系统或产品未正确过滤其中的特殊字符、命令等。攻击者可利用该漏洞执行非法操作系统命令。


漏洞验证


EXP:https://www.exploit-db.com/exploits/46846
CVE-2018-7841为CVE-2018-7765补丁绕过,U.Motion 1.3.4包含易受攻击的文件/smartdomuspad/modules/reporting/track_import_export.php,其中应用程序根据连接的object_id构造一个名为$ where的SQlite查询,该查询可以通过GET或POST提供:

 


你可以看到object_id首先被string_encode_for_SQLite方法解析,除了删除一些其他不可读的字符:

 


$ query之后用于调用$ dbClient-> query():

 


query()方法可以在dpaddbclient_NoDbManager_sqlite.class.php中找到:

 


在这里,您可以看到查询字符串(包含object_id)是通过一堆str_replace调用提供的,目的是过滤掉危险字符,例如$ for Unix命令替换,并且在片段末尾,您实际上可以看到 另一个字符串$ sqlite_cmd与先前构建的$ query字符串连接,最后传递给PHP exec()调用。


显然,施耐德电气试图通过以下方式解决之前报告的漏洞CVE-2018-7765:

 


正如您可能已经猜到的那样,仅仅过滤掉$不足以阻止命令注入exec()调用。 因此,为了绕过str_replace修复,可以简单地使用反引号运算符,如以下示例请求中所示:

 


产生一个漂亮的反向shell:

 


修复建议


目前厂商暂未发布修复措施解决此安全问题,建议使用此软件的用户随时关注厂商主页或参考网址以获取解决办法:

https://www.rcesecurity.com/


参考链接


https://packetstormsecurity.com/files/152862/Schneider-Electric-U.Motion-Builder-1.3.4-Command-Injection.html