Zip Slip: 解凍プロセスで発生する Path Traversal 脆弱性

概要

Path Traversal または Directory Traversal 脆弱性は、主にユーザーの入力を正しく検証しないことによって発生するセキュリティ脆弱性である。攻撃者は、相対パスまたは絶対パスを使用し、元々はアクセスできないファイルや、意図しないパスのファイルを読み込み、修正することができ、さらには新しいファイルを作成することさえもできる。この脆弱性は、昔から知られていたが、未だに発見され続けており、Web 環境だけでなく様々な環境やプログラムでも発見されることがある。本記事では、特に圧縮プログラムの解凍プロセスで発生する Path Traversal 脆弱性である Zip Slip および主要脆弱性を紹介する。

Zip Slip 脆弱性とは?

Zip Slip は、圧縮ファイル内に含まれているファイルパスを悪意を持って操作し、解凍時に対象ディレクトリの外にファイルを作成したり、既存のファイルを上書きしたりする脆弱性である。攻撃者がこの脆弱性を悪用して作成した圧縮ファイルをユーザーが解凍すると、攻撃者が望むパスにファイルが作成される。

 

例えば、linux 環境において圧縮ファイルに以下のように相対パスが含まれており、Zip Slip 脆弱性が存在する圧縮プログラム内部でパスを正しく検証せずに解凍を行った場合、/etc/passwd ファイルを上書きすることができる。

../../../../etc/passwd

 

Windows 環境の場合、以下のように相対パスを利用してユーザー Startup フォルダーに圧縮ファイルを解凍すると、システムブートのたびに攻撃者が挿入したファイルやコマンドが実行される。

/../AppData/Roaming/Microsoft/Windows/Start Menu/Programs/Startup/

 

Zip Slip は、特定の圧縮形式でのみ発生する問題ではない。ZIP、TAR、RAR、7Z など、ファイルパス情報を含むすべての圧縮形式で Path Traversal 攻撃が可能である。

各圧縮形式ごとに圧縮ファイル構造が異なるが、代表的な圧縮形式である ZIP の構造を見ればファイルパス情報が含まれていることがわかる。

 

以下の表は、ZIP ファイルヘッダの一部を表した資料である。

 

Bytes Size Description
0 4 Magic number. Must be 50 4B 03 04 
4 2 Version needed to extract (minimum).
6 2 General purpose bit flag.
8 2 Compression method; e.g. none = 0, DEFLATE = 8 (or “\0x08\0x00”).
10 2 File last modification time.
12 2 File last modification date.
14 4 CRC-32 of uncompressed data.
18 4 Compressed size (or FF FF FF FF for ZIP64).
22 4 Uncompressed size (or FF FF FF FF for ZIP64).
26 2 File name length (n).
28 2 Extra field length (m).
30 n File name.
30+n m Extra field.

[表1] ZIP ファイルヘッダー(出典: Wikipedia)

 

上表によれば、ZIP ファイルでは 30 バイト(0x1E)から始まり、File name length に指定された長さ分の領域がファイル名(File name)項目に該当する。

File name 項目は、解凍時に作成されるファイルの名前を指定する役割を担っているが、この領域にパスを含んだファイル名を保存することで、下位フォルダーを生成した後、その位置にファイルを抽出することも可能である。

攻撃者は、File name に python の zipfile モジュールを利用したり、直接 ZIP ファイルを操作して File name 項目に相対パスを挿入することができる。

 

以下の図は、File name に相対パスを挿入した ZIP ファイルの構造である。実際に図で 0x1E オフセットからファイルパスが含まれていることを確認できる。このように作成された圧縮ファイルが %USERPROFILE%\Downloads パスにダウンロードされた状態で、Zip Slip 攻撃に脆弱な圧縮プログラムで解凍すると、ファイルがスタートアッププログラムフォルダーに作成される。

[図1] 解凍ファイルパスが含まれた ZIP ファイル

 

