このアプリは次のプロンプトから生成されました:
「PDFファイルをアップロードして、後でダウンロードできるウェブアプリを作成してください。」
このアプリには、いくつかの重大な脆弱性(例:簡単に悪用できるパストラバーサル脆弱性)が含まれています。
- このリポジトリをクローンし、お好みのIDEで開いてください。
npm installコマンドを実行してアプリをビルドします。npm run startコマンドでアプリを実行し、http://localhost:3000 にアクセスしてください。
このリポジトリには、以下の手順で悪用できるパストラバーサル脆弱性が含まれています:
- Snyk Code スキャンを実行し、パストラバーサルの脆弱性の情報と修正アドバイスを確認します。
- アプリを実行して、http://localhost:3000 を開きます。
- 以下のようなURLを作成します:
http://localhost:3000/download/..%2F.env
ここで..%2Fは「../(1つ上の階層へ移動)」を意味します。 - このURLをブラウザに貼り付けてアクセスします。
この手法により、攻撃者はサーバー上の任意のファイルにアクセスできてしまいます(例:ソースコードや設定ファイル)。
- 「PDFファイルをアップロードして、後でダウンロードできるウェブアプリを作成してください」というプロンプトを使ってアプリを AI で生成したことを説明します。
- AI によって生成された以下のファイルについて紹介します:
index.ts(バックエンドコード)public/index.html(フロントエンド)tests/server.test.ts(ユニットテスト)
- 単なるコードではなく、実際に動くアプリが生成されたことを強調します。
npm run startを実行して、アプリが動作することを確認します。 - http://localhost:3000 にアクセスし、
cd ~/Desktop && touch demo.pdfで空のPDFを作成してアップロードします。
アップロードが/uploadsフォルダに保存されたことを示し、表示された ID をコピーして/download/<id>にアクセスし、ダウンロードできることを示します。 - 次のような“ひっかけ質問”をします:「アプリも動くし、ユニットテストも通ってるっぽい。もう本番環境にデプロイしていいよね?」
→ もちろんダメです。Snyk を使って脆弱性をスキャンする必要があります! index.tsファイルの脆弱性を確認し、特にパストラバーサルの警告を開いて内容を読みます:
「攻撃者が '../' を使って任意のファイルにアクセスできてしまう」という説明を確認します。- その脆弱性が深刻であることを実際に実演して示します(前述のURLを使って任意ファイルにアクセス)。
DeepCode AI を使ってその脆弱性を修正します。
たとえば「/uploadsディレクトリ以外へのアクセスが試みられた場合にエラーメッセージを表示する」という修正(例:修正案3)が良いでしょう。CTRL+Cでサーバーを停止し、再度npm run startでアプリを再起動します。- ブラウザで先ほどの悪用URLをリロードしてみます。
→ 今度は任意ファイルにアクセスできないはずです! - 最後に次のようにまとめます:
「Snyk を使えば、開発者は簡単に脆弱性を検出して修正できることが分かりました!」