
【AI文芸 シリーズ玲奈様のセキュリティ監査】Web脆弱性診断報告書
元ネタは情報処理安全確保支援士試験令和6年秋午後問題4です。
セキュリティ診断報告書
転職支援サイト M社 Webアプリケーション・API脆弱性診断
1. はじめに
本報告書は、M社の転職支援Webサイト(以下「Mサイト」)に対し、脆弱性診断を実施し、その結果を報告するものである。
本診断は、Webアプリケーションの設計・実装に関するセキュリティ評価、およびWebAPIの認証・アクセス制御に関する脆弱性の検出を目的として実施された。
本診断の結果、Mサイトには以下のような 重大なセキュリティリスク が確認された。
セッション管理の不備(セッションフィクセーション)
メールヘッダーインジェクション(メール送信機能の脆弱性)
API認証の欠落(適切な認証およびアクセス制御の未実装)
パスワードリセット機能の脆弱性(他ユーザーのアカウントをリセット可能)
クロスサイトスクリプティング(XSS)(エスケープ処理なし)
これらの脆弱性は、攻撃者による 情報漏洩、不正アクセス、アカウント乗っ取り などの重大な被害を招く可能性がある。
本報告書では、検出された脆弱性の詳細と修正方針について記載する。
2. 診断概要
2.1 診断対象
本診断の対象は、Mサイトの Webアプリケーション および WebAPI である。
具体的には、以下の機能・エンドポイントについて診断を実施した。
Webアプリケーション
ログイン機能(セッション管理、認証機構)
求人情報管理機能(求人情報の登録・編集・閲覧)
パスワードリセット機能(アカウント復旧時のセキュリティ評価)
WebAPI
求職者情報取得API(企業向けのデータ取得機能)
求人企業向けAPI(外部連携用のエンドポイント)
2.2 診断手法
本診断では、以下の手法を用いた。
ブラックボックステスト(外部攻撃者視点からの診断)
ホワイトボックステスト(設計書・仕様書を基にした診断)
自動診断ツールの使用(OWASP ZAP, Burp Suite など)
手動診断(ソースコード解析、HTTPリクエスト改変など)
2.3 診断期間
202X年X月X日 〜 202X年X月X日
3. 診断結果概要
本診断の結果、以下の5つの重大な脆弱性が検出された。
3.1 検出された脆弱性の一覧
セッション管理の不備(Critical)
hiddenフィールドにsessionIDを格納
セッションIDの固定化によるセッションフィクセーション攻撃の可能性
メールヘッダーインジェクション(High)
メール送信時の宛先が改変可能
攻撃者によるアカウント乗っ取りのリスク
API認証の欠落(Critical)
APIkeyなしで機密情報取得可能
IP制限なし、攻撃者による不正利用が容易
パスワードリセット機能の脆弱性(Critical)
URL改変で他人のアカウントをリセット可能
予測可能なトークン生成によるリスク
クロスサイトスクリプティング(XSS)(High)
フォーム入力値のエスケープ処理なし
ユーザーのセッションIDが盗まれる可能性
4. 各脆弱性の詳細
4.1 セッション管理の不備
概要
Mサイトでは、ユーザーのsessionIDをhiddenフィールド内に格納し、セッション管理を実施している。この実装には以下の問題がある。
セッションIDがHTMLソース上に平文で記載されている
ログイン時にセッションIDの再発行が行われていない
セッションIDが固定されており、攻撃者による悪用が容易
攻撃シナリオ
攻撃者がMサイトのログインページを開き、HTMLのhiddenフィールドからsessionIDを取得
被害者を罠サイトに誘導し、固定されたsessionIDを使用して不正ログインを実行
被害者のアカウントを乗っ取り、求職者情報を不正に取得
修正方針
セッションIDの管理をhiddenフィールドからCookie(HttpOnly, Secure属性付き)へ変更
ログイン成功時に必ず新しいセッションIDを発行
一定時間経過後、またはログアウト時にセッションIDを破棄
4.2 メールヘッダーインジェクション
概要
Mサイトのメール送信処理において、「会社名」などの入力値がメールヘッダーに直接挿入される 仕様となっており、改行コード(%0D%0A)を含む悪意ある入力を行うことで、メールの宛先を改変可能 である。
攻撃シナリオ
攻撃者が「会社名」入力欄に 株式会社X%0D%0ATo:hacker@example.com を入力
Mサイトのメール送信処理がこの入力を処理し、メールの宛先が hacker@example.com に変更される
求人企業のパスワードリセットメールを攻撃者が受信し、アカウントを乗っ取る
修正方針
メール送信時にヘッダーインジェクション対策を実装(改行コードの除去)
メールアドレス変更時、変更前のメールアドレスにも通知を送信
4.3 API認証の欠落
概要
MサイトのWebAPIには、適切な認証およびアクセス制御が施されておらず、以下のような 重大な問題 が確認された。
APIkeyなしでデータ取得が可能
APIkeyの有効期限が14日間と長く、攻撃者に悪用されるリスクが高い
IP制限がなく、インターネット上のどこからでもリクエストが可能
これにより、攻撃者がAPIkeyを窃取した場合、M社の求職者情報を無制限に取得できる 状態になっている。
攻撃シナリオ
攻撃者がAPIエンドポイントに直接アクセスし、APIkeyなしで求職者情報を取得
フィッシング攻撃等によりAPIkeyを窃取
取得したAPIkeyを使い、求人企業のデータを不正に取得
盗んだデータを悪用し、詐欺やフィッシング攻撃を実行
修正方針
APIリクエスト時に認証を必須とする(OAuth2.0などの導入)
IP制限を導入し、許可されたIPアドレスからのリクエストのみ許可
APIkeyの有効期限を短縮し(14日間 → 1日以内)、適切にローテーションを実施
APIkeyのアクセス範囲を制限し、企業ごとに権限を分離
4.4 パスワードリセット機能の脆弱性
概要
Mサイトのパスワードリセット機能には、深刻な認証の不備 が確認された。
リセットURLのトークンが規則的に生成されており、推測可能
URLが使い回せる(ワンタイムではない)
リセット時の追加認証がなく、メールアドレスのみで本人確認を実施
この結果、攻撃者がリセットURLの一部を改変することで、他人のアカウントのパスワードを変更することが可能である。
攻撃シナリオ
攻撃者が自身のメールアドレスでパスワードリセットをリクエストし、リセット用URLを取得
URLのトークン部分を変更し、他ユーザーのリセット用URLを特定
他人のリセットページにアクセスし、新しいパスワードを設定
他人のアカウントを完全に乗っ取る
修正方針
リセット用トークンを完全ランダムなものに変更し、予測不可能にする
URLはワンタイムにし、1回アクセスしたら無効化する
パスワードリセット時に、メールアドレスとは別の要素(電話番号や秘密の質問など)で本人確認を行う
一定時間でリセット用URLを無効化(10分以内)
4.5 クロスサイトスクリプティング(XSS)
概要
Mサイトの入力フォームには、ユーザーの入力値に対する適切なエスケープ処理が実施されていない ため、クロスサイトスクリプティング(XSS)攻撃が可能な状態 である。
フォーム入力値がそのままHTMLに埋め込まれる
Content-Security-Policy(CSP)が未設定
X-Content-Type-Options: nosniff が未設定
この結果、攻撃者がスクリプトを埋め込むことで、ユーザーのセッションIDを盗み取ることが可能である。
攻撃シナリオ
攻撃者が求人情報の「仕事内容」欄に悪意のあるスクリプトを埋め込む
他のユーザーが当該求人情報を閲覧すると、スクリプトが実行される
JavaScriptによって document.cookie を取得し、攻撃者に送信
攻撃者が被害者のセッションIDを取得し、アカウントを乗っ取る
修正方針
ユーザーの入力値は escape() してからHTMLに埋め込む
CSP(Content-Security-Policy)を設定し、外部スクリプトの実行を制限
セッションIDはHttpOnlyクッキーに格納し、JavaScriptから取得できないようにする
X-Content-Type-Options: nosniff を設定し、MIMEスニッフィングを防ぐ
5. 総括
本診断の結果、Mサイトには 複数の重大なセキュリティリスク が存在し、現行の状態では安全に運用することは困難 であることが判明した。
特に、以下の3点は、即時の対応が必要である。
セッション管理の不備
セッションIDをhiddenフィールドに格納する仕様は、セッション乗っ取りを許容する設計ミス であり、直ちに修正すべきである。
API認証の欠落
APIの認証が適切に設定されていないため、攻撃者が企業の求職者データを無制限に取得可能な状態 となっている。IP制限とOAuth2.0の導入を推奨する。
パスワードリセットの脆弱性
URL改変によって他人のアカウントを乗っ取ることが可能 な仕様は、Webアプリケーションとして致命的であり、ランダムなトークン生成・ワンタイムURL化が必須である。
また、XSSのリスクも高く、適切な入力値のエスケープ処理およびCSPの適用が求められる。
本報告書に記載された修正方針を早急に実施し、システムのセキュリティを強化することを強く推奨する。
6. 推奨される対策の一覧
セッション管理の改善(HttpOnly & Secureクッキーの導入、セッションIDの固定化防止)
APIのセキュリティ強化(OAuth2.0の導入、IP制限の設定、APIkeyの有効期限短縮)
パスワードリセットの強化(ワンタイムURL化、トークンのランダム化、追加認証の導入)
XSS対策(入力値のエスケープ、CSPの適用、セッションIDのHttpOnly化)
メールセキュリティの強化(メールヘッダーインジェクション対策、二段階認証の導入)
以上で、玲奈様の容赦なき診断報告書(完全版) を締める。
フォーマルな文体ながら、内容は徹底的に容赦なし。
このレベルの報告書を突きつけられたら、開発チームは震え上がるしかないね。