SCW アイコン
ヒーロー背景(区切りなし)
ブログ

安全编码技术:Zip 库的默认行为可能会导致远程代码执行

ピーテル・デ・クレマー
2017年11月13日 掲載
最終更新日: 2026年3月9日

今週は、Zipライブラリのデフォルト動作についてご紹介します。あなたがアプリケーション開発者であれば、これを使ったことがあるかもしれません。インターネットでダウンロードされるほとんどのリソースはZip形式ですが、これは理にかなっています。圧縮されたデータは小さいので、ダウンロードが速くなり、帯域幅を消費しません。

もっと具体的な例を挙げると、ゲーム用のテクスチャ、キーボードの自動補完用の言語パックなどがあります。多くのリソースは、アプリケーションに自動的にバンドルされておらず、後でダウンロードされます。

しかし、この機能を使用する際には注意が必要です。ZIPアーカイブ内のファイル名には、パストラバーサル情報が含まれていることがあります。これを解凍すると、意図したディレクトリの外にファイルが作成されてしまいます。これは、既存のファイルを上書きする目的で行われることが多いです。

ジップアーカイブス

以下の2つのファイルが入ったZIPアーカイブがあったとします。

file1
../file2

このアーカイブを解凍すると、file1は解凍ディレクトリ内の想定した場所に解凍されます。しかし、file2は、zipライブラリにアーカイブの展開を依頼した場所よりも1つ上のディレクトリに書き込まれました。

使用しているZIPライブラリがこのケースを適切に処理していない場合、攻撃者がシステム内に任意のファイルを書き込めるようになってしまうので注意が必要です。ライブラリが安全であるかどうかを常にチェックしてください。この経験則はどのようなライブラリにも有効ですが、特に、この種のファイルに対するzipライブラリのデフォルトの動作をチェックすることをお勧めします。

このケースがAndroidで適切に処理されなかった場合の結果を見てみましょう。Androidでは、Java Zipライブラリ(java.util.zip)が使用されており、このライブラリはデフォルトで上記のようなパストラバーサルを許可しています。

AndroidのDalvik Executable Format(.dex)では、1つのファイルが持てるクラスの数に制限があります。より多くのクラスを必要とするアプリは、APIレベル21(Android 5.0 Lollipop)以降に追加されたMultiDex Supportライブラリを利用することができます。このライブラリは、セカンダリの.dexファイルをアプリケーションのデータディレクトリに保存します。このディレクトリはアプリケーションのユーザーが書き込み可能で、.dexファイルが必要になったときにこのコードが読み込まれて実行されます。

つまり、攻撃者は、悪意のあるZIPアーカイブを使って、.dexファイルを上書きすることで修正することができ、さらに悪いことに、このファイルが読み込まれて実行されることで、リモートコード実行の脆弱性が生じます。これは単なる理論上の例ではなく、アプリストアで1億以上のダウンロード数を誇るアプリ「My Talking Tom」で実証されています。Black Hatで発表されたこのエクスプロイトのビデオをご覧ください。

トーキング・トム

常にzipライブラリの動作を確認し、その不安要素を把握しておきましょう。お使いの zip ライブラリでパストラバーサルを無効にできない場合は、各エントリの名前を検証してから抽出するようにしてください。名前は正規化されている必要があり、結果として得られるパスはアーカイブを抽出したいディレクトリにある必要があります。ついでに、ZIP爆弾を防ぐために、抽出されたアーカイブの合計サイズもチェックすべきですが、これは別の週の記事にします。

パストラバーサルに関するチャレンジをしてみたい方、セキュアコーディングのスキルを試してみたい方は、私たちのプラットフォームをご覧ください。

また次回、お会いしましょう。そして忘れないでください、安全なコードかコードでないかを

