ZrLog v2.1.11代码审计
字数 1636 2025-08-22 12:23:19

ZrLog v2.1.11 代码审计报告与漏洞分析

1. 系统概述

ZrLog 是一款使用 Java 开发的博客/CMS 程序,具有以下特点:

  • 简约易用
  • 组件化设计
  • 内存占用低
  • 自带 Markdown 编辑器

2. 审计发现的安全漏洞

2.1 CSRF 漏洞(个人信息修改)

漏洞分析

  1. 框架分析

    • 检查 pom.xml 文件,确认未使用 Spring 框架及 spring-security 组件
    • 缺少对 CSRF 的默认防护机制
  2. 路由分析

    • web.xml 中通过 com.zrlog.web.config.ZrLogConfig 进行访问控制
    • configRoute 方法包含三条路由,其中管理员路由由 AdminRoutes 控制
    • /api/admin 接口由 AdminController 类控制
  3. 漏洞点

    • AdminController 类的 update 方法处理个人信息修改
    • 方法流程:
      • 解析请求体
      • 检查必要参数
      • 根据运行模式和用户权限处理
      • 返回响应对象
    • 整个流程未经过任何 filter 类拦截

漏洞复现步骤

  1. 登录后台,进入个人信息页面
  2. 修改任意信息并提交,使用 Burp Suite 拦截请求
  3. 修改 email 参数为 test_test@qq.com
  4. 使用 Burp Suite 生成 CSRF POC
  5. 启动 HTTP 服务,浏览器访问 POC 页面
  6. 提交请求后,验证邮箱信息是否被修改

2.2 XSS 漏洞(个人信息处)

漏洞分析

  1. 漏洞点

    • 个人信息接口未对输入进行 XSS 过滤
    • 可与 CSRF 形成组合攻击(CSRF+XSS 获取 cookie)
  2. 限制条件

    • 输入长度限制为 15 个字符
    • 超过长度会报错

漏洞验证

  1. 尝试输入 XSS payload 发现长度限制
  2. 输入 1<script>alert(1)</script> 测试(受长度限制无法完整输入)
  3. 确认存在 XSS 漏洞但受长度限制难以利用

2.3 CSRF 漏洞(文章修改)

