0x00 Referer
安全同学谈谈Maven依赖仲裁
0x01 Maven是什么?
依赖管理工具
0x01 通过什么手段管理依赖的?
通过一组GAV明确表示一个依赖,比如:
<groupId> : com.alibaba 一般是公司的名称
<artifactId> : fastjson 项目名称
<version> : 1.2.24 版本号
0x02 Maven是如何处理项目中的直接依赖和间接依赖的?
-
依赖结构树缓存 -
重复依赖舍弃 -
广度遍历算法
0x03 遇到相同依赖时,Maven是如何进行决策的?
依靠Maven的核心仲裁机制
-
越靠近主干越优先
-
单颗树在依赖在竞争时(
dependencies
)(注意:不是dependencyManagement
里的dependencies
): -
当 deep=1
,即直接依赖。同级是靠后优先。 -
当 deep>1
,即间接依赖。同级是靠前优先。
第二条用人话解释:间接依赖先引入优先
0x04 间接依赖漏洞治理
结论:
-
主POM的 dependencyManagent
可以管控到 间接依赖 和 不显示声明version
的直接依赖。 -
主POM的dependencies不能出现危险版本,否则子pom天然的继承了这个危险版本参与打包。
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
<version>2.1.13.RELEASE</version>
</dependency>
</dependencies>
</dependencyManagement>
后面会在写个基于maven的SCA建设与治理
原文始发于微信公众号(小宝的安全学习笔记):供应链SCA之Maven间接依赖
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论