セキュアコーディング技術。Zip ライブラリのデフォルトの動作は、リモートコード実行につながる可能性があります。
今週は、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 ファイルが信頼されていない場合、攻撃者に任意の書き込みの脆弱性を与えてしまいます
アプリケーション・セキュリティ・リサーチャー、R&Dエンジニア、博士号取得者

Secure Code Warrior は、ソフトウェア開発ライフサイクル全体にわたってコードを保護し、サイバーセキュリティを最優先とする企業文化を創造するために、お客様の組織を支援します。AppSec マネージャー、開発者、CISO、またはセキュリティに関わるすべての人が、安全でないコードに関連するリスクを減らすことができるよう、支援します。
デモを予約するアプリケーション・セキュリティ・リサーチャー、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 ファイルが信頼されていない場合、攻撃者に任意の書き込みの脆弱性を与えてしまいます

今週は、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 ファイルが信頼されていない場合、攻撃者に任意の書き込みの脆弱性を与えてしまいます
今週は、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 ファイルが信頼されていない場合、攻撃者に任意の書き込みの脆弱性を与えてしまいます
始めるためのリソース
セキュア・バイ・デザインベストプラクティスの定義、開発者の能力向上、予防的セキュリティ成果のベンチマーク
このリサーチペーパーでは、Secure Code Warrior 共同設立者であるピーテル・ダニュー(Pieter Danhieux)氏とマティアス・マドゥ(Matias Madou)博士、そして専門家であるクリス・イングリス(Chris Inglis)氏(元米国サイバーディレクター、現パラディン・キャピタル・グループ戦略顧問)、デヴィン・リンチ(Devin Lynch)氏(パラディン・グローバル・インスティテュート・シニアディレクター)が、CISO、アプリケーション・セキュリティ担当副社長、ソフトウェア・セキュリティの専門家など、企業のセキュリティ・リーダー20人以上への詳細なインタビューから得られた主な知見を明らかにします。
セキュリティ スキルのベンチマーク: 企業におけるセキュアな設計の合理化
セキュアバイデザイン(SBD)構想の成功に関する有意義なデータを見つけることは、非常に困難である。CISO は、セキュリティプログラム活動の投資収益率(ROI)とビジネス価値を、従業員レベルと企業レベルの両方で証明しようとすると、しばしば困難に直面します。言うまでもなく、企業にとって、現在の業界標準に対して自社の組織がどのようにベンチマークされているかを把握することは特に困難です。大統領の国家サイバーセキュリティ戦略は、関係者に「デザインによるセキュリティとレジリエンスを受け入れる」ことを求めている。セキュアバイデザインの取り組みを成功させる鍵は、開発者にセキュアなコードを保証するスキルを与えるだけでなく、規制当局にそれらのスキルが整っていることを保証することである。本プレゼンテーションでは、25万人以上の開発者から収集した社内データ、データに基づく顧客の洞察、公的研究など、複数の一次ソースから得られた無数の定性的・定量的データを紹介します。こうしたデータ・ポイントの集積を活用することで、複数の業種におけるセキュア・バイ・デザイン・イニシアチブの現状をお伝えすることを目的としています。本レポートでは、この領域が現在十分に活用されていない理由、スキルアッププログラムの成功がサイバーセキュリティのリスク軽減に与える大きな影響、コードベースから脆弱性のカテゴリーを排除できる可能性について詳述しています。
始めるためのリソース
明らかになった:サイバー業界はセキュア・バイ・デザインをどのように定義しているか
最新のホワイトペーパーでは、当社の共同設立者であるピーテル・ダニュー(Pieter Danhieux)氏とマティアス・マドゥ(Matias Madou)博士が、CISO、AppSecリーダー、セキュリティ専門家を含む20人以上の企業セキュリティリーダーと対談し、このパズルの重要なピースを見つけ出し、Secure by Design運動の背後にある現実を明らかにしました。セキュア・バイ・デザインは、セキュリティ・チーム全体で共有された野心ですが、共有されたプレイブックはありません。