メインコンテンツへスキップ
Securify

Zip Slipとは?

セキュリティ全般Securify編集部読了目安 約 7 分
目次12項目
Zip Slipとは?

Zip Slipとは?

Zip SlipとはZipファイルからアーカイブされているファイル類を解凍する際に、存在する別のファイルに展開した圧縮ファイルを上書きしてしまう問題です。

また、Zip Slipは攻撃用のファイルをさあ行くすることで、ファイル解凍の際にディレクトリトラバーサル脆弱性のように相対パスを指定して解凍先を指定することでshellコードなどを実行できる場合があります。shellコードが実行できた場合は、OSコマンドインジェクションと同様に任意のコマンドが実行できるため、非常に危険性が高くなります。

ZipSlip攻撃の仕組み

以下はZip Slip脆弱性を含むプラグラムコードの例です。

Zip Slip脆弱性を含むプログラムコードの例

  Enumeration<ZipEntry>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)); 
  }

上記のプログラムコードではアーカイブされているファイル名のチェックや展開先のディレクトリやファイル名の存在チェックがされておらず、そのままファイル内容が展開されています。そのため例えば下記のようなファイル名がzip圧縮されていると、展開される際に任意のshellコードが実行されます。

Zip Slip攻撃用のファイル例

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

被害事例

ZIp Slip脆弱性は低水準のライブラリに問題が含まれているため、当脆弱性が原因で被害に至ったという報告はされていませんが、以下のように多くのライブラリで問題が検出されています。

Zip Slipが報告されたライブラリ類一覧

endor

Product

Language

Confirmed vulnerable

Fixed Version

CVE

Fixed

npm library

unzipper

JavaScript

YES

0.8.13

CVE-2018-1002203

17/4/2018

npm library

adm-zip

JavaScript

YES

0.4.9

CVE-2018-1002204

23/4/2018

Java library

codehaus/plexus-archiver

Java

YES

3.6.0

CVE-2018-1002200

6/5/2018

Java library

zeroturnaround/zt-zip

Java

YES

1.13

CVE-2018-1002201

26/4/2018

Java library

zip4j

Java

YES

1.3.3

CVE-2018-1002202

13/6/2018

.NET library

DotNetZip.Semverd

.NET

YES

1.11.0

CVE-2018-1002205

7/5/2018

.NET library

SharpCompress

.NET

YES

0.21.0

CVE-2018-1002206

2/5/2018

Go library

mholt/archiver

Go

YES

N/A

CVE-2019-10743

Oracle

java.util.zip

Java

* No High Level API

Documentation Fix

N/A

Apache

commons-compress

Java

* No High Level API

Documentation Fix

N/A

23/4/2018

.NET library

SharpZipLib

.NET

YES

v1.0.0

CVE-2018-1002208

19/8/2018

Ruby gem

zip-ruby

Ruby

* No High Level API

N/A

Ruby gem

rubyzip

Ruby

YES

CVE-2018-1000544

Ruby gem

zipruby

Ruby

* No High Level API

N/A

Go library

archive

Go

* No High Level API

N/A

Python library

tarfile

Python

YES

N/A

C++/qt library

quazip

C++

YES

0.7.6

CVE-2018-1002209

12/6/2018

Clojure library

Raynes/fs

Clojure

YES

akvo/fs 20180618-134534.a44cdd5b

N/A

18/6/2018

Go library

cloudfoundry/archiver

Go

YES

24/5/2018

N/A

24/5/2018

PHP library

chumper/zipper

PHP

YES

1.0.3

N/A

26/2/2020

Perl library

libarchive-zip-perl

Perl

YES

CVE-2018-10860

Rust library

rs-async-zip

Rust

* No High Level API

Documentation Fix

N/A

また下記のように多くのプロジェクトでも本問題が指摘されています。

Zip Slipが指摘されたプロジェクト一覧

ndor

Product

Fixed date

Fixed version

CVE

Vulnerable Code

Apache Storm

Storm

2/5/2018

1.1.3, 1.2.2

CVE-2018-8008

#1 #2 #3 #4

Apache Software Foundation

Apache Hadoop

30/5/2018 #1 #2

2.7.7, 2.8.5, 2.9.2, 3.0.3, 3.1.1

CVE-2018-8009

Apache

Maven

Apache

Ant

21/4/2018

1.9.12

CVE-2018-10886

Pivotal

spring-integration-zip

3/5/2018

1.0.1

CVE-2018-1261

Pivotal

spring-integration-zip

10/5/2018

1.0.2

CVE-2018-1263

HP

Fortify Cloud Scan Jenkins Plugin

27/4/2018

1.5.2

#1

OWASP

DependencyCheck

7/5/2018

3.2.0

CVE-2018-12036

Amazon

AWS Toolkit for Eclipse

31/5/2018

SonarSource

SonarQube

4/5/2018

6.7.4 LTS, 7.2

#1

Cinchapi

Concourse

30/5/2018

#1

Orient Technologies

OrientDB

31/5/2018

#1 #2

FenixEdu

Academic

30/5/2018

#1

Lucee

Lucee

5/6/2018

5.2.7.63, 5.2.8.47

#1

groovy-common-extensions

groovy-common-extensions

3/7/2018

0.7.1

#1

fabric8

fabric8

5/6/2018

2.2.170-85

#1

Apache

Tika

19/9/2018

1.19

Apache

DeepLearning4J

10/24/2018

1.0.0-SNAPSHOT

FireGiant

WiX Toolkit

09/19/2019

3.11.2

CVE-2019-16511

Zip Slipが起こる原因

前述した通りZip圧縮されたファイルを展開する際にファイル名および展開先のファイルやディレクトリのチェックがされていないことが原因で問題が発生します。

Zip Slip攻撃への対策手法

プログラム実装している場合

Zip圧縮されたファイルを展開する際にファイル名および展開先のファイルやディレクトリのチェックを実装します。

ライブラリ類を利用している場合

お使いライブラリバージョンにおいてZip Slip脆弱性が報告されていないか確認の上、必要に応じてセキュリティパッチの適用もしくは最新バージョンへのアップグレードを行います。

また上記の2点の対策に併せて、OSごとに用意されているファイルバーミッション設定を適切に行うことで被害を縮小させることができます。

まずは手軽にツールで脆弱性診断

上述の対策手法が重要となる一方で、脆弱性が混入されていないかを検知する事も重要となります。そのためには脆弱性診断を受診する必要があり、コードインジェクションの脆弱性についても脆弱性診断を通じて発見する事が出来ます。

脆弱性診断とは何かについて詳しく知りたい⽅は脆弱性診断とは(エンジニア向け)と脆弱性診断とは(⾮エンジニア向け)もぜひご参照ください。

脆弱性診断ツール「Securify Scan」では、コードインジェクションの脆弱性検知も対応しております。脆弱性検知やセキュリティレベルを強化したい企業様はぜひ弊社の脆弱性診断ツール「Securify Scan」を活用ください。

無償でのトライアル実施も行っておりますので、お気軽にお問い合わせください。

まずは手軽にツールで脆弱性診断の説明画像

Webアプリケーションの
継続的セキュリティを簡単に実現

Securify

資料請求・お問い合わせはこちら

Get Started

貴社の利用状況に合わせた見積もりを作成します。

ご利用規模・診断頻度に合わせて最適なプランをご提案します。

貴社の利用状況に合わせた見積もりを作成します。