ブログ

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

November 13, 2017
ピーター・デ・クレーメル
さまざまな開かれた本が積み重なり、トンネルのような渦を巻いている様子を真上から捉えた写真。

今週は、Zipライブラリのデフォルトの動作についてお話しします。アプリケーション開発者であれば、これまでに一度は利用したことがあるはずです。インターネットからダウンロードされるリソースの多くはzip形式ですが、これには理由があります。データを圧縮すればサイズが小さくなり、ダウンロードが高速化され、帯域幅の消費も抑えられるからです。

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

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

Zip Archives

例えば、以下の2つのファイルを含むzipアーカイブがあるとします。

file1
  ../file2

このアーカイブを解凍すると、file1は想定通り解凍先のディレクトリに展開されます。しかし、file2はzipライブラリに指定した解凍先ディレクトリよりも1つ上の階層に書き込まれてしまいます。

そのため、注意が必要です。使用しているzipライブラリがこのケースを適切に処理していない場合、攻撃者がシステム上の任意の場所にファイルを書き込めるようになります。ライブラリの安全性は常に確認してください。これはあらゆるライブラリに言えることですが、特にzipライブラリを使用する際は、こうしたファイルに対するデフォルトの動作を必ず確認するようにしましょう。

Androidでこのケースが適切に処理されない場合にどのような結果を招くか、実演してみましょう。AndroidではJavaのZipライブラリ(java.util.zip)が使用されていますが、このライブラリはデフォルトで前述のようなパス・トラバーサルを許容してしまいます。

AndroidのDalvik実行可能形式(.dex)には、1つのファイルに含められるクラス数に制限があります。より多くのクラスを必要とするアプリでは、APIレベル21(Android 5.0 Lollipop)から追加されたMultiDexサポートライブラリを利用できます。このライブラリは、2次的な.dexファイルをアプリケーションのデータディレクトリに保存します。このディレクトリはアプリユーザーが書き込み可能であり、.dexファイルが必要になった際にこのコードが読み込まれ、実行されます。

つまり、攻撃者が悪意のあるzipアーカイブを使用して.dexファイルを上書きし、改ざんすることが可能です。さらに悪いことに、このファイルが読み込まれて実行されることで、リモートコード実行の脆弱性につながります。これは単なる理論上の例ではなく、アプリストアで1億回以上ダウンロードされている「My Talking Tom」で実証されています。以下は、Black Hatで発表されたエクスプロイトの動画です。

Talking Tom

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

タグライン

AI主導の開発をリリース前にガバナンスする

AIを活用したリスク測定、コミット時のセキュアコーディングポリシーの強制、そしてSDLC全体を通じたセキュアなデリバリーの加速を実現します。

デモを予約する
リソースライブラリ

他のブログ記事を見る

セキュアコーディング、AIガバナンス、ソフトウェアリスク管理に関する専門的なコンテンツをご覧ください。

すべて表示
導入事例
フィルターラベル
これはdivブロック内のテキストです。

Supercharged Security Awareness: How Tournaments are Inspiring Developers at Erste Group

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros elementum tristique. Duis cursus, mi quis viverra ornare, eros dolor interdum nulla, ut commodo diam libero vitae erat. Aenean faucibus nibh et justo cursus id rutrum lorem imperdiet. Nunc ut sem vitae risus tristique posuere.

詳細はこちら
導入事例
フィルターラベル
これはdivブロック内のテキストです。

Security as culture: How Blue Prism cultivates world-class secure developers

Learn how Blue Prism, the global leader in intelligent automation for the enterprise, used Secure Code Warrior's agile learning platform to create a security-first culture with their developers, achieve their business goals, and ship secure code at speed

詳細はこちら
導入事例
フィルターラベル
これはdivブロック内のテキストです。

セキュリティ文化の統一:Sageはいかにしてチャンピオンプログラムを構築したか

Sageがどのようにして柔軟かつ関係性を重視したアプローチでセキュリティを強化し、200名以上のセキュリティチャンピオンを育成して、目に見えるリスク低減を実現したのかをご紹介します。

詳細はこちら
ブログ
フィルターラベル
これはdivブロック内のテキストです。

2026年サイバーセキュリティ意識向上月間:企業防衛に不可欠なAIセキュリティの理解

主要なAI企業の多くが、安全対策が追いつくまでの間、AI開発を世界的に減速させるよう公に呼びかける事態となっています。しかし現実には、深刻なセキュリティ問題はすでに顕在化しています。AI導入に伴う金銭的コストやリスクが増大し続ける中、多くのセキュリティリーダーや経営陣は差し迫った状況に追い込まれています。

詳細はこちら
ブログ
フィルターラベル
これはdivブロック内のテキストです。

イネーブラー8:プログラムのブランディング

セキュアコーディングプログラムを成功させるには、優れたコンテンツ以上のものが必要です。イネーブラー8では、ブランディングによって参加を「憧れのステータスを得る体験」へと変える方法を解説します。

詳細はこちら
ブログ
フィルターラベル
これはdivブロック内のテキストです。

すべての従業員が今、AIサイバーセキュリティの最前線に立っている

エンタープライズテクノロジーの状況は、手遅れになるまで誰も予測できなかったほどの速さで変化しています。私たちは今、人間が書いたコードと基本的なコパイロット支援の時代から、エージェント型開発ライフサイクル(ADLC)の時代へと正式に足を踏み入れました。自律型AIエージェントは、複数の機能にわたってかつてない効率性をもたらす一方で、全く新しい種類のセキュリティリスクや規制リスクも引き起こしています。

詳細はこちら

AIを活用した開発をリリース前にセキュアに

開発者のリスクを可視化し、ポリシーを適用することで、ソフトウェア開発ライフサイクル全体における脆弱性を未然に防ぎます。

デモを予約する
該当する項目が見つかりません。