漏洞分析

  1. 路由分析

    • AdminRoutes 类中的文章处理接口
    • ArticleController 类的 update 方法处理文章更新
  2. 调用链

    • update 方法调用 articleService.update()
    • articleService 实例化为 ArticleService 类(位于 service-2.1.1.jar
    • update 方法调用 save 方法处理创建/更新文章
  3. 漏洞点

    • 整个流程无 CSRF 防护机制
    • 可未经授权修改文章内容

漏洞复现步骤

  1. 登录后台,进入文章管理模块
  2. 编辑任意文章,拦截请求
  3. 使用 Burp Suite 生成 CSRF POC(示例代码已提供)
  4. 浏览器访问生成的 POC 页面
  5. 提交请求后验证文章是否被修改

3. 漏洞利用代码示例

个人信息修改 CSRF POC

<html>
<body>
<script>history.pushState('', '', '/')</script>
<form action="http://target/api/admin/update" method="POST">
  <input type="hidden" name="email" value="attacker@example.com" />
  <input type="submit" value="Submit request" />
</form>
</body>
</html>

文章修改 CSRF POC

<html>
<body>
<script>history.pushState('', '', '/')</script>
<form action="http://target/api/admin/article/update" method="POST" enctype="text/plain">
  <input type="hidden" name='{"id":"2","editorType":"markdown","title":"Hacked","alias":"hacked","thumbnail":null,"typeId":"1","keywords":null,"digest":"<p>Hacked</p>","canComment":false,"recommended":false,"privacy":false,"content":"<p>Hacked</p>\n","markdown":"Hacked","rubbish":"'value" value="'false"}' />
  <input type="submit" value="Submit request" />
</form>
</body>
</html>

4. 修复建议

  1. CSRF 防护

    • 添加 CSRF Token 机制
    • 对敏感操作使用 POST 请求并验证 Referer
    • 考虑引入 Spring Security 框架
  2. XSS 防护

    • 对所有用户输入进行严格的过滤和转义
    • 实现输出编码
    • 设置 Content Security Policy (CSP)
  3. 输入验证

    • 对个人信息字段增加合理的长度限制
    • 对文章内容等长文本字段也应进行基本的 XSS 过滤
  4. 架构改进

    • 实现统一的权限验证过滤器
    • 对管理员操作进行二次验证(如密码确认)

5. 总结

本次审计发现 ZrLog v2.1.11 存在多处安全漏洞,主要集中在:

  1. 缺乏 CSRF 防护导致的信息修改和文章篡改风险
  2. 输入验证不严导致的 XSS 漏洞(虽受长度限制但仍存在风险)

建议开发者尽快修复这些漏洞,特别是在处理敏感操作时增加身份验证和请求合法性校验。

ZrLog v2.1.11 代码审计报告与漏洞分析 1. 系统概述 ZrLog 是一款使用 Java 开发的博客/CMS 程序,具有以下特点: 简约易用 组件化设计 内存占用低 自带 Markdown 编辑器 2. 审计发现的安全漏洞 2.1 CSRF 漏洞(个人信息修改) 漏洞分析 框架分析 : 检查 pom.xml 文件,确认未使用 Spring 框架及 spring-security 组件 缺少对 CSRF 的默认防护机制 路由分析 : web.xml 中通过 com.zrlog.web.config.ZrLogConfig 进行访问控制 configRoute 方法包含三条路由,其中管理员路由由 AdminRoutes 控制 /api/admin 接口由 AdminController 类控制 漏洞点 : AdminController 类的 update 方法处理个人信息修改 方法流程: 解析请求体 检查必要参数 根据运行模式和用户权限处理 返回响应对象 整个流程未经过任何 filter 类拦截 漏洞复现步骤 登录后台,进入个人信息页面 修改任意信息并提交,使用 Burp Suite 拦截请求 修改 email 参数为 test_test@qq.com 使用 Burp Suite 生成 CSRF POC 启动 HTTP 服务,浏览器访问 POC 页面 提交请求后,验证邮箱信息是否被修改 2.2 XSS 漏洞(个人信息处) 漏洞分析 漏洞点 : 个人信息接口未对输入进行 XSS 过滤 可与 CSRF 形成组合攻击(CSRF+XSS 获取 cookie) 限制条件 : 输入长度限制为 15 个字符 超过长度会报错 漏洞验证 尝试输入 XSS payload 发现长度限制 输入 1<script>alert(1)</script> 测试(受长度限制无法完整输入) 确认存在 XSS 漏洞但受长度限制难以利用 2.3 CSRF 漏洞(文章修改) 漏洞分析 路由分析 : AdminRoutes 类中的文章处理接口 由 ArticleController 类的 update 方法处理文章更新 调用链 : update 方法调用 articleService.update() articleService 实例化为 ArticleService 类(位于 service-2.1.1.jar ) update 方法调用 save 方法处理创建/更新文章 漏洞点 : 整个流程无 CSRF 防护机制 可未经授权修改文章内容 漏洞复现步骤 登录后台,进入文章管理模块 编辑任意文章,拦截请求 使用 Burp Suite 生成 CSRF POC(示例代码已提供) 浏览器访问生成的 POC 页面 提交请求后验证文章是否被修改 3. 漏洞利用代码示例 个人信息修改 CSRF POC 文章修改 CSRF POC 4. 修复建议 CSRF 防护 : 添加 CSRF Token 机制 对敏感操作使用 POST 请求并验证 Referer 考虑引入 Spring Security 框架 XSS 防护 : 对所有用户输入进行严格的过滤和转义 实现输出编码 设置 Content Security Policy (CSP) 输入验证 : 对个人信息字段增加合理的长度限制 对文章内容等长文本字段也应进行基本的 XSS 过滤 架构改进 : 实现统一的权限验证过滤器 对管理员操作进行二次验证(如密码确认) 5. 总结 本次审计发现 ZrLog v2.1.11 存在多处安全漏洞,主要集中在: 缺乏 CSRF 防护导致的信息修改和文章篡改风险 输入验证不严导致的 XSS 漏洞(虽受长度限制但仍存在风险) 建议开发者尽快修复这些漏洞,特别是在处理敏感操作时增加身份验证和请求合法性校验。