- 名前の前に任意の数の " ../ " が付いたファイルを zip に注入することができます
- zip ライブラリがこのケースを適切に処理するように注意しないと、意図した抽出ディレクトリの外に書き込むことができてしまいます
- zip ファイルが信頼されていない場合、攻撃者に任意の書き込みの脆弱性を与えてしまいます

https://www.blackhat.com/docs/ldn-15/materials/london-15-Welton-Abusing-Android-Apps-And-Gaining-Remote-Code-Execution.pdf

リソースを確認する
リソースを確認する

我们可以将一个文件注入到一个名称前缀为 zip 的 zip

もっと知りたいですか?

アプリケーション・セキュリティ・リサーチャー、R&Dエンジニア、博士号取得者

もっと詳しく

Secure Code Warriorは、ソフトウェア開発ライフサイクル全体を通じてコードを保護し、サイバーセキュリティを最優先とする文化を醸成するお手伝いをします。AppSecマネージャー、開発者、最高情報セキュリティ責任者(CISO)、あるいはセキュリティに関わるあらゆる方々の組織において、不安全なコードに関連するリスクの低減を支援します。

デモを予約する
共有する:
リンクトインのブランドソーシャルx ロゴ
作者
ピーテル・デ・クレマー
2017年11月13日発行

アプリケーション・セキュリティ・リサーチャー、R&Dエンジニア、博士号取得者

共有する:
リンクトインのブランドソーシャルx ロゴ

今週は、Zipライブラリのデフォルト動作についてご紹介します。あなたがアプリケーション開発者であれば、これを使ったことがあるかもしれません。インターネットでダウンロードされるほとんどのリソースはZip形式ですが、これは理にかなっています。圧縮されたデータは小さいので、ダウンロードが速くなり、帯域幅を消費しません。

もっと具体的な例を挙げると、ゲーム用のテクスチャ、キーボードの自動補完用の言語パックなどがあります。多くのリソースは、アプリケーションに自動的にバンドルされておらず、後でダウンロードされます。

しかし、この機能を使用する際には注意が必要です。ZIPアーカイブ内のファイル名には、パストラバーサル情報が含まれていることがあります。これを解凍すると、意図したディレクトリの外にファイルが作成されてしまいます。これは、既存のファイルを上書きする目的で行われることが多いです。

ジップアーカイブス

以下の2つのファイルが入ったZIPアーカイブがあったとします。

file1
../file2

このアーカイブを解凍すると、file1は解凍ディレクトリ内の想定した場所に解凍されます。しかし、file2は、zipライブラリにアーカイブの展開を依頼した場所よりも1つ上のディレクトリに書き込まれました。

使用しているZIPライブラリがこのケースを適切に処理していない場合、攻撃者がシステム内に任意のファイルを書き込めるようになってしまうので注意が必要です。ライブラリが安全であるかどうかを常にチェックしてください。この経験則はどのようなライブラリにも有効ですが、特に、この種のファイルに対するzipライブラリのデフォルトの動作をチェックすることをお勧めします。

このケースがAndroidで適切に処理されなかった場合の結果を見てみましょう。Androidでは、Java Zipライブラリ(java.util.zip)が使用されており、このライブラリはデフォルトで上記のようなパストラバーサルを許可しています。

AndroidのDalvik Executable Format(.dex)では、1つのファイルが持てるクラスの数に制限があります。より多くのクラスを必要とするアプリは、APIレベル21(Android 5.0 Lollipop)以降に追加されたMultiDex Supportライブラリを利用することができます。このライブラリは、セカンダリの.dexファイルをアプリケーションのデータディレクトリに保存します。このディレクトリはアプリケーションのユーザーが書き込み可能で、.dexファイルが必要になったときにこのコードが読み込まれて実行されます。

つまり、攻撃者は、悪意のあるZIPアーカイブを使って、.dexファイルを上書きすることで修正することができ、さらに悪いことに、このファイルが読み込まれて実行されることで、リモートコード実行の脆弱性が生じます。これは単なる理論上の例ではなく、アプリストアで1億以上のダウンロード数を誇るアプリ「My Talking Tom」で実証されています。Black Hatで発表されたこのエクスプロイトのビデオをご覧ください。

