JPress UCenter文章更新越权CVE-2026-9376
JPress是一款国产、开源、基于 Java(JFinal)高性能CMS(内容管理系统),定位类似 WordPress,但更贴合国内生态与安全需求。
一、基本情况
JPress 是一个使用Java开发的开源建站工具,Java 开发、MVC 架构、支持热部署,高安全、高性能、高并发,适合信创与等保场景。

JPress 可以简单理解为Java版国产 WordPress,安全、快速、接地气,适合建博客、官网、门户站,自主可控、代码自研,安全可靠。
栋科技漏洞库关注到JPress 1.0.3版本的用户中心文章编辑功能存在授权不当漏洞,现已被追踪为CVE-2026-9376,CVSS 3.X评分6.3。
二、漏洞分析
CVE-2026-9376漏洞是 JPress 的UCenter用户中心存在的文章更新越权漏洞,这是一个位于用户中心文章编辑功能存在授权不当漏洞。
漏洞源于接口POST /ucenter/article/doWriteSave允许已登录用户传入已有文章编号,系统未充分校验目标文章归属者便执行更新操作。
这意味着低权限登录用户只要获取或枚举到有效文章 ID,即可篡改、覆盖他人发布的文章。
具体情况如下:
由于UCenter 模块 doWriteSave 方法在处理文章更新时通过 article.setUserId(getLoginedUser().getId()) 先将 userId 覆盖为当前用户,
再调用 notLoginedUserModel(article) 进行权限校验。
由于 userId 已被覆盖,校验逻辑无法正确识别文章原始作者,
攻击者只需在请求中传入他人文章的 id 参数即可绕过校验,修改任意用户的文章内容。
修复版本中通过调整校验顺序,在覆盖 userId 之前先从数据库查询文章并验证其归属,确保只有文章作者才能执行更新操作。
1、受影响接口
POST /ucenter/article/doWriteSave
2、源码层级调用流程
POST /ucenter/article/doWriteSave
→ ArticleUCenterController.doWriteSave()
→ request binds Article with user-controlled id
→ JbootServiceBase.saveOrUpdate(model)
→ existing id may trigger update
→ ownership check appears to be missing or insufficient
更新流程依赖于用户可控的文章 ID。
当提交的 ID 对应到一篇已存在的文章时,保存或更新逻辑可能会直接进入更新流程,而没有充分执行归属权校验。
3、建议修复方案
在更新一篇已存在的文章之前,应用应从数据库中加载原始文章记录,并验证文章归属权。
例如:
Article oldArticle = articleService.findById(article.getId());
if (oldArticle == null) {
return error;
}
if (!oldArticle.getUserId().equals(currentUser.getId())) {
return forbidden;
}
应用不应直接信任客户端提交的编号及用户标识。
三、影响范围
JPress ≤ 1.0.3
四、修复建议
JPress > 1.0.3
五、参考链接
管理员已设置登录后刷新可查看