某友NCCloud黑名单绕过分析
字数 1407 2025-08-20 18:18:05
某友NCCloud黑名单绕过分析技术文档
1. 漏洞背景
某友NCCloud是一款广泛使用的企业级软件,其反序列化漏洞在安全研究中备受关注。在NC6.5版本中,常见的利用链是通过Commons Collections(CC)链实现任意方法调用。然而,新补丁中添加了CC黑名单,导致传统利用链失效。
2. 补丁分析
2.1 黑名单机制
新补丁中引入了反序列化黑名单,部分被拦截的类包括:
- 传统CC链中的关键类
- 其他已知的恶意反序列化类
2.2 安全限制增强
补丁还实施了以下安全措施:
- 默认禁用
jdk.xml.enableTemplatesImplDeserialization系统属性 - 抛出明确异常阻止TemplatesImpl反序列化:
java.lang.UnsupportedOperationException: 启用了 Java 安全时, 将禁用对反序列化 TemplatesImpl 的支持。可以通过将 jdk.xml.enableTemplatesImplDeserialization 系统属性设置为"真"来覆盖此设置。
3. 绕过技术分析
3.1 TemplatesImpl限制的根源
- Apache官方在2015年声明中指出了
com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl被滥用的问题 - 解决方案是通过
jdk.xml.enableTemplatesImplDeserialization系统属性控制反序列化行为 - 该属性默认禁用,且NCCloud强制保持禁用状态
3.2 替代利用链构建
3.2.1 JNDI注入替代方案
由于TemplatesImpl被限制,转向JNDI注入实现RCE:
- 适用环境:JDK高版本下需结合本地Factory类
- 优势:不受
enableTemplatesImplDeserialization限制
3.2.2 利用BeanShell(bsh)
在NC环境中常见的可利用组件:
- 满足条件:
- 具有无参构造方法
- 包含
eval(String)方法可执行bsh脚本
- 可加载恶意字节码实现代码执行
3.2.3 JdbcRowSetImpl利用
构造恶意JdbcRowSetImpl对象:
- 触发JNDI注入
- 结合前半段反序列化链完成攻击
3.3 完整利用链构建
-
前半段:使用黑名单外的反序列化链
- 避开补丁中的恶意类名检测
- 实现任意getter方法调用
-
后半段:JNDI注入
- 通过JdbcRowSetImpl触发
- 或通过BeanShell执行恶意代码
4. 环境适配考量
-
Tomcat版本适配:
- 低于8的版本缺少
javax.el.ELProcessor - 需选择更通用的利用方式
- 低于8的版本缺少
-
依赖组件分析:
- 确认bsh等组件的存在
- 根据实际环境调整利用链
5. 防御建议
-
对于NCCloud用户:
- 及时更新至最新补丁版本
- 监控反序列化操作日志
-
通用防御措施:
- 限制不必要的反序列化操作
- 实施严格的输入验证
- 使用安全管理器限制敏感操作
-
针对JNDI攻击:
- 升级JDK至最新版本
- 配置
com.sun.jndi.object.trustURLCodebase为false
6. 技术验证
测试效果验证:
- 成功绕过黑名单限制
- 实现RCE效果
- 在多种NCCloud环境中验证可用性
7. 总结
本文详细分析了某友NCCloud反序列化黑名单的绕过技术,重点包括:
- 传统TemplatesImpl利用链被阻断的机制
- 通过JNDI注入和BeanShell的替代方案
- 完整利用链的构建方法
- 不同环境下的适配策略
该研究揭示了即使实施了严格的黑名单机制,通过组合利用不同技术点仍可能实现漏洞利用,强调了纵深防御的重要性。