U8cloud NCCloudGatewayServlet 漏洞分析与利用教学
一、 漏洞概述
- 漏洞组件:
NCCloudGatewayServlet - 影响产品: 用友 U8cloud 所有版本
- 漏洞类型:
- 远程命令执行 (RCE)
- 任意文件上传
- 危险等级: 严重 (Critical)
- 漏洞本质: 该Servlet作为U8cloud对外的统一网关服务,未能对接收的请求进行有效的身份认证、权限校验和参数过滤,导致攻击者可以构造恶意请求绕过所有安全机制,直接调用后端高风险内部方法。
二、 漏洞背景与定位
- U8cloud 架构理解:
U8cloud采用典型的多层B/S架构。NCCloudGatewayServlet通常位于网关层/接入层,作为许多前端请求(如移动端API)的统一入口。其设计初衷是接收请求、进行简单路由和协议转换,然后将请求转发给内部真正的业务服务(Service层)进行处理。 - Servlet 路径:
该Servlet的标准URL路径通常为:
这是漏洞利用的起点。http(s)://[target]:[port]/U8Cloud/NCCloudGatewayServlet
三、 漏洞核心成因分析
漏洞根源于 NCCloudGatewayServlet 的 doAction 方法。该方法处理POST请求,并从请求中获取关键参数(如 service、action、params 等),然后通过反射机制动态调用指定的后端Java类和方法。
关键缺陷:
- 缺失身份认证: 该Servlet自身不校验调用者身份(如Session、Token),允许未授权访问。
- 缺失权限控制: 调用内部服务(
service)和方法(action)前,未校验当前用户是否有权执行此操作。 - 危险的反序列化/参数传递: 请求中的参数(
params)被直接反序列化或传递给目标方法,没有进行安全过滤或白名单校验,导致攻击者可以控制方法调用的全部参数。
四、 漏洞利用链详解
利用过程的核心是构造一个特殊的POST请求,通过service和action参数指定一个高风险的内部服务和方法,并通过params参数传递恶意数据。
利用链一:任意文件上传 (IPFxxFileService)
这是获取Webshell最直接的途径。
-
目标服务: 通常为文件操作相关的Service,例如
IPFxxFileService(xx可能为具体模块名,如IPFDocumentFileService)。 -
目标方法:
uploadFile或类似方法。 -
恶意请求构造:
POST /U8Cloud/NCCloudGatewayServlet HTTP/1.1 Host: target.com:port Content-Type: application/x-www-form-urlencoded service=ipfxxfile&action=uploadFile¶ms={"参数名":"参数值"}params是一个JSON字符串,其具体结构需要分析后端代码,但通常包含:filePath: 指定文件上传的服务器路径(如../webapps/ROOT/shell.jsp)。fileData: 文件内容的Base64编码。- 或其他类似字段(如
fileID,fileContent等)。
-
利用过程:
a. 将恶意JSP Webshell代码进行Base64编码。
b. 构造paramsJSON对象,指定路径和内容。
c. 发送请求。若上传成功,响应中可能会包含文件路径或成功状态。
d. 直接访问上传的Webshell路径(如http://target.com:port/shell.jsp),完成利用。
利用链二:远程命令执行 (ActionInvoke)
这是更通用的命令执行方式,通过调用能够执行命令或代码的底层方法。
-
目标服务/方法: 可能存在多种,一个常见的入口是调用
ActionInvoke相关服务,或者直接调用包含runExec、invoke等方法的后台服务。 -
利用原理: 通过反射机制,最终调用到
java.lang.Runtime.getRuntime().exec()或ProcessBuilder().start()。 -
恶意请求构造:
POST /U8Cloud/NCCloudGatewayServlet HTTP/1.1 Host: target.com:port Content-Type: application/x-www-form-urlencoded service=某个底层服务&action=某个执行方法¶ms={"command":"whoami"}params中的参数名可能是command,cmd,expr,code等,取决于目标方法的具体定义。
-
利用过程:
a. 探测可用的Service和Action。这通常通过代码审计、fuzz测试或分析补丁比对来确定。
b. 构造请求,执行系统命令(如whoami,ifconfig, 或者写入Webshell的命令)。
c. 从HTTP响应中读取命令执行的结果(标准输出或错误输出)。
五、 漏洞检测与验证
- 指纹识别:
- 访问
/U8Cloud/目录,看是否有U8cloud的登录页面或特征。 - 检查HTTP响应头中的
Server、X-Powered-By等字段是否包含U8Cloud关键字。
- 访问
- 漏洞探测:
- 文件上传探测: 使用一个无害的文件(如一个只包含 `` 的txt文件)尝试上传,观察是否返回成功路径。
- 命令执行探测: 尝试执行
echo test123或ping -n 1 your-dnslog-domain(DNSLog探测),观察响应或是否有DNS查询记录。
六、 修复建议
- 官方补丁: 立即联系用友官方获取最新补丁并升级。修复方案通常包括:
- 在
NCCloudGatewayServlet入口添加严格的权限校验。 - 对可调用的
service和action建立严格的白名单机制。 - 对输入参数进行严格的过滤和校验。
- 在
- 临时缓解措施:
- 在WAF或网关设备上设置规则,拦截对
/NCCloudGatewayServlet路径的恶意请求,特别是包含uploadFile,ActionInvoke等关键字的请求体。 - 如果业务不需要此接口,可在反向代理(如Nginx)或应用服务器(如Tomcat)中配置规则,直接禁用或拦截对该Servlet的访问。
- 在WAF或网关设备上设置规则,拦截对
七、 总结
该漏洞是一个典型的 “网关型”未授权漏洞,由于架构设计上信任了所有传入请求,导致攻击者可以“为所欲为”。其危害极大,利用方式直接。在审计此类系统时,应重点关注:
- 所有无需认证即可访问的API接口和Servlet。
- 任何使用反射机制来动态调用类和方法的代码段。
- 接收JSON/XML等参数并直接进行反序列化操作的端点。
免责声明: 本文档仅用于安全研究与教学目的,请勿用于任何非法活动。在测试任何系统之前,请确保已获得明确的书面授权。