ブログ

セキュアコーディング技術。Zip ライブラリのデフォルトの動作は、リモートコード実行につながる可能性があります。

ピーテル・デ・クレマー
2017年11月13日発行

今週は、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に注入することができます。

ご興味がおありですか?

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

Secure Code Warrior は、ソフトウェア開発ライフサイクル全体にわたってコードを保護し、サイバーセキュリティを最優先とする企業文化を創造するために、お客様の組織を支援します。AppSec マネージャー、開発者、CISO、またはセキュリティに関わるすべての人が、安全でないコードに関連するリスクを減らすことができるよう、支援します。

デモを予約する
シェアする
著者
ピーテル・デ・クレマー
2017年11月13日発行

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

シェアする

今週は、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

リソースを見る
リソースを見る

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

弊社製品や関連するセキュアコーディングのトピックに関する情報をお送りする許可をお願いします。当社は、お客様の個人情報を細心の注意を払って取り扱い、マーケティング目的で他社に販売することは決してありません。

送信
フォームを送信するには、「Analytics」の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をダウンロード
リソースを見る
シェアする
ご興味がおありですか?

シェアする
著者
ピーテル・デ・クレマー
2017年11月13日発行

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

シェアする

今週は、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、またはセキュリティに関わるすべての人が、安全でないコードに関連するリスクを減らすことができるよう、支援します。

デモを予約するダウンロード
シェアする
リソース・ハブ

始めるためのリソース

その他の記事
リソース・ハブ

始めるためのリソース

その他の記事