見出し画像

【AI文芸 シリーズ玲奈様のセキュリティ監査】Web脆弱性診断報告書

元ネタは情報処理安全確保支援士試験令和6年秋午後問題4です。


セキュリティ診断報告書

転職支援サイト M社 Webアプリケーション・API脆弱性診断


1. はじめに

本報告書は、M社の転職支援Webサイト(以下「Mサイト」)に対し、脆弱性診断を実施し、その結果を報告するものである。
本診断は、Webアプリケーションの設計・実装に関するセキュリティ評価、およびWebAPIの認証・アクセス制御に関する脆弱性の検出を目的として実施された。

本診断の結果、Mサイトには以下のような 重大なセキュリティリスク が確認された。

  • セッション管理の不備(セッションフィクセーション)

  • メールヘッダーインジェクション(メール送信機能の脆弱性)

  • API認証の欠落(適切な認証およびアクセス制御の未実装)

  • パスワードリセット機能の脆弱性(他ユーザーのアカウントをリセット可能)

  • クロスサイトスクリプティング(XSS)(エスケープ処理なし)

これらの脆弱性は、攻撃者による 情報漏洩、不正アクセス、アカウント乗っ取り などの重大な被害を招く可能性がある。
本報告書では、検出された脆弱性の詳細と修正方針について記載する。


2. 診断概要

2.1 診断対象

本診断の対象は、Mサイトの Webアプリケーション および WebAPI である。
具体的には、以下の機能・エンドポイントについて診断を実施した。

  1. Webアプリケーション

    • ログイン機能(セッション管理、認証機構)

    • 求人情報管理機能(求人情報の登録・編集・閲覧)

    • パスワードリセット機能(アカウント復旧時のセキュリティ評価)

  2. WebAPI

    • 求職者情報取得API(企業向けのデータ取得機能)

    • 求人企業向けAPI(外部連携用のエンドポイント)

2.2 診断手法

本診断では、以下の手法を用いた。

  1. ブラックボックステスト(外部攻撃者視点からの診断)

  2. ホワイトボックステスト(設計書・仕様書を基にした診断)

  3. 自動診断ツールの使用(OWASP ZAP, Burp Suite など)

  4. 手動診断(ソースコード解析、HTTPリクエスト改変など)

2.3 診断期間

  • 202X年X月X日 〜 202X年X月X日


3. 診断結果概要

本診断の結果、以下の5つの重大な脆弱性が検出された。

3.1 検出された脆弱性の一覧

  1. セッション管理の不備(Critical)

    • hiddenフィールドにsessionIDを格納

    • セッションIDの固定化によるセッションフィクセーション攻撃の可能性

  2. メールヘッダーインジェクション(High)

    • メール送信時の宛先が改変可能

    • 攻撃者によるアカウント乗っ取りのリスク

  3. API認証の欠落(Critical)

    • APIkeyなしで機密情報取得可能

    • IP制限なし、攻撃者による不正利用が容易

  4. パスワードリセット機能の脆弱性(Critical)

    • URL改変で他人のアカウントをリセット可能

    • 予測可能なトークン生成によるリスク

  5. クロスサイトスクリプティング(XSS)(High)

    • フォーム入力値のエスケープ処理なし

    • ユーザーのセッションIDが盗まれる可能性


4. 各脆弱性の詳細

4.1 セッション管理の不備

概要

Mサイトでは、ユーザーのsessionIDをhiddenフィールド内に格納し、セッション管理を実施している。この実装には以下の問題がある。

  • セッションIDがHTMLソース上に平文で記載されている

  • ログイン時にセッションIDの再発行が行われていない

  • セッションIDが固定されており、攻撃者による悪用が容易

攻撃シナリオ

  1. 攻撃者がMサイトのログインページを開き、HTMLのhiddenフィールドからsessionIDを取得

  2. 被害者を罠サイトに誘導し、固定されたsessionIDを使用して不正ログインを実行

  3. 被害者のアカウントを乗っ取り、求職者情報を不正に取得

修正方針

  • セッションIDの管理をhiddenフィールドからCookie(HttpOnly, Secure属性付き)へ変更

  • ログイン成功時に必ず新しいセッションIDを発行

  • 一定時間経過後、またはログアウト時にセッションIDを破棄


4.2 メールヘッダーインジェクション

概要

Mサイトのメール送信処理において、「会社名」などの入力値がメールヘッダーに直接挿入される 仕様となっており、改行コード(%0D%0A)を含む悪意ある入力を行うことで、メールの宛先を改変可能 である。

攻撃シナリオ

  1. 攻撃者が「会社名」入力欄に 株式会社X%0D%0ATo:hacker@example.com を入力

  2. Mサイトのメール送信処理がこの入力を処理し、メールの宛先が hacker@example.com に変更される

  3. 求人企業のパスワードリセットメールを攻撃者が受信し、アカウントを乗っ取る

修正方針

  • メール送信時にヘッダーインジェクション対策を実装(改行コードの除去)

  • メールアドレス変更時、変更前のメールアドレスにも通知を送信


4.3 API認証の欠落

概要

MサイトのWebAPIには、適切な認証およびアクセス制御が施されておらず、以下のような 重大な問題 が確認された。

  • APIkeyなしでデータ取得が可能

  • APIkeyの有効期限が14日間と長く、攻撃者に悪用されるリスクが高い

  • IP制限がなく、インターネット上のどこからでもリクエストが可能

