在Java代码审计中,我们经常需要对引用的第三方组件进行审计。但是我们手工去查看项目中每个组件的版本并去搜索相关漏洞实在是有些繁琐。为了解决这个问题,我先是在网上找相关的工具,用起来也不太顺手。于是乎,我使用Python写了一个用起来还算顺手的工具,分享给大家。下面简单介绍一下该工具并讲解一下整个项目的架构。
工具地址:PomEye
工具简介
打开工具后可以上传单个pom.xml文件或者整个maven项目
程序会自动检测pom.xml文件中的组件版本,当子项目的组件版本未知时递归的查找其父项目的该组件的版本号。
然后程序会根据识别出的组件版本利用第三方漏洞库查询组件漏洞
全部检测完毕后会打开组件信息界面
组件信息界面分为上下两部分:上半部分是项目依赖的所有的第三方组件信息,包括组件的版本、漏洞等级和来源pom文件。
当点击某个组件所在行时,下方会展示出该组件在当前版本下的所有漏洞详情,漏洞详情包括:漏洞名称、危险等级、影响版本、CVE编号、CWE编号、漏洞详情及snyk参考链接。
项目架构
项目分为五个模块,分别是:main.py、pom_parse_client.py、parse.py、check_vul.py和variables.py。
main.py:主模块,用来打开程序。
pom_parse_client.py:可视化界面模块,包括上传界面,详细信息界面,界面跳转
parse.py:解析pom.xml文件模块,利用BeautifulSoup库提取xml文件中组件信息,然后构建父子依赖关系树,当子项目的组件版本未知时递归的查找其父项目的该组件的版本号。
check_vul.py:漏洞检测模块,根据解析出的组件名称和版本向snyk发起查找请求,利用BeautifulSoup库解析返回包,将漏洞详情展示在界面。
variables.py:全局变量模块,所有需要用到的全局变量
工具特色
精致、优美、易使用的图形化用户界面
使用BeautifulSoup4解析pom.xml文件,速度快、不出错
根据pom.xml文件中的标签构建父子关系树,当子项目的组件版本未知时递归的查找其父项目的该组件的版本号
利用第三方漏洞库snyk检测组件漏洞,显示漏洞名称、危险等级、影响版本、漏洞详情及snyk参考链接