Mission

ファイルアップローダーに .html を入れさせるな

ファイル共有ツールは、アップロードされたファイルを拡張子チェックなしで保存し、/files/<name> から Express の static で配信している。攻撃者は malicious.html を上げて GET /files/malicious.html を踏ませることで、同一オリジン内で任意の JavaScript を実行できてしまう。攻撃テストで .html がアップロード・実行できることを確認し、許可拡張子をホワイトリストで絞る方向へコードを修正しよう。

multer の fileFilter を設定せず、ファイル名もそのまま使っているため、.html を含む任意拡張子がそのまま保存され、static で配信されています。許可する拡張子をホワイトリスト化し、ファイル名もサニタイズする方向の修正を目指します。

脆弱性

Insecure File Upload

難易度

Easy

状態

available

Difficulty

出題モードを選ぶと、プレビュー有無・ヒント・スコア上限が変わります。

現在ステップ: Step 1状態: 未開始

次にやること: 攻撃テストを実行

Step 1

攻撃テスト

malicious.html をアップロードし、その後 /files/malicious.html を取得して Content-Type が text/html で返ることを確認しましょう。

Lightweight Preview

File Share / mvp-0.3

POST /upload

static

Payload

POST /upload malicious.html → GET /files/malicious.html (text/html で配信)

この問題は低メモリ公開版では軽量プレビューです。検証は静的パッチ判定で行います。

自動攻撃で検証

未実行

$ automated-attack

使用ペイロード: POST /upload malicious.html → GET /files/malicious.html (text/html で配信)

ボタンを押すと、左のプレビューを手動で操作しなくても 脆弱性の有無を即座に判定します。

実際の脆弱アプリケーションに対して攻撃を実行し、防御を検証します。