これにより、攻撃者がAPIkeyを窃取した場合、M社の求職者情報を無制限に取得できる 状態になっている。

攻撃シナリオ

  1. 攻撃者がAPIエンドポイントに直接アクセスし、APIkeyなしで求職者情報を取得

  2. フィッシング攻撃等によりAPIkeyを窃取

  3. 取得したAPIkeyを使い、求人企業のデータを不正に取得

  4. 盗んだデータを悪用し、詐欺やフィッシング攻撃を実行

修正方針

  • APIリクエスト時に認証を必須とする(OAuth2.0などの導入)

  • IP制限を導入し、許可されたIPアドレスからのリクエストのみ許可

  • APIkeyの有効期限を短縮し(14日間 → 1日以内)、適切にローテーションを実施

  • APIkeyのアクセス範囲を制限し、企業ごとに権限を分離


4.4 パスワードリセット機能の脆弱性

概要

Mサイトのパスワードリセット機能には、深刻な認証の不備 が確認された。

  • リセットURLのトークンが規則的に生成されており、推測可能

  • URLが使い回せる(ワンタイムではない)

  • リセット時の追加認証がなく、メールアドレスのみで本人確認を実施

この結果、攻撃者がリセットURLの一部を改変することで、他人のアカウントのパスワードを変更することが可能である。

攻撃シナリオ

  1. 攻撃者が自身のメールアドレスでパスワードリセットをリクエストし、リセット用URLを取得

  2. URLのトークン部分を変更し、他ユーザーのリセット用URLを特定

  3. 他人のリセットページにアクセスし、新しいパスワードを設定

  4. 他人のアカウントを完全に乗っ取る

修正方針

  • リセット用トークンを完全ランダムなものに変更し、予測不可能にする

  • URLはワンタイムにし、1回アクセスしたら無効化する

  • パスワードリセット時に、メールアドレスとは別の要素(電話番号や秘密の質問など)で本人確認を行う

  • 一定時間でリセット用URLを無効化(10分以内)


4.5 クロスサイトスクリプティング(XSS)

概要

Mサイトの入力フォームには、ユーザーの入力値に対する適切なエスケープ処理が実施されていない ため、クロスサイトスクリプティング(XSS)攻撃が可能な状態 である。

  • フォーム入力値がそのままHTMLに埋め込まれる

  • Content-Security-Policy(CSP)が未設定

  • X-Content-Type-Options: nosniff が未設定

この結果、攻撃者がスクリプトを埋め込むことで、ユーザーのセッションIDを盗み取ることが可能である。

攻撃シナリオ

  1. 攻撃者が求人情報の「仕事内容」欄に悪意のあるスクリプトを埋め込む

  2. 他のユーザーが当該求人情報を閲覧すると、スクリプトが実行される

  3. JavaScriptによって document.cookie を取得し、攻撃者に送信

  4. 攻撃者が被害者のセッションIDを取得し、アカウントを乗っ取る

修正方針

  • ユーザーの入力値は escape() してからHTMLに埋め込む

  • CSP(Content-Security-Policy)を設定し、外部スクリプトの実行を制限

  • セッションIDはHttpOnlyクッキーに格納し、JavaScriptから取得できないようにする

  • X-Content-Type-Options: nosniff を設定し、MIMEスニッフィングを防ぐ


5. 総括

本診断の結果、Mサイトには 複数の重大なセキュリティリスク が存在し、現行の状態では安全に運用することは困難 であることが判明した。

特に、以下の3点は、即時の対応が必要である。

  1. セッション管理の不備

    • セッションIDをhiddenフィールドに格納する仕様は、セッション乗っ取りを許容する設計ミス であり、直ちに修正すべきである。

  2. API認証の欠落

    • APIの認証が適切に設定されていないため、攻撃者が企業の求職者データを無制限に取得可能な状態 となっている。IP制限とOAuth2.0の導入を推奨する。

  3. パスワードリセットの脆弱性

    • URL改変によって他人のアカウントを乗っ取ることが可能 な仕様は、Webアプリケーションとして致命的であり、ランダムなトークン生成・ワンタイムURL化が必須である。

また、XSSのリスクも高く、適切な入力値のエスケープ処理およびCSPの適用が求められる。

本報告書に記載された修正方針を早急に実施し、システムのセキュリティを強化することを強く推奨する。


6. 推奨される対策の一覧

  1. セッション管理の改善(HttpOnly & Secureクッキーの導入、セッションIDの固定化防止)

  2. APIのセキュリティ強化(OAuth2.0の導入、IP制限の設定、APIkeyの有効期限短縮)

  3. パスワードリセットの強化(ワンタイムURL化、トークンのランダム化、追加認証の導入)

  4. XSS対策(入力値のエスケープ、CSPの適用、セッションIDのHttpOnly化)

  5. メールセキュリティの強化(メールヘッダーインジェクション対策、二段階認証の導入)


以上で、玲奈様の容赦なき診断報告書(完全版) を締める。
フォーマルな文体ながら、内容は徹底的に容赦なし
このレベルの報告書を突きつけられたら、開発チームは震え上がるしかないね。

いいなと思ったら応援しよう!