有时在使用一个开源组件之前,需要先调查一下这个组件是否有一些比较验证的CVE。同时,对于一些重要的正在使用的组件,例如:Spring Framework,也希望查询一下是否有严重的CVE。 本文就介绍几个曾经用过的查找开源组件还不错的网站和工具。
第一个、https://cve.mitre.org
它是受到the U.S. Department of Homeland Security (DHS) Cybersecurity 和Infrastructure Security Agency (CISA)两家机构资助的,收纳的比较全面和及时。可以通过CVE -Search CVE List查询相关的CVE信息,界面如下:
搜索Spring的结果如下:
不过这个网站用起来不太方便,如果有具体的CVE查找还比较方便,如果查找其他的信息,例如:组件名称和版本以及时间,就不太方便了。
第二个、阿里云漏洞库
查询Spring的结果如下:
在列表里可以看到漏洞的披露时间和状态以及PoC。
第三个、Vulnerability DB | Snyk
这是一家名叫Snyk'的公司提供的CVE查询网站,查询Spring的URL:Vulnerability DB | Snyk,结果如下:
它的结果里主要是增加了一列TYPE,可以了解一下是什么类型的系统。
第四个、Common Vulnerabilities and Exposures (CVEs) | Tenable®
搜索Spring的界面如下:
它主要是增加了搜索的过滤条件,可以是CVEID和发布的时间。在级别的显示上会比较一目了然。
第五个、Security vulnerability, CVE, search
可以根据各种搜索条件进行搜索,搜索界面如下:
搜索spring的结果如下:
结果中不仅给了严重的级别,还提供了CVSS,最为重要的是它提供了EPSS,EPSS(漏洞利用预测评分系统)是一种利用CVE信息和真实世界的攻击数据来预测漏洞是否以及何时会被利用的系统。它旨在解决安全从业者面临的困境,即淹没在CVE中(包括许多高严重性的CVE),但大多数CVE实际上并不可利用。通过提供可利用性可能性的客观测量,EPSS与其他外部数据点如CVSS(通用漏洞评分系统)和VEX(漏洞可利用性exchange)一起,可以成为漏洞优先级排序的有价值的输入。
有时,系统中含有的漏洞级别比较多,至于先修复哪些,升级到什么版本,可以根据EPSS作为依据,优先修复那些被利用性较高的组件。
第六个、第六个是一个工具、https://github.com/cve-search
它提供了各种搜做CVE的工具,例如:搜索Docker image里的CVE的工具CVE-Search-Docker ,具体使用的信息可以参考网站。
第七个、OWASP Dependency-Check | OWASP Foundation
它是一款由OWASP提供的一款免费的查找整个项目含有哪些组件和CVE的工具,根据可能性提供了可能的CVE列表,显示的结果可以是HTML和JSON。不过,针对输出结果需要进一步解析才能得到最直观的信息。
可以通过下命令进行扫描:
Dependency-Check core --project test-s ./path –symLink –n -f JSON –o outputPath/UUID.JSON
-s 被扫描文件所在路径
-o 结果文件存放路径或者结果文件名
--project 扫描项目的名字
获得Dependency Check的结果文件:UUID.JSON,然后解析此文件。
扫描的JSON中的漏洞如下:
"vulnerabilities": [
{
"source": "NVD",
"name": "CVE-2016-1000031", // CVE编号
"cvssScore": "7.5", // CVSS分数
"cvssAccessVector": "NETWORK",
"cvssAccessComplexity": "LOW",
"cvssAuthenticationr": "NONE",
"cvssConfidentialImpact": "PARTIAL",
"cvssIntegrityImpact": "PARTIAL",
"cvssAvailabilityImpact": "PARTIAL",
"severity": "High", // 严重级别
"cwe": "CWE-284 Improper Access Control",
"description": "Apache Commons FileUpload before 1.3.3 DiskFileItem File Manipulation Remote Code Execution",
"notes": "",
"references": [
{
"source": "CONFIRM",
"url": "https://issues.apache.org/jira/browse/FILEUPLOAD-279",
"name": "https://issues.apache.org/jira/browse/FILEUPLOAD-279"
},
{
"source": "MISC",
"url": "https://www.tenable.com/security/research/tra-2016-23",
"name": "https://www.tenable.com/security/research/tra-2016-23"
},
{
"source": "MISC",
"url": "https://www.tenable.com/security/research/tra-2016-12",
"name": "https://www.tenable.com/security/research/tra-2016-12"
},
{
"source": "MISC",
"url": "http://www.zerodayinitiative.com/advisories/ZDI-16-570/",
"name": "http://www.zerodayinitiative.com/advisories/ZDI-16-570/"
},
{
"source": "BID",
"url": "http://www.securityfocus.com/bid/93604",
"name": "93604"
},
{
"source": "MISC",
"url": "https://www.tenable.com/security/research/tra-2016-30",
"name": "https://www.tenable.com/security/research/tra-2016-30"
}
],
"vulnerableSoftware": [
{
"software": "cpe:/a:apache:commons_fileupload:1.3.2", // 可以解析此作为漏洞库名和版本号
"allPreviousVersion": "true"
}
]
}
]
},
需要根据结果文件解析出具体的组件名称和版本以及相关的CVE和级别等信息。
有时,为了得到一个CVE的比较全的信息,可能需要结合几个工具在一起才能得到比较全的信息。可以根据以上介绍的几个工具的显示结果的不同,结合多个工具得到全面的漏洞信息,为漏洞的修复提供有力的依据。