トーキング・トム

常にzipライブラリの動作を確認し、その不安要素を把握しておきましょう。お使いの zip ライブラリでパストラバーサルを無効にできない場合は、各エントリの名前を検証してから抽出するようにしてください。名前は正規化されている必要があり、結果として得られるパスはアーカイブを抽出したいディレクトリにある必要があります。ついでに、ZIP爆弾を防ぐために、抽出されたアーカイブの合計サイズもチェックすべきですが、これは別の週の記事にします。

パストラバーサルに関するチャレンジをしてみたい方、セキュアコーディングのスキルを試してみたい方は、私たちのプラットフォームをご覧ください。

また次回、お会いしましょう。そして忘れないでください、安全なコードかコードでないかを

- 名前の前に任意の数の " ../ " が付いたファイルを zip に注入することができます
- zip ライブラリがこのケースを適切に処理するように注意しないと、意図した抽出ディレクトリの外に書き込むことができてしまいます
- zip ファイルが信頼されていない場合、攻撃者に任意の書き込みの脆弱性を与えてしまいます

https://www.blackhat.com/docs/ldn-15/materials/london-15-Welton-Abusing-Android-Apps-And-Gaining-Remote-Code-Execution.pdf

リソースを確認する
リソースを確認する

以下のフォームに記入してレポートをダウンロードしてください

当社は、当社の製品および/または関連するセキュリティコードに関する情報を送信するため、お客様の許可を得たいと考えております。お客様の個人情報は常に慎重に取り扱い、マーケティング目的で他社に販売することは決してありません。

提出
SCW成功アイコン
SCWエラーアイコン
フォームを送信するには、「分析」Cookieを有効にしてください。完了後、いつでも再度無効にできます。

今週は、Zipライブラリのデフォルト動作についてご紹介します。あなたがアプリケーション開発者であれば、これを使ったことがあるかもしれません。インターネットでダウンロードされるほとんどのリソースはZip形式ですが、これは理にかなっています。圧縮されたデータは小さいので、ダウンロードが速くなり、帯域幅を消費しません。

もっと具体的な例を挙げると、ゲーム用のテクスチャ、キーボードの自動補完用の言語パックなどがあります。多くのリソースは、アプリケーションに自動的にバンドルされておらず、後でダウンロードされます。

しかし、この機能を使用する際には注意が必要です。ZIPアーカイブ内のファイル名には、パストラバーサル情報が含まれていることがあります。これを解凍すると、意図したディレクトリの外にファイルが作成されてしまいます。これは、既存のファイルを上書きする目的で行われることが多いです。

ジップアーカイブス

以下の2つのファイルが入ったZIPアーカイブがあったとします。

file1
../file2

このアーカイブを解凍すると、file1は解凍ディレクトリ内の想定した場所に解凍されます。しかし、file2は、zipライブラリにアーカイブの展開を依頼した場所よりも1つ上のディレクトリに書き込まれました。

使用しているZIPライブラリがこのケースを適切に処理していない場合、攻撃者がシステム内に任意のファイルを書き込めるようになってしまうので注意が必要です。ライブラリが安全であるかどうかを常にチェックしてください。この経験則はどのようなライブラリにも有効ですが、特に、この種のファイルに対するzipライブラリのデフォルトの動作をチェックすることをお勧めします。

このケースがAndroidで適切に処理されなかった場合の結果を見てみましょう。Androidでは、Java Zipライブラリ(java.util.zip)が使用されており、このライブラリはデフォルトで上記のようなパストラバーサルを許可しています。

