对基于企业微信的 SCRM 系统(LinkWechat )代码审计
字数 1285 2025-08-06 12:20:51

LinkWeChat SCRM系统代码审计报告与安全加固指南

1. 系统概述

LinkWeChat是基于企业微信的开源SCRM系统,主要功能包括微信公众号管理、用户关系管理等。系统采用微服务架构,其中linkwe-gateway作为网关负责请求转发和身份验证。

2. 发现的漏洞及分析

2.1 微信公众号授权问题导致的越权漏洞

漏洞原理

系统提供/wxLogin接口允许通过微信登录后台功能,只要用户关注了相应微信公众号即可登录,导致非内部员工也能操作后台功能。

关键代码路径

  1. 授权入口:com.linkwechat.web.controller.system.SysLoginController#wxLogin
  2. 身份验证过滤器:com.linkwechat.gateway.filter.AuthFilter#filter
  3. Token创建:com.linkwechat.web.service.SysLoginService#wxLogin
  4. Token刷新:com.linkwechat.framework.service.TokenService#createToken

漏洞利用流程

  1. 获取授权链接:
    http://localhost:6180/auth/wxRedirect?redirectUrl=http%3A%2F%2Fdemo.linkwechat.net%2F%23%2FauthRedirect
    
  2. 用户授权后获取code参数
  3. 使用code调用/wxLogin接口获取Token
  4. 后续请求携带Token即可访问后台功能

修复缺陷分析

初始修复方案通过检查Token中的login_type字段区分用户类型,但由于JWT密钥固定,攻击者可伪造Token修改login_type字段绕过限制。

修复建议

  1. 使用随机生成的JWT密钥,确保每次启动不同
  2. 加强Token验证逻辑,增加多因素验证

2.2 SQL注入漏洞

漏洞位置

SysDeptMapper.xml中使用了${ancestors}参数,导致SQL注入风险。

漏洞代码

<!-- 在SysDeptMapper.xml中 -->
<update id="updateDeptChildren" parameterType="java.util.List">
    update sys_dept set ancestors = 
    <foreach collection="depts" item="item" index="index" separator=" " open="case dept_id" close="end">
        when #{item.deptId} then #{item.ancestors}
    </foreach>
    where dept_id in
    <foreach collection="depts" item="item" index="index" separator="," open="(" close=")">
        #{item.deptId}
    </foreach>
</update>

利用方式

构造恶意请求:

{
    "deptId": 1,
    "parentId": 999,
    "ancestors": "if(1, sleep(1), 0)",
    "deptName": "24rewr",
    "deptEnName": "3",
    "orderNum": "4",
    "phone": "5",
    "email": "1@q.com",
    "status": "0",
    "parentName": "parentName"
}

修复方案

  1. ${}替换为#{}参数化查询
  2. 增加操作权限校验
  3. 对输入参数进行严格过滤

3. 安全加固建议

3.1 身份验证与授权

  1. 实现基于角色的访问控制(RBAC)
  2. 增加多因素认证机制
  3. 定期轮换JWT签名密钥
  4. 实现Token吊销机制

3.2 输入验证与输出编码

  1. 对所有用户输入实施白名单验证
  2. 使用预编译语句防止SQL注入
  3. 对输出到HTML的内容进行编码

3.3 安全配置

  1. 禁用不必要的HTTP方法
  2. 设置安全HTTP头(X-Content-Type-Options, X-Frame-Options等)
  3. 实现完善的CORS策略

3.4 日志与监控

  1. 记录所有敏感操作日志
  2. 实现异常行为检测
  3. 设置安全告警阈值

4. 开发安全实践

  1. 实施安全编码规范
  2. 定期进行代码审计
  3. 建立漏洞管理流程
  4. 进行安全培训

5. 参考资源

  1. LinkWeChat官方仓库: https://gitee.com/LinkWeChat/link-wechat
  2. OWASP Top 10安全风险指南
  3. 企业微信开发文档

通过以上分析和建议,开发团队可以显著提升LinkWeChat系统的安全性,防止类似漏洞的发生。

LinkWeChat SCRM系统代码审计报告与安全加固指南 1. 系统概述 LinkWeChat是基于企业微信的开源SCRM系统,主要功能包括微信公众号管理、用户关系管理等。系统采用微服务架构,其中 linkwe-gateway 作为网关负责请求转发和身份验证。 2. 发现的漏洞及分析 2.1 微信公众号授权问题导致的越权漏洞 漏洞原理 系统提供 /wxLogin 接口允许通过微信登录后台功能,只要用户关注了相应微信公众号即可登录,导致非内部员工也能操作后台功能。 关键代码路径 授权入口: com.linkwechat.web.controller.system.SysLoginController#wxLogin 身份验证过滤器: com.linkwechat.gateway.filter.AuthFilter#filter Token创建: com.linkwechat.web.service.SysLoginService#wxLogin Token刷新: com.linkwechat.framework.service.TokenService#createToken 漏洞利用流程 获取授权链接: 用户授权后获取code参数 使用code调用 /wxLogin 接口获取Token 后续请求携带Token即可访问后台功能 修复缺陷分析 初始修复方案通过检查Token中的 login_type 字段区分用户类型,但由于JWT密钥固定,攻击者可伪造Token修改 login_type 字段绕过限制。 修复建议 使用随机生成的JWT密钥,确保每次启动不同 加强Token验证逻辑,增加多因素验证 2.2 SQL注入漏洞 漏洞位置 SysDeptMapper.xml 中使用了 ${ancestors} 参数,导致SQL注入风险。 漏洞代码 利用方式 构造恶意请求: 修复方案 将 ${} 替换为 #{} 参数化查询 增加操作权限校验 对输入参数进行严格过滤 3. 安全加固建议 3.1 身份验证与授权 实现基于角色的访问控制(RBAC) 增加多因素认证机制 定期轮换JWT签名密钥 实现Token吊销机制 3.2 输入验证与输出编码 对所有用户输入实施白名单验证 使用预编译语句防止SQL注入 对输出到HTML的内容进行编码 3.3 安全配置 禁用不必要的HTTP方法 设置安全HTTP头(X-Content-Type-Options, X-Frame-Options等) 实现完善的CORS策略 3.4 日志与监控 记录所有敏感操作日志 实现异常行为检测 设置安全告警阈值 4. 开发安全实践 实施安全编码规范 定期进行代码审计 建立漏洞管理流程 进行安全培训 5. 参考资源 LinkWeChat官方仓库: https://gitee.com/LinkWeChat/link-wechat OWASP Top 10安全风险指南 企业微信开发文档 通过以上分析和建议,开发团队可以显著提升LinkWeChat系统的安全性,防止类似漏洞的发生。