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

今週は、Zipライブラリのデフォルトの動作についてお話しします。アプリケーション開発者であれば、これまでに一度は利用したことがあるはずです。インターネットからダウンロードされるリソースの多くはzip形式ですが、これには理由があります。データを圧縮すればサイズが小さくなり、ダウンロードが高速化され、帯域幅の消費も抑えられるからです。
具体的な例を挙げると、ゲームのテクスチャや、キーボードの自動補完用言語パックなどがあります。多くのリソースはアプリケーションに自動的にバンドルされるのではなく、後からダウンロードされます。
ただし、この機能を使用する際は注意が必要です。zipアーカイブ内のファイル名には、パス・トラバーサル(ディレクトリトラバーサル)の情報が含まれている可能性があるからです。解凍時に、意図したディレクトリの外側にファイルが作成されてしまう恐れがあります。これは多くの場合、既存のファイルを上書きする目的で行われます。

例えば、以下の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で発表されたエクスプロイトの動画です。

zipライブラリの動作を常に確認し、その脆弱性を把握しておきましょう。zipライブラリでパス・トラバーサルを無効にできない場合は、解凍前に各エントリの名前を必ず検証してください。名前を正規化し、結果として得られるパスがアーカイブを解凍したいディレクトリ内にあることを確認する必要があります。ついでに、zip爆弾を防ぐために解凍後のアーカイブの合計サイズもチェックすべきですが、それについてはまた別の機会にお話しします。
パス・トラバーサルの課題に挑戦したい場合や、セキュアコーディングのスキルを試したい場合は、ぜひ当社のプラットフォームをご覧ください。
それではまた次回。セキュアなコードを、さもなくばコードを書くな!
- 任意の数の「 ../ 」を接頭辞として持つファイル名をzipに挿入できる
- zipライブラリがこのケースを適切に処理しない場合、意図した解凍先ディレクトリの外側に書き込めてしまう
- zipファイルが信頼できない場合、攻撃者に任意の書き込み脆弱性を与えてしまう
AI主導の開発をリリース前にガバナンスする
AIを活用したリスク測定、コミット時のセキュアコーディングポリシーの強制、そしてSDLC全体を通じたセキュアなデリバリーの加速を実現します。
他のブログ記事を見る
セキュアコーディング、AIガバナンス、ソフトウェアリスク管理に関する専門的なコンテンツをご覧ください。
%252520%252520(3).avif)
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.

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
AIを活用した開発をリリース前にセキュアに
開発者のリスクを可視化し、ポリシーを適用することで、ソフトウェア開発ライフサイクル全体における脆弱性を未然に防ぎます。



.avif)