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

2017年11月13日発行
ピーテル・デ・クレマー著
ケーススタディ

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

2017年11月13日発行
Pieter De Cremer 著

今週は、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を有効にしてください。完了したら、再度無効にしてください。