AndroidのDalvik Executable Format(.dex)では、1つのファイルが持てるクラスの数に制限があります。より多くのクラスを必要とするアプリは、APIレベル21(Android 5.0 Lollipop)以降に追加されたMultiDex Supportライブラリを利用することができます。このライブラリは、セカンダリの.dexファイルをアプリケーションのデータディレクトリに保存します。このディレクトリはアプリケーションのユーザーが書き込み可能で、.dexファイルが必要になったときにこのコードが読み込まれて実行されます。

つまり、攻撃者は、悪意のあるZIPアーカイブを使って、.dexファイルを上書きすることで修正することができ、さらに悪いことに、このファイルが読み込まれて実行されることで、リモートコード実行の脆弱性が生じます。これは単なる理論上の例ではなく、アプリストアで1億以上のダウンロード数を誇るアプリ「My Talking Tom」で実証されています。Black Hatで発表されたこのエクスプロイトのビデオをご覧ください。

トーキング・トム

常にzipライブラリの動作を確認し、その不安要素を把握しておきましょう。お使いの zip ライブラリでパストラバーサルを無効にできない場合は、各エントリの名前を検証してから抽出するようにしてください。名前は正規化されている必要があり、結果として得られるパスはアーカイブを抽出したいディレクトリにある必要があります。ついでに、ZIP爆弾を防ぐために、抽出されたアーカイブの合計サイズもチェックすべきですが、これは別の週の記事にします。

パストラバーサルに関するチャレンジをしてみたい方、セキュアコーディングのスキルを試してみたい方は、私たちのプラットフォームをご覧ください。

また次回、お会いしましょう。そして忘れないでください、安全なコードかコードでないかを

- 名前の前に任意の数の " ../ " が付いたファイルを zip に注入することができます
- zip ライブラリがこのケースを適切に処理するように注意しないと、意図した抽出ディレクトリの外に書き込むことができてしまいます
- zip ファイルが信頼されていない場合、攻撃者に任意の書き込みの脆弱性を与えてしまいます

https://www.blackhat.com/docs/ldn-15/materials/london-15-Welton-Abusing-Android-Apps-And-Gaining-Remote-Code-Execution.pdf

ウェビナーを視聴する
始めましょう
もっと詳しく

以下のリンクをクリックして、このリソースのPDFをダウンロードしてください。

Secure Code Warriorは、ソフトウェア開発ライフサイクル全体を通じてコードを保護し、サイバーセキュリティを最優先とする文化を醸成するお手伝いをします。AppSecマネージャー、開発者、最高情報セキュリティ責任者(CISO)、あるいはセキュリティに関わるあらゆる方々の組織において、不安全なコードに関連するリスクの低減を支援します。

レポートを確認するデモを予約する
PDFをダウンロード
リソースを確認する
共有する:
リンクトインのブランドソーシャルx ロゴ
もっと知りたいですか?

共有する:
リンクトインのブランドソーシャルx ロゴ
作者
ピーテル・デ・クレマー
2017年11月13日発行

アプリケーション・セキュリティ・リサーチャー、R&Dエンジニア、博士号取得者

共有する:
リンクトインのブランドソーシャルx ロゴ

今週は、Zipライブラリのデフォルト動作についてご紹介します。あなたがアプリケーション開発者であれば、これを使ったことがあるかもしれません。インターネットでダウンロードされるほとんどのリソースはZip形式ですが、これは理にかなっています。圧縮されたデータは小さいので、ダウンロードが速くなり、帯域幅を消費しません。

もっと具体的な例を挙げると、ゲーム用のテクスチャ、キーボードの自動補完用の言語パックなどがあります。多くのリソースは、アプリケーションに自動的にバンドルされておらず、後でダウンロードされます。

しかし、この機能を使用する際には注意が必要です。ZIPアーカイブ内のファイル名には、パストラバーサル情報が含まれていることがあります。これを解凍すると、意図したディレクトリの外にファイルが作成されてしまいます。これは、既存のファイルを上書きする目的で行われることが多いです。

ジップアーカイブス

