用友NC反序列化远程命令执行“0-Day”漏洞

来源:scanv2020.06.04

一 漏洞概述

2020年6月4日,知道创宇监测到有国内安全组织披露用友NC存在反序列化远程命令执行“0-Day”漏洞。经知道创宇安全团队分析,漏洞真实存在,攻击者通过构造特定的HTTP请求,可以成功利用漏洞在目标服务器上执行任意命令,该漏洞风险极大,可能造成严重的信息泄露事件。
用友NC是一款企业级管理软件,在近万家大中型企业使用。实现建模、开发、继承、运行、管理一体化的IT解决方案信息化平台,其代码实现逻辑上存在多处反序列化漏洞。
黑客通过构造特定的HTTP请求,成功利用漏洞可在目标服务器上执行任意命令,漏洞暂无安全补丁发布,属0Day等级,风险极大。黑客利用漏洞可完全控制服务器,获取服务器的敏感信息。

二 影响版本

所有版本

三 复现过程

以下复现内容参考网络安全应急技术国家工程实验室。

如图所示,通过UClient打开用友NC

UClient本质为UBroswer,一个专用的用友NC浏览器嵌入了JAVA运行环境,以解决NC 6系列之前的版本中applet在不同设备上的应用问题。经过文件目录查看分析得知用友UClient安装后,会在用户目录下新建uclient文件夹,文件结构如下所示:

其中apps中存储应用,downloads包含一些静态资源文件(logo等),log中是Uclient的运行日志,share中是UClient应用的java运行环境,其他的文件不是很重要,根据文件名理即可。

打开apps中的其中一个应用,文件结构如下:

根据看到的NCLogin65.jar文件,结合java运行进程信息,分析得知是一些界面和登陆逻辑代码,nc_client_home则是NC应用依赖的其他一些代码和jar包,因此可以使用Luyten反编译工具查看NCLogin65.jar:

通过简单运行NC应用,尝试进行用户登陆,使用wireshark抓包,发现流量经过加密处理:

查看app.log运行日志,发现大量serialize和deserialize,说明系统中应用了序列化方式来传送数据。

综合使用java agent和 jdwp的方式进行调试,java agent是为了准确定位打断点的位置。Java agent的Transformer代码如下,目的是将实时调用的类打印出来,方便打断点,jdwp调试不多说:

经过分析,我们在LoginUI类中的login方法打断点,启动Idea进行跟踪调试。

当跟踪到loginImple方法时,发现多处调用了NCLocator的lookup方法查找Service接口进行操作,结合日志中serialize和deserialize、客户端中多处的jar包和class类文件,分析得出这里肯定应用了RMI去远程中心加载类进行调用。

查看NCLocator发现是个抽象类,实现了Context接口,NCLocator有多个实现类,通过跟踪发现,实际使用了RmiNCLocator类,RmiNCLocator类的lookup方法如下:

看到这里的lookup,已初步判断出无需继续跟踪调试,可以直接通过jndi注入漏洞进行利用。

构造远程命令执行POC部署公网服务器,利用JNDI注入触发漏洞,即可看到来自目标的服务器的请求,证明我们成功利用反序列化远程命令执行漏洞在目标服务器上执行了whoami命令:

继续深入利用漏洞,进行反弹shell操作,并完全获取服务器的控制权限,可执行id、whoami、ifconfig等操作系统命令。

四 影响范围

全版本

五 修复建议

1.用友NC为商业软件,可直接联系用友官方获得安全升级方案;
2.在官方安全补丁发布之前,建议相关企业尽快临时关闭网站的对外访问;

六 相关链接

网络安全应急技术国家工程实验室:https://mp.weixin.qq.com/s/TkzQvw1iXjySoU9LJjLdRw

热门文章

关注知道创宇云安全

获取安全动态