JAVA代审之publiccmsV4最新版
字数 1218 2025-08-22 12:23:30
PublicCMS V4 最新版安全审计报告
项目概述
PublicCMS 是一个现代化 Java CMS 系统,具有以下特点:
- 200多万行代码,持续迭代8年
- 支持静态化、服务器端包含、多级缓存、全文搜索
- 支持中、繁、日、英多语言
- 全球用户占比0.0005%(W3Techs数据)
- 轻松支撑千万级数据和PV
环境搭建
-
源码获取:
- 项目地址:https://gitee.com/sanluan/PublicCMS/archive/refs/tags/V4.0.202406.d.zip
- 下载后使用IDEA打开
-
运行配置:
- 配置Tomcat服务器
- 启动后访问 http://localhost:8080/
- 按照指引配置数据库
-
后台访问:
- 安装过程中设置管理员账号密码
- 登录后台进行管理
漏洞分析
1. 任意文件上传漏洞
漏洞位置:后台文件操作功能
漏洞详情:
-
文件上传前会触发check方法进行验证:
- 限制目录穿越(防止../)
- 白名单文件后缀检查(包括.mp3, .wav, .mid, .flv, .swf等40多种格式)
- 允许上传zip文件
-
Zip文件解压漏洞:
- 系统提供zip解压功能
- 仅验证zip文件本身,未对zip内文件进行校验
- 虽然防止了目录穿越,但可在指定目录(data\publiccms\web\site_1\)上传任意文件
利用限制:
- 无法目录穿越
- 上传位置受限
2. 存储型XSS漏洞
漏洞位置:后台模板编辑功能
漏洞详情:
- 早期版本存在SSTI(服务器端模板注入)漏洞,最新版已修复
- 但仍可通过模板编辑功能注入并存储JS代码
- 需要后台权限,利用价值有限
3. SSRF漏洞
漏洞位置:
PublicCMS-V4\publiccms-parent\publiccms-core\src\main\java\com\publiccms\controller\admin\sys\UeditorAdminController.java
漏洞详情:
- 通过
.execute()方法执行外部请求 - 完整路由:
/admin/ueditor - 请求地址通过
file[]参数传入 - 支持GET和POST请求(GET请求需对
[]进行URL编码)
安全建议
-
文件上传:
- 对zip内文件进行后缀名检查
- 限制解压后文件的存放位置
- 增加内容类型检查
-
XSS防护:
- 对模板编辑内容进行更严格的过滤
- 实现CSP(内容安全策略)
-
SSRF防护:
- 限制请求的目标地址(白名单或内网限制)
- 验证URL格式
- 禁用危险的协议(file://, gopher://等)
-
其他建议:
- 定期更新依赖库
- 实施严格的权限控制
- 增加安全审计日志
总结
PublicCMS V4最新版修复了早期版本的一些严重漏洞,但仍存在一些安全问题,特别是需要后台权限的漏洞。开发团队应继续加强安全防护,特别是对用户输入的处理和权限控制机制。