以下の2つのファイルが入ったZIPアーカイブがあったとします。

file1
../file2

このアーカイブを解凍すると、file1は解凍ディレクトリ内の想定した場所に解凍されます。しかし、file2は、zipライブラリにアーカイブの展開を依頼した場所よりも1つ上のディレクトリに書き込まれました。

使用しているZIPライブラリがこのケースを適切に処理していない場合、攻撃者がシステム内に任意のファイルを書き込めるようになってしまうので注意が必要です。ライブラリが安全であるかどうかを常にチェックしてください。この経験則はどのようなライブラリにも有効ですが、特に、この種のファイルに対するzipライブラリのデフォルトの動作をチェックすることをお勧めします。

このケースがAndroidで適切に処理されなかった場合の結果を見てみましょう。Androidでは、Java Zipライブラリ(java.util.zip)が使用されており、このライブラリはデフォルトで上記のようなパストラバーサルを許可しています。

AndroidのDalvik Executable Format(.dex)では、1つのファイルが持てるクラスの数に制限があります。より多くのクラスを必要とするアプリは、APIレベル21(Android 5.0 Lollipop)以降に追加されたMultiDex Supportライブラリを利用することができます。このライブラリは、セカンダリの.dexファイルをアプリケーションのデータディレクトリに保存します。このディレクトリはアプリケーションのユーザーが書き込み可能で、.dexファイルが必要になったときにこのコードが読み込まれて実行されます。

つまり、攻撃者は、悪意のあるZIPアーカイブを使って、.dexファイルを上書きすることで修正することができ、さらに悪いことに、このファイルが読み込まれて実行されることで、リモートコード実行の脆弱性が生じます。これは単なる理論上の例ではなく、アプリストアで1億以上のダウンロード数を誇るアプリ「My Talking Tom」で実証されています。Black Hatで発表されたこのエクスプロイトのビデオをご覧ください。

トーキング・トム

常にzipライブラリの動作を確認し、その不安要素を把握しておきましょう。お使いの zip ライブラリでパストラバーサルを無効にできない場合は、各エントリの名前を検証してから抽出するようにしてください。名前は正規化されている必要があり、結果として得られるパスはアーカイブを抽出したいディレクトリにある必要があります。ついでに、ZIP爆弾を防ぐために、抽出されたアーカイブの合計サイズもチェックすべきですが、これは別の週の記事にします。

パストラバーサルに関するチャレンジをしてみたい方、セキュアコーディングのスキルを試してみたい方は、私たちのプラットフォームをご覧ください。

また次回、お会いしましょう。そして忘れないでください、安全なコードかコードでないかを

- 名前の前に任意の数の " ../ " が付いたファイルを zip に注入することができます
- zip ライブラリがこのケースを適切に処理するように注意しないと、意図した抽出ディレクトリの外に書き込むことができてしまいます
- zip ファイルが信頼されていない場合、攻撃者に任意の書き込みの脆弱性を与えてしまいます

https://www.blackhat.com/docs/ldn-15/materials/london-15-Welton-Abusing-Android-Apps-And-Gaining-Remote-Code-Execution.pdf

目次

PDFをダウンロード
リソースを確認する
もっと知りたいですか?

アプリケーション・セキュリティ・リサーチャー、R&Dエンジニア、博士号取得者

もっと詳しく

Secure Code Warriorは、ソフトウェア開発ライフサイクル全体を通じてコードを保護し、サイバーセキュリティを最優先とする文化を醸成するお手伝いをします。AppSecマネージャー、開発者、最高情報セキュリティ責任者(CISO)、あるいはセキュリティに関わるあらゆる方々の組織において、不安全なコードに関連するリスクの低減を支援します。

デモを予約するダウンロード
共有する:
リンクトインのブランドソーシャルx ロゴ
リソースセンター

入門に役立つリソース

さらに多くの投稿
リソースセンター

入門に役立つリソース

さらに多くの投稿