OSV-SCANNER 是笔者一直在关注和使用的开源代码漏洞扫描工具,之前写过的文章包括:
笔者:国际认证信息系统审计师、软考系统分析师、软件工程硕士
但 OSV-SCANNER 发展到现在,已经不仅是基于软件包依赖关系的漏洞扫描工具了。
最近 OSV-SCANNER 新引入了许可证扫描归集功能,可以对软件项目依赖的软件包归集统计和列出软件包所使用的许可证的类型和数量。这对于有大量依赖的软件项目来说是极大的便利。
首先看看新增功能的情况。这个功能有两个操作参数[1]:
--experimental-licenses-summary
汇总给出依赖软件包的所有许可证情况
--experimental-licenses="comma-separated list of allowed licenses"
给出软件项目允许的许可证的清单(以逗号分隔),找出软件项目依赖不符合清单要求的许可证情况。注意该清单只认可 SPDX 格式的许可证,比如 MIT。具体清单可以在 SPDX 的网站获取[2]
文档说明就这么简单。那么我们来测试看看。
在 OSV-SCANNER 的仓库[3]下载最新的 OSV-SCANNER 1.3.6 版本。测试对象是笔者之前在研究由 ZOOM 提出的 VISS [4]时已经 GIT CLONE 到本地的代码。下图1为 VISS 项目的提交日志记录,可见是数个月之前的版本,估计其依赖会有漏洞,不过漏洞扫描不是这次的重点。
图1
VISS 项目的代码量不多,但依赖很多。接下来分别使用这两个参数对 VISS 项目进行扫描,观察其扫描结果。
1、汇总所有许可证情况
扫描结果如下图2。OSV-SCANNER 首先是给出漏洞扫描结果,可见 VISS 项目的这个版本从 npm 生态引入的依赖中,有3个包存在4个漏洞。然后,在漏洞扫描结果之后,OSV-SCANNER 给出了许可证情况的汇总。
图2
从图2可知,VISS 项目的依赖软件包总共使用了15种许可证。其中,MIT 许可证下的包版本数量最多,874。
对于开发者来说,首先应关注的是有5个软件包的许可证是 UNKNOWN,必须先确认这些软件包使用的许可证后,再确定是否引入到软件项目中。
对于其它列出的许可证,开发者需要熟悉这些许可证的具体使用要求,是从简单地署名即可,还是要区分商业/非商业使用,都要认真鉴别以免在将来出现纠纷。
2、找出不符合要求的许可证情况。通过指定允许 MIT、Apache-2.0 等若干项许可证,找出其它不属于允许清单内的许可证。
如果许可证清单包含有不是 SPDX 格式的许可证名称,则 OSV-SCANNER 会提出异议,如下图3。
图3
扫描前执行了 GIT PULL,但是当前版本依然有漏洞。扫描结果如下图4。在输出漏洞扫描结果后(2个漏洞涉及2个包 ),OSV-SCANNER 按参数要求给出许可证允许列表之外的每一个依赖包的许可证、生态系统、包名称、版本和来源。
图4
接下来就是尝试落实其中的 UNKNOWN 许可证类型的实际情况了。
选个例子比如 streamsearch,在 NPMJS.COM 它的包信息页面[5]上显示许可证是 none,如下图5。
图5
我们再转向 streamsearch 的 GITHUB 项目页面[6],可以看到是写着 MIT License,如下图6。
图6
不知为何 GITHUB 这边的许可证信息没有转入到 NPMJS 那边去。但起码落实了 streamsearch 是符合我们的许可证要求。
如此逐一核实后,就可以确定自己的软件项目内能否不存在许可证冲突了。
从尝试结果看,许可证扫描功能使用起来非常简单方便,输出结果也很清晰。功能也还有改进空间,比如像许可证 UNKNOWN 的,是否应该提供名为 EXCLUDE 的参数选项用于扫描时排除。
虽然许可证扫描是 EXPERIMENTAL 级别的功能,未来也有可能被取消,但估计会成为正式功能延续下去,或者专门独立成为一个新的工具。
老鸟们都知道,许可证是开源业界的长期话题。例如一开始基于 GPL 许可证的开源软件项目后来转向闭源,这种事情发生了多次,每次都为开源带来大量争议,对开源运动构成了负面影响。
虽然 OSV-SCANNER 新增的这个功能超出了它的初始定位,但如果从更宽广的角度看,许可证之间的相互冲突、上下游之间许可证的不兼容,也可以认为是软件项目里面一种特殊的漏洞,由此可能产生扩日持久的纠纷,于整个开源生态毫无益处。
所以这个功能是非常有必要的和具备存在价值的。
[1] OSV-SCANNER Experimental Features License Scanning
https://google.github.io/osv-scanner/experimental/license-scanning/
[2] Google OSV-SCANNER on GitHub
https://github.com/google/osv-scanner
[3] SPDX License List
[4] VISS (Vulnerability Impact Scoring System)
[5] npm package streamsearch
https://www.npmjs.com/package/streamsearch
[6] streamsearch on GitHub
本站微信订阅号:
本页网址二维码: