若依管理系统 v4.3.1 已发布,更新日志:
- 国家信息安全漏洞(防止命令执行漏洞,请务必保持cipherKey密钥唯一性)
- 升级shiro到最新版1.5.3 阻止权限绕过漏洞
- 修改验证码在使用后清除,防止多次使用
- 检查字符支持小数点&降级改成异常提醒
- openOptions函数中加入自定义maxmin属性
- 支持openOptions方法最大化
- 支持openOptions方法多个按钮回调
- 新增isLinkage支持页签与菜单联动
- 修改代码生成导入表结构出现异常页面不提醒问题
- 优化用户头像发生错误,则显示一个默认头像
- Excel导出支持字典类型
- 命令执行漏洞 RuoYi <= v4.3.0
若依管理系统使用了Apache Shiro,Shiro 提供了记住我(RememberMe)的功能,下次访问时无需再登录即可访问。系统将密钥硬编码在代码里,且在官方文档中并没有强调修改该密钥,导致框架使用者大多数都使用了默认密钥。攻击者可以构造一个恶意的对象,并且对其序列化、AES加密、base64编码后,作为cookie的rememberMe字段发送。Shiro将rememberMe进行解密并且反序列化,最终造成反序列化漏洞,进而在目标机器上执行任意命令。
检测漏洞:ShiroConfig.java 是否包含 fCq+/xW488hMTCD+cmJ3aQ==,如果是使用的默认密钥则需要修改,防止被执行命令攻击。
解决方案:升级版本到 >=v.4.3.1,并且重新生成一个新的秘钥替换cipherKey,保证唯一且不要泄漏。
# Shiro
shiro:
cookie: # 设置密钥,
cipherKey: zSyK5Kp6PZAAjlT+eeNMlg==
// 直接拷贝到main运行即可生成一个Base64唯一字符串
KeyGenerator keygen = KeyGenerator.getInstance("AES");
SecretKey deskey = keygen.generateKey(); System.out.println(Base64.encodeToString(deskey.getEncoded()));
- SQL注入攻击 RuoYi <= v3.2.0
若依管理系统使用了PageHelper,PageHelper提供了排序(Order by)的功能,前端直接传参完成排序。系统没有做字符检查,导致存在被注入的风险,最终造成数据库中存储的隐私信息全部泄漏。
检测漏洞:BaseController.java 是否包含 String orderBy = pageDomain.getOrderBy();,如果没有字符检查需要修改,防止被执行注入攻击。
解决方案:升级版本到 >=v.3.2.0,或者重新添加字符检查String orderBy = SqlUtil.escapeOrderBySql(pageDomain.getOrderBy());,防止注入绕过。
Shiro阻止权限绕过漏洞 RuoYi <= v4.3.0
Shiro < 1.5.2 版本存在一处权限绕过漏洞,当受影响版本的Shiro框架结合Spring dynamic controllers使用时,未经授权的远程攻击者可以通过精心构造的请求包进行权限绕过,可能造成鉴权系统失效以及后台功能暴露。
检测漏洞:pom.xml Shiro <=1.5.2 则版本存在漏洞。
解决方案:升级版本到 >=1.5.3。
- Fastjson高危漏洞 RuoYi <= v4.2.0
Fastjson < 1.2.68 版本存在一处反序列化漏洞,主要为autoType开关绕过的反序列化漏洞利用,恶意攻击者可以通过该漏洞绕过autoType限制实现远程代码执行攻击,从而获取目标系统管理权限,建议尽快更新漏洞修复版本或采用临时缓解措施加固系统。
检测漏洞:pom.xml Fastjson <=1.2.68 则版本存在漏洞。
解决方案:升级版本到 >=1.2.70。
注意
若依平台的默认口令 admin/admin123,请大家在线上环境一定要修改超级管理员的密码。
SysPasswordService.encryptPassword(String username, String password, String salt)
直接到main运行此方法,填充账号密码及盐(保证唯一),生成md5加密字符串。