问题描述
在项目交付后往往会遇到第三方检测机构或者公司内部在交付之前进行的系统安全漏洞检测,本文章记录一次springboot maven项目的漏洞排查修复过程。
过程记录:
- 以CVE-2014-0114漏洞为例,此漏洞详细描述如下
附网站地址:https://cve.mitre.org/cve/search_cve_list.html
大概意思就是commons-beanutils包在1.3.10-1.9.2期间的版本存在此漏洞,攻击者可以“操纵”ClassLoader并通过class参数执行任意代码。
-
排查思路:
1.检索项目pom文件是否直接引用了commons-beanutils相关依赖- 解决方案:请升级到漏洞版本范围外的版本
2.查看maven的依赖树,确定是否有其他jar包引用了涉及漏洞的jar包,如果有项目中使用的其他jar包(例a.jar)引用了涉及漏洞的jar包(例b.jar)
- 问题场景1:若a.jar在新版本中引用了b.jar的漏洞以外的版本,则只需升级a.jar
- 问题场景2:若a.jar在新版本中还是引用了b.jar的漏洞,则先需要排除a.jar对b.jar的引用,再单独引用b.jar的漏洞以外版本
-
排查过程记录
1.pom文件搜索commons-beanutils
可以看到并没有在我的项目pom文件中找到commons-beanutils的直接引用,说明是有项目中用到的其他jar包间接引用了commons-beanutils包。
2.打开命令窗口,查看依赖树,输入mvn dependency:tree 回车,会列出所有引用jar包的依赖关系
3.搜索commons-beanutils,可以看出使用的net.sf.json包间接引用了commons-beanutils:jar:1.8.0,在1.3.10-1.9.2漏洞版本范围内
4.在maven仓库搜索net.sf.json 附网站地址:https://mvnrepository.com/
5.点击进入,可以看出新版本已经是2.4了
6.点击2.4版本,查看Vulnerabilities项列表,列出了当前版本存在的未修复漏洞,发现CVE-2014-0114漏洞还是在当前版本中存在的
7.继续再搜索commons-beanutils,可以看出1.9.4版本中已经不存在CVE-2014-0114漏洞了
-
解决方案
从以上分析过程中可以得出结论,我们不能通过升级net.sf.json版本来避免CVE-2014-0114漏洞,因为net.sf.json的新版本2.4还是引用了commons-beanutils:jar:1.8.0,在1.3.10-1.9.2漏洞版本范围内,符合前边梳理的场景2
1.首先在pom文件中net.sf.json的引用处排除对commons-beanutils的间接引用
2.单独直接引用commons-beanutils漏洞外的版本
3.刷新maven项目,重新查看依赖树,只检索到了我们单独引用的commons-beanutils的1.9.4版本
结语
以上就是楼主在实际开发中遇到的漏洞排查修复过程,希望可以帮到你~