APP下载

Zip Slip目录走访漏洞,知名企业专案与多数开发语言都中镖

消息来源:baojiabao.com 作者: 发布时间:2024-04-26

报价宝综合消息Zip Slip目录走访漏洞,知名企业专案与多数开发语言都中镖

又是一个影响范围极大的严重漏洞,让HP、Amazon、Apache和Pivotal等知名企业的数千专案全中镖,JavaScript、Ruby、.NET与Go等开发语言生态系也都有该漏洞的足迹,开源云端监控服务Snyk的资安团队揭露了Zip Slip漏洞,这是一个任意文件覆写的臭虫,可能导致远端程式码执行攻击,Snyk提到,由于Java缺乏中央函式库提供高阶的归档(Archive)处理功能,因此最容易受到攻击。

目录走访攻击目的就是要存取根目录之外的档案以及资料夹,Snyk的漏洞白皮书提到,骇客要使用这个漏洞,有两个动作要进行,首先是恶意的归档行为,再来是路径未经验证检查的档案解压缩(Extract)。恶意的压缩档案需要包含一个或多个档案,透过在这些档案名称加入../或是绝对路径等操作变数,骇客能够存取系统中任意资料夹的任意档案,而这些档案可能包含原始程式码或是敏感资讯。

Snyk举例,假设压缩档存在两个档案,其中一个为good.sh,这个档案解压缩后会被提取到正常的目标资料夹,而另一个evil.sh档案前面加了许多../前缀,便是骇客试图要走访系统根目录,并新增档案进暂存目录的恶意行为。当使用者在根目录使用指令cd ..,则仍然会在根目录中,也就是说当恶意档案名称添加许多../,骇客便更有机会存取到根目录,以进行下一步偷取敏感资料的动作。

恶意压缩档范例:

5 Tue Jun 5 11:04:29 BST 2018 good.sh
20 Tue Jun 5 11:04:42 BST 2018 ../../../../../../../../tmp/evil.sh

Snyk提到,这样的zip压缩档必须要手动制作,因为尽管zip规范允许,但一般的压缩软件不会让使用者输入这样的路径,当然骇客也可以使用特别的工具,轻易的大量制作这样的档案。

利用Zip Slip漏洞的第二步,需要使用程式码或是函式库的功能,来解压缩压缩档中的档案,而当这些具解压缩功能的程式码没有对档案路径进行验证时,漏洞便出现了。

Snyk以Java的片段程式码当作范例解释:

Enumeration entries = zip.getEntries();
while (entries.hasMoreElements()) {
ZipEntry e = entries.nextElement();
File f = new File(destinationDir, e.getName());
InputStream input = zip.getInputStream(e);
IOUtils.copy(input, write(f));
}

范例中的e.getName()取得了未经验证的目标目录,配合上面压缩档的案例,这个被抽取出来的evil.sh档案前会附加许多../,因此evil.sh便会被写入在目标目录之外。

Snyk表示,Zip Slip影响多种档案格式,包括tar、jar、war、cpio、apk、rar和7z。他们在GitHub中建立了存在漏洞的专案列表,其中不乏知名公司的专案,包括AWS Toolkit for Eclipse、Spring Integration,LinkedIn的Pinot OLAP数据库、Apache/Twitter Heron、阿里巴巴JStorm、Jenkins和Gradle等,但影响远不只如此,官方提到连Google也中标。

根据漏洞通报程序,在Snyk对外揭露这个漏洞前,就已经对受影响组织发出警告,多数受影响的专案也已经修复,Python在这次漏洞风暴中全身而退,Go语言只有一个函式库受到影响,在收到通知后的两天内就修复了,Ruby少数函式库存在漏洞危机,JavaScript由于有许多中央函式库,这个问题在公开揭露前,就已经全数被修复完毕,而.Net同样也有中央函式库提供抽取功能,因此目前也安全无虞。

而最严重的就属Java,再来就是Groovy,这两个语言缺乏中央函式库,即使热门的甲骨文与Apache的一般压缩API也没有对公开完整的解压缩功能,因此许多档案处理程式码都是在像是Stack Overflow这样的社群间分享,Snyk提到,他们发现有漏洞的Java专案比起其他语言还要多出许多。

Snyk建议,除了开发者需要检查解压缩程式码外,也可以在应用程序建置工作管线中,加入Zip Slip漏洞安全检测。

 

 

2019-01-24 20:36:00

相关文章