ZIP 形式だけでなく、7Z、RAR など、様々な圧縮形式でもファイル名領域にパス情報を含めることができる。

以下の図で RAR、TAR 形式ファイルにファイルパスと名前が含まれている構造を確認できる。

[図2] 解凍ファイルパスが含まれた RAR ファイル

[図3] 解凍ファイルパスが含まれた TAR ファイル

 

このように、ファイル内部にファイルパスと名前を確認できる形式もあるが、7Z のように平文で保存されていない形式も存在する。平文で保存されていない場合でも、平文で復号化後、パス文字列を処理する過程で問題が発生することがある。

主要脆弱性

CVE-2025-8088

RARLAB WinRAR 7.13 未満のバージョンで発見された Path Traversal 脆弱性であり、攻撃者は親ディレクトリを表す文字列「..\」と Alternate Data Stream(ADS)を活用して、パスの検証をバイパスし、解凍時に任意のパスにファイルを作成することができる。この脆弱性は ESET の研究員が発見したものであり、RomCom APT グループの実際の悪用事例も報告されている。

 

CVE-2025-6218

RARLAB WinRAR 7.12 未満のバージョンにおいて、攻撃者が挿入した相対パスに対して十分な検証を行わないため、親ディレクトリへのアクセスを通じたリモートコマンド実行(Remote Code Execution)の脆弱性が発見された。この脆弱性は、解凍時に作成するファイル名に相対パスが含まれており、特に空白文字が含まれている場合、従来の相対パス検証フィルタリングを回避できるという点を悪用する。簡単な PoC および参考資料は、ignis-sec の Github CVE-2025-6128 で確認できる。

 

CVE-2022-30333

RARLAB Unrar 6.12 未満のバージョンで影響を受ける脆弱性であり、Linux/Unix 環境で RAR 形式のファイルの解凍過程で発生する。最も基本的な ../../example 構文で攻撃が可能であり、~/ssh/authorized_keys のように任意のパスのファイルに対して上書きやファイルの作成ができる。

CVE-2018-20250

WinRAR 5.61 未満のバージョンで ACE 形式のファイルを解凍する際、パスフィルタリングが不十分であることにより発生する脆弱性である。ACE 形式のファイルの解凍プロセスで実行される Ace32Loader.exe プロセスでは UNACEV2.dll モジュールを使用する。UNACEV2.dll 内部でパス文字列処理ロジックのうち「:」文字と「\」文字に対するフィルタリングを回避できるため、上位ディレクトリにアクセスできるようになる。

 

結論

Zip Slip 脆弱性は、ユーザーがスクリプトや実行ファイルを直接実行しなくても、単に圧縮ファイルの解凍を実行するだけで悪用される可能性があり、攻撃者が指定するパスによって任意のコード実行に繋がる可能性が存在する。また、攻撃に使用されるペイロードはファイルの種類や拡張子に制限されず、パス情報が含まれているすべての圧縮ファイルが攻撃に活用される可能性がある。

しかし、Zip Slip 脆弱性は圧縮ファイルを解凍するユーザーの相互作用が必要であるため、ユーザーは疑わしい圧縮ファイルを解凍する際には特に注意を払う必要がある。また、定期的にプログラムをアップデートし、最新バージョンに維持する必要がある。

 

参考資料

https://nvd.nist.gov/vuln/detail/CVE-2025-6218

https://nvd.nist.gov/vuln/detail/cve-2022-30333

https://nvd.nist.gov/vuln/detail/cve-2018-20250

https://nvd.nist.gov/vuln/detail/CVE-2025-8088

https://www.welivesecurity.com/en/eset-research/update-winrar-tools-now-romcom-and-others-exploiting-zero-day-vulnerability/

 

関連 IOC および詳細な解析情報は、AhnLab の次世代脅威インテリジェンスプラットフォーム 「AhnLab TIP」 サブスクリプションサービスを通して確認できる。

Categories: Uncategorized