Mik*_*kov 7 java maven fortify
根据 Fortify(HP 静态代码分析器)报告,显然pom.xml的以下几行是漏洞:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
...
Run Code Online (Sandbox Code Playgroud)
因为
构建错误配置:外部 Maven 依赖库:此 Maven 构建脚本依赖于外部源,这可能允许攻击者将恶意代码插入最终产品或控制构建机器。
这有点误报检测,但根据我公司偏执的安全政策,我无法抑制这一点。所以现在 pom.xml 看起来像这样:
<project>
...
Run Code Online (Sandbox Code Playgroud)
它仍然可以正确构建/编译。IDE 仍将文件识别为有效的 Maven 项目对象模型文件。没有什么不好的事情发生。
我想知道是否有任何可能的情况,这种修改可能会导致一些实际问题?例如,一些已知的工具或解析器不会将其识别为有效的 Maven 项目文件。谢谢。
只要深入研究这个问题,就会发现 Fortify 并没有抱怨 Maven Schema。它抱怨您正在使用外部 Maven 存储库(central、jboss 等),并且您的 POM 没有适当的位置来标记此问题(即您没有在 POM 中定义任何存储库)。
正如强化所说:
在 Maven 下,开发人员不会列出从中检索依赖项的显式 URL,而是指定依赖项名称和版本,并且 Maven 依靠其底层配置来识别从中检索依赖项的服务器。对于常用组件,这使开发人员无需研究依赖项位置。
两种不同类型的攻击场景会影响这些系统:攻击者可能会破坏托管依赖项的服务器,或者破坏构建计算机用于将托管依赖项的服务器主机名的请求重定向到攻击者控制的计算机的 DNS 服务器。
您之所以遇到此漏洞,是因为您正在使用外部存储库,这使攻击者有机会通过注入被篡改的依赖项来危害您的系统。通过显式声明内部存储库,您的依赖项(理论上)受到基础设施的保护。
如果您有内部存储库,下面的内容可能有助于解决问题:
<repositories>
<repository>
<id>central</id>
<url>http://172.28.60.140/repository/maven-public</url>
</repository>
<repository>
<id>corp-internal</id>
<url>http://172.28.60.140/repository/maven-private</url>
</repository>
</repositories>
Run Code Online (Sandbox Code Playgroud)
注意存储库 id central,这是必要的,因为所有 POM 都是从超级 POM 继承的。通过覆盖它,您可以将默认的中央存储库替换为您的内部存储库。
删除schemaLocation使 Fortify 无法将此 xml 识别为 POM,因此无法确定风险。它不能解决任何问题,只是隐藏它。
我认为他们没有解决记录的问题,因为我没有看到任何提交。对我来说,即使我删除了 <project> 标签,它仍然抱怨问题中解决的相同问题。注意:我使用的是 6.21.0005 版本,使用审计工作台、软件 Fortify 静态代码分析器。