此次调查由Aspect Security公司和Sonatype公司执行,Aspect Security公司是一家负责评估软件漏洞的公司,Sonatype公司则是提供Central Repository中央资源库(拥有30万个库)的公司。调查对31个开源代码库在过去12个月的下载情况进行了分析,结果发现,这些开源代码库中,三分之一存在一个已知漏洞。
Aspect Security公司首席执行官Jeff Williams在谈到这个研究时表示:“在过去几年中,越来越多地应用程序从这些库中开发出来。”开源社区没有指出被发现存在漏洞的代码,也没有明确当修复补丁发布时应该如何修复漏洞。
“开源社区根本没有通知基础设施,”Williams表示,“我们希望暴露这个问题。”
他补充说,Aspect和Sonatype正在考虑如何能够改善整个现状。
在这项研究中,Aspect公司的研究人员对过去12个月中31个流行Java框架和安全库的1.13亿次软件下载进行了分析。研究人员发现:
- 1980万(26%)个代码库下载存在已知漏洞
- 下载次数最多的存在漏洞的代码库是Google Web Toolkit(GWT)、Apache Xerces、Spring MVC以及Struts 1.x(其他评估的库包括:Apache CXF; Hibernate; Java Servlet; Log4j; Apache Velocity; Spring Security; Apache Axis; BouncyCastle; Apache Commons; Tiles; Struts2; Wicket; Java Server Pages; Lift; Hibernate Validator; Java Server Faces; Tapestry; Apache Santuario; JAX-WS; Grails; Jasypt; Apache Shiro; Stripes; AntiSamy; ESAPI; HDIV and JBoss Seam)
研究显示,与Java框架相比,安全库存在已知漏洞的可能性稍微高一些,“现在的应用程序通常使用30个或者更多库,这些库存在的漏洞可能危及应用程序中80%的代码。”
开源代码库中发现的漏洞类型各种各样。
“一些漏洞可能导致数据丢失或者损坏,其他漏洞还可能为攻击者提供有用的信息,”研究人员表示,“在大多数情况下,漏洞的影响很大程度上取决于代码库是如何被应用程序所使用的。”
这项研究指出了一些广为人知的漏洞:
- 主流应用程序Java开发框架Spring在去年被超过4.3万个企业下载超过1800次。然而,去年一项研究发现,Spring的Expression Language(语言表达)中存在的新型漏洞能够通过HTTP参数提交被攻击者利用,并可以让攻击者获取重要系统数据、应用程序和用户Cookie。
- 谷歌研究小组在2010年发现了Struts2中的一个漏洞,该漏洞允许攻击者在任何Struts2 Web应用程序上执行任何代码。
- Web Services框架Apache CXF在过去12个月中,被1.6万个企业下载超过420次,自2010年以来,Apache CXF中发现了两个主要漏洞(CVE-2010-2076和CVE 2012-0803),允许攻击者使用CXF来欺骗任何服务,以下载任意系统文件和绕过身份验证机制。
研究人员发现漏洞后,会根据他们选择的方式来发布漏洞信息,例如博客文章或者发邮件给邮件列表的人。“目前,开发人员没有办法知道他们使用的库版本是否存在已知漏洞,他们需要查看大量博客文章、论坛才能够获取最新信息。此外,开发团队不太可能找出自己存在的漏洞,因为这需要大量的安全经验,并且自动化工具根本无法分析库的漏洞情况。”
Williams表示,虽然一些开源团体(例如OpenBSD)在管理漏洞信息发布方面“做得相当不错”,但大部分开源团体都是以杂乱无章的方式来处理各种安全问题,并且发布方式也存在不确定性。企业应加强自身的安全流程,在这方面,可以考虑OpenBSD的模式。
Williams补充说,对开源库的使用也提出了“依赖性管理”的问题,这是开发人员用于确定其项目直接依赖哪些库的安全流程。通常情况下,开发人员最终可能使用了超过其真正需要的功能的代码,使用了可能也依赖于其他库的代码库。这样就卷入了大量过时的代码,增加了风险,而没有增加价值,并且让应用程序过于膨胀。“找出你正在使用哪些库,哪些库已经过时,”Williams表示,“我们建议尽量减少对库的使用。”
该报告指出,“虽然企业通常对于软件产品拥有强大的补丁管理程序,但是开源代码库通常并不在这个管理程序应用范围内。”