Shikata Ga Nai

Private? There is no such things.

ファイルアップロードの脆弱性とは?その仕組みと危険性をわかりやすく解説!

Hello there, ('ω')ノ

✅ ファイルアップロード機能の危険性とは?

ファイルアップロードの脆弱性 とは、 Webアプリケーションがユーザーにファイルをアップロードさせる際に、 ファイル名・拡張子・中身・サイズなどの検証が不十分 なことで、 攻撃者に 意図しないファイルをアップロードされる 危険性を指します。


🎯 ファイルアップロード機能の利用例(安全な用途)

  • ユーザーのプロフィール画像アップロード
  • 書類提出フォーム(PDF, Word など)
  • 添付ファイルを含むお問い合わせ機能

⚠️ しかし、検証が不十分な場合は…

攻撃者は本来アップロードが許可されていない「悪意あるファイル」 をアップロードし、 サーバー上での実行や情報漏洩、システム乗っ取り などを引き起こす可能性があります。


🚨 よくあるファイルアップロードの脆弱性例

1. 🧨 任意のコードを含むファイルのアップロード(Remote Code Execution)

  • PHP、ASP、JSPなどの サーバーサイドスクリプト をアップロードし、 サーバー側でそのコードを実行 させることで、 サーバーを完全に制御されてしまう。

📚 例:

<?php system($_GET['cmd']); ?>

↑このようなコードを含む .php ファイルをアップロード → /uploads/shell.php?cmd=ls で実行。


2. 📁 拡張子フィルターの回避

  • .php などがブロックされていても、 二重拡張子(image.jpg.phpマジックバイト偽装 でバイパスされることがある。

3. 🔥 ファイルの自動処理を狙う攻撃(即時実行型)

  • サーバー側で アップロードされたファイルを即時に処理 する場合、 アップロード「しただけ」で攻撃が成立する場合もある。

4. 🖼️ 画像ファイルに悪意あるコードを埋め込む

  • .jpg.png のような 安全に見えるファイル形式スクリプトやマルウェア を埋め込むことが可能。 一部の画像処理ライブラリで 脆弱性が存在 することもある。

5. 🌐 アップロード後にファイルへ直接アクセス可能

  • 攻撃者がファイルをアップロードし、 URL経由でそのファイルにアクセス(実行)できる 場合、 任意のコード実行や情報漏洩が可能になる。

🧠 攻撃の流れ(典型的なシナリオ)

  1. 攻撃者が .php.jsp などの スクリプトファイルをアップロード
  2. アップロードされたファイルの 保存先URLに直接アクセス
  3. サーバーがファイルを コードとして実行
  4. 攻撃者が コマンド実行・ファイル閲覧・シェル設置 などを実施

🛑 ファイルアップロードの防御策

1. 🛡️ 拡張子フィルターの強化

.jpg, .png, .pdf などの ホワイトリスト形式 で許可 ✅ 二重拡張子や無効な拡張子のチェック を導入


2. 🧪 Content-Type やマジックバイトの確認

✅ MIMEタイプのチェックだけでなく、 ✅ ファイルの先頭バイト(マジックナンバー) を検査することで、偽装を防ぐ。


3. 🧷 ファイル名の書き換え(ランダム化)

✅ ユーザーが指定したファイル名をそのまま使わず、 ✅ サーバー側でランダムなファイル名 に変更することで予測を困難に。


4. 🔒 実行権限のないディレクトリに保存

✅ アップロードファイルは Webサーバーから実行されない場所 に保存する。 ✅ 例:/uploads/files/ ディレクトリを .htaccess で実行不可にする。


5. 🔐 ファイルスキャンの導入

✅ アップロード時に アンチウイルス・マルウェアスキャン を実行し、 ✅ 悪意あるファイルをブロック。


🎯 まとめ:ファイルアップロード脆弱性の本質

たった1つのアップロード機能の不備 で、 サーバー全体が乗っ取られる 可能性がある。 ✅ ファイルの種類・サイズ・中身・拡張子・保存先のすべてを厳密に検証する必要あり。 ✅ 実行不可ディレクトリ + 拡張子制限 + スキャン の三重対策が基本。

「画像アップロードが、攻撃の入り口になる!」 ファイルアップロード機能には、常に 最大限の警戒 を払いましょう。

Best regards, (^^ゞ