Spring boot中的缺陷和安全漏洞浅析

      Spring Boot是由Pivotal团队提供的全新的开源框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。

现在很多研发团队开始转向采用该框架,但是这个框架经过使用北大软件的CoBOT进行分析,发现里面还是隐藏着很多缺陷和安全漏洞。我选择了几个比较典型的,容易理解的缺陷进行简单分析。

 

1、创建问题权限问题

Spring boot中的缺陷和安全漏洞浅析

 

上述存在的问题所属的缺陷属于没有使用合适的访问权限创建文件。缺陷发生位置:

在RepackagerTests.java中jarThatUsesCustomCompressionConfigurationCanBeRepackaged函数的第646行。在(RepackagerTests.java)文件第(646)行调用方法[new FileOutputStream(source)]创建文件,没有指定访问权限,攻击者可能会在程序修改权限之前读取或修改文件。必须使用访问权限创建文件,以防止未经授权的文件访问。  ( CWE中的类似缺陷是cwe-279 cwe-276 cwe-732 )

 

2、文件路径可能被利用

Spring boot中的缺陷和安全漏洞浅析

 

上述缺陷是 java/io/File.<init>(Ljava/io/File;Ljava/lang/String;)V读取文件内容时,将文件存放的路径传给文件API,则可以读写来自任意文件系统位置的文件。此规则标识潜在的路径遍历漏洞。 CWE中的类似缺陷是(CWE-22 )
 

3、异常处理不全面可能泄露调试信息

Spring boot中的缺陷和安全漏洞浅析
上述问题的缺陷主要是servlet错误处理机制导致的信息泄露。缺陷发生位置:在TestServlet.java中第31行。在(TestServlet.java)文件第(31)行方法[doGet]中没有捕获所有的异常,如果发生请求失败或者DNS解析异常等情况可能会导致泄漏调试信息,从而有利于攻击者进行攻击。建议该方法捕获 Throwable,从而尽可能降低调用 Servlet 错误响应机制的可能性。  ( CWE-209 )

 

4、关闭文件没有进行异常检查可导致非正常终止

Spring boot中的缺陷和安全漏洞浅析
上述问题的缺陷主要是在finally程序段中遗漏可没有进行异常检查。缺陷发生位置在SampleIntegrationParentApplicationTests.java中testVanillaExchange函数的第60行。(SampleIntegrationParentApplicationTests.java)文件第(60)行finally程序段调用[producer.close()],该调用可能抛出异常而未被捕获,可能导致整个try程序段非正常终止,try程序段中抛出的异常丢失且finally异常后的语句不被执行。  ( cwe-248 cwe-460 cwe-584 cwe-705 cwe-754 )

 

5、浮点数和整型数比较条件不成立

Spring boot中的缺陷和安全漏洞浅析

上述问题的缺陷是浮点数和长整型进行相等判断,这可能导致永远不相等。在org.springframework.boot.configurationprocessor.json.JSONObject.numberToString(Number)中,为浮点数进行相等性的测试。该操作对比两个浮点数的值是否相等。因为浮点计算可能涉及舍入,计算浮点值和double值可能并不准确。

    各位可能以为这些缺陷不是我们常说的SQL注入,XSS攻击、CSRF攻击等等,但是现在恶意攻击者攻击时,往往是多种攻击手段综合运用。系统中的任何缺陷或安全漏洞,都存在着被利用的可能,所以采用该开源框架的研发人员可能针对上述缺陷和漏洞进行一些修复,以增强安全性。

(完)