我们使用的是ruoyi前后端分离版springBoot框架
通过软件成分分析检测发现SnakeYAML存在资源管理错误高危漏洞
框架里集成的是SnakeYAML2.8版本的
漏洞描述:
1.SnakeYAML是一款基于Java的YAML解析器。 SnakeYaml存在安全漏洞,该漏洞源于其
Constructor()类不限制可以在反序列化期间导致攻击者提供恶意yaml内容可以实现远程代码执行。
2.SnakeYAML是一款基于Java的YAML解析器。 SnakeYAML 1.31及之前版本存在安全漏洞,该漏洞源于缺少对集合的嵌套深度限制,存在拒绝服务(DoS)问题。
3.SnakeYAML是一款基于Java的YAML解析器。 SnakeYAML 存在缓冲区错误漏洞,该漏洞源于解析不受信任的 YAML 文件可能容易受到拒绝服务攻击(DOS)。 如果解析器在用户提供的输入上运行,攻击者通过特制内容导致解析器因堆栈溢出而崩溃。
修复建议:
目前厂商暂未发布修复措施解决此安全问题,建议使用此软件的用户随时关注厂商主
页或参考网址以获取解决办法:
https://bitbucket.org/snakeyaml/snakeyaml/issues/525/gotstackoverflowerror-for-many-open
以上为官方的一个漏洞描述和解决版本,世界解决不需要这么复杂,我们直接上干货
首先找到springframework的pom,然后在spring-boot-starter-web下排除掉snakeyaml依赖
然后接在在下面直接引入最新版本的snakeyaml 我这里引入的是1.33的
<!-- SpringBoot Web容器 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<!-- 其他配置 -->
<exclusions>
<exclusion>
<groupId>org.yaml</groupId>
<artifactId>snakeyaml</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-yaml</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.yaml</groupId>
<artifactId>snakeyaml</artifactId>
<version>1.33</version>
<scope>compile</scope>
</dependency>
这时你用maven重新打包后 然后解压jar包在
路径\BOOT-INF\lib下会发现还是有snakeyaml1.28的成分在里面
经过排查原来是在别的地方没有覆盖掉
然后我们要找到项目根目录下的pom
还有ruoyi-admin下的pom
找到里面引入的 ruoyi-framework 。重复上面的步骤分别排包,并重新引入snakeyaml1.33
最后打包jar包解压后可以看到版本更新为snakeyaml-1.33.jar了