人材関連SaaS A社 御中(架空)
Webアプリケーション・API
セキュリティ診断報告書
採用管理・候補者管理サービス(ステージング環境)
株式会社OUTLIER
AIセキュリティ診断チーム
文書情報
改訂履歴
| 版数 | 発行日 | 内容 |
|---|---|---|
| 0.9 | 2026年9月26日 | 速報版。CRITICAL 1件(F-001)を先行報告 |
| 1.0 | 2026年10月6日 | 確定版。全検出事項と推奨対応計画を記載 |
配布先
A社 CTO、セキュリティ責任者、開発部門責任者(本書の再配布はA社内に限ります)
目次
1. エグゼクティブサマリー
1.1 総合評価
1.2 結論
通常の採用担当者アカウントでログインした状態から、別の導入企業が管理する候補者情報を参照できる経路を確認しました(F-001)。悪用された場合、A社を利用するすべての導入企業の候補者情報(氏名・連絡先・職歴・履歴書・選考評価)が流出する可能性があります。
加えて、同じ「テナント間の分離」に関わる不備が履歴書ファイルの配信(F-002)とCSV出力(F-003)でも確認されており、個別の実装ミスではなく、認可処理の設計方針に起因する問題と判断しています。
1.3 検出件数
1.4 経営判断をお願いしたい事項
-
01
F-001の即日暫定対応の承認:該当APIへのアクセス制限により、一部画面の表示が数時間遅延する可能性があります。
-
02
本番環境の過去ログ調査の実施:本番環境でも同じ実装であるため、過去に悪用された形跡がないかの確認を推奨します。
-
03
導入企業への説明方針の準備:ログ調査で不審なアクセスが確認された場合に備え、報告・通知の手順を事前に整理してください。
2. 診断概要
2.1 診断対象
| 対象 | URL・範囲 | 規模 |
|---|---|---|
| 採用担当者向けWeb画面 | https://app.example-a.test/ | 約120画面 |
| Web API | https://api.example-a.test/v1/ | 86エンドポイント |
| ファイル配信 | 履歴書・添付ファイルのアップロード/ダウンロード | 4機能 |
| 管理者機能 | テナント設定・権限管理・CSV出力 | 18画面 |
2.2 診断条件
- 診断期間
- 2026年9月14日〜9月25日(実働8日間)
- 診断環境
- A社より許諾を受けたステージング環境(本番と同一のアプリケーションバージョン)
- 使用アカウント
- テナントA:管理者1・一般2/テナントB:一般1(いずれもA社より貸与された検証用)
- 診断手法
- AIによるソースコード・通信の網羅的解析と、診断員による手動での再現確認
- 対象外
- 本番環境、外部決済サービス、OS・ミドルウェア層、サービス妨害(DoS)にあたる検査
2.3 診断の進め方
-
STEP 1
AIが全画面・全APIの通信とソースコードを解析し、疑わしい箇所を抽出
-
STEP 2
診断員が1件ずつ再現を試み、誤検知を除外
-
STEP 3
影響範囲と悪用の容易さから深刻度を判定
-
STEP 4
修正方針と優先順位をまとめ、本書として報告
2.4 深刻度の定義
深刻度は、CVSS v3.1の基本値を参考に、取り扱う情報の機微性・影響を受ける件数・悪用の容易さを加味して当社基準で判定しています。
| 深刻度 | 定義 | 対応期限の目安 |
|---|---|---|
| CRITICAL | 特別な条件なしに、多数の利用者の個人情報や重要データが流出・改ざんされる | 即日〜72時間 |
| HIGH | 一定の条件下で、個人情報や重要データが流出・改ざんされる | 2週間以内 |
| MEDIUM | 他の弱点と組み合わさることで被害につながる | 30日以内 |
| LOW | 直接の被害は小さいが、攻撃の足がかりとなる情報を与える | 次回改修時 |
2.5 診断項目別の結果
| 診断項目 | 主な確認内容 | 結果 |
|---|---|---|
| 認可(アクセス制御) | テナント間・権限間でデータを越境して参照・操作できないか | 検出あり(F-001〜003) |
| 認証 | ログイン試行制限、パスワードリセット、アカウント列挙 | 検出あり(F-005, 007, 011) |
| セッション管理 | Cookie属性、有効期限、ログアウト時の無効化 | 検出あり(F-009, 012) |
| 入力値の取り扱い | クロスサイトスクリプティング、SQLインジェクション等 | 検出あり(F-006) |
| 個人情報の取り扱い | ログ・CSV・ファイルへの出力と保存 | 検出あり(F-004) |
| 設定・情報露出 | HTTPヘッダー、エラーメッセージ、不要な公開API | 検出あり(F-008, 010, 013) |
| 業務ロジック | 選考ステータスの不正な変更、金額・件数の改ざん | 問題なし |
| ファイルアップロード | 不正なファイル形式・サイズの受け入れ | 問題なし |
3. 検出事項一覧
合計13件の検出事項を確認しました。状態はすべて本書発行時点のものです。
| ID | 深刻度 | 検出事項 | 該当箇所 | CVSS | 状態 |
|---|---|---|---|---|---|
| F-001 | CRITICAL | テナント境界を越えて候補者情報を参照できる | 候補者詳細取得API | 7.7 | 暫定対応済 |
| F-002 | HIGH | 履歴書ファイルのURLを別ユーザーが再利用できる | ファイル配信 | 6.5 | 未対応 |
| F-003 | HIGH | CSV出力でテナントの絞り込みが適用されない経路がある | 管理者機能 | 6.8 | 未対応 |
| F-004 | MEDIUM | APIログに個人情報がそのまま記録されている | APIサーバー | 4.4 | 未対応 |
| F-005 | MEDIUM | ログイン試行回数の制限がない | ログイン画面 | 5.3 | 未対応 |
| F-006 | MEDIUM | 候補者メモ欄に入力したスクリプトが実行される | 候補者詳細画面 | 5.4 | 未対応 |
| F-007 | MEDIUM | パスワード再設定URLの有効期限が長い(72時間) | パスワード再設定 | 5.3 | 未対応 |
| F-008 | LOW | セキュリティ関連のHTTPヘッダーが設定されていない | 全画面 | 3.1 | 未対応 |
| F-009 | LOW | セッションCookieにSameSite属性が指定されていない | 全画面 | 3.1 | 未対応 |
| F-010 | LOW | エラー画面にフレームワークのバージョンが表示される | エラー画面 | 3.7 | 未対応 |
| F-011 | LOW | ログイン時の応答で、アカウントの存在有無が分かる | ログイン画面 | 3.7 | 未対応 |
| F-012 | LOW | ログイン状態が14日間維持される | セッション管理 | 3.1 | 未対応 |
| F-013 | LOW | 利用されていない旧バージョンのAPIが公開されたまま | Web API(v0) | 3.7 | 未対応 |
※ F-001は速報版の報告を受け、2026年9月26日にA社にてアクセス制限による暫定対応が実施されています。
4. 検出事項の詳細
テナント境界を越えて、候補者情報を参照できる
CRITICAL- 分類
- 認可制御の不備(IDOR / BOLA)/CWE-639
- 該当箇所
- GET /v1/candidates/{candidate_id}
- CVSS v3.1
- 7.7(AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:N/A:N)
- 必要な権限
- 任意の導入企業の一般アカウント(管理者権限は不要)
- 検出方法
- AI解析で検出 → 診断員が手動で再現を確認
概要
候補者詳細を取得するAPIは、リクエストで指定された候補者IDのみを条件にデータを検索しており、ログイン中ユーザーの所属テナントと、候補者の所属テナントが一致するかを確認していません。そのため、候補者IDを書き換えるだけで、他の導入企業が管理する候補者の情報を取得できます。
再現手順
- テナントAの一般ユーザーとしてログインする
- 自社の候補者詳細画面を開き、APIへのリクエストを確認する
- リクエスト中の候補者IDを、テナントBに属する候補者のIDに置き換えて送信する
- エラーにならず、テナントBの候補者情報が返却される
証跡
REQUEST
GET /v1/candidates/cnd_8f3a****(テナントBの候補者ID) HTTP/1.1 Host: api.example-a.test Authorization: Bearer ********(テナントA 一般ユーザー)
RESPONSE(本来は 404 が返るべき)
HTTP/1.1 200 OK
{
"candidate_id": "cnd_8f3a****",
"tenant_id": "tnt_b0b2****",
"name": "架空 太郎",
"email": "candidate@example.test",
"phone": "000-0000-0000",
"resume_file": "resume_sample.pdf",
"evaluation": "二次面接通過 / 評価コメントあり"
}
※ 証跡は一部をマスクしています。表示している個人情報はすべて架空のものです。
F-001 テナント境界を越えて、候補者情報を参照できる(続き)
想定される影響
| 影響を受ける対象 | 内容 |
|---|---|
| 候補者 | 氏名・連絡先に加え、職歴や選考評価といった知られたくない情報が第三者に渡る。なりすましや詐欺に悪用される恐れ |
| 導入企業 | 自社の候補者や選考状況が、競合を含む他社から参照できる状態にあった。契約の見直し・解約につながる恐れ |
| A社 | 個人情報保護委員会への報告・本人への通知が必要になる可能性。原因調査の間、サービス停止や機能制限を迫られる恐れ |
原因
データの取得処理が「候補者ID」だけを条件にしており、「誰の、どのテナントのデータか」の確認が各APIの実装者に委ねられています。同じ書き方のAPIが他にも存在する可能性が高く、F-002・F-003も同じ原因から発生しています。
推奨対策
暫定対策(即日)
該当APIへのアクセスを制限し、本番環境のアクセスログを保全する。
恒久対策(72時間以内)
ログイン情報から得たテナントIDを、データ取得の必須条件にする。
修正前
candidate = Candidate.find(params[:candidate_id])
修正後(他テナントのIDが指定された場合は 404 を返す)
candidate = current_user.tenant.candidates.find(params[:candidate_id])
あわせて、テナントの確認を各APIで個別に書くのではなく共通の仕組み(ミドルウェア等)に集約し、「他テナントのIDを指定すると拒否される」ことを確認する自動テストを追加してください。
参考情報
- OWASP API Security Top 10 2023:API1 Broken Object Level Authorization
- CWE-639:Authorization Bypass Through User-Controlled Key
履歴書ファイルのURLを、別のユーザーが再利用できる
HIGH- 分類
- アクセス制御の不備/CWE-284
- 該当箇所
- GET /files/resumes/{file_key}
- CVSS v3.1
- 6.5(AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N)
概要
履歴書のダウンロードURLは発行から7日間有効で、ダウンロード時にログイン中ユーザーの権限を確認していません。URLが社内チャットやメールで転送された場合、権限のない人でも履歴書を取得できます。
推奨対策
URLの有効期限を5分程度に短縮し、ダウンロードのたびに閲覧権限を再確認してください。
CSV出力で、テナントの絞り込みが適用されない経路がある
HIGH- 分類
- 認可制御の不備/CWE-639
- 該当箇所
- POST /v1/admin/exports/candidates
- CVSS v3.1
- 6.8(AV:N/AC:L/PR:H/UI:N/S:C/C:H/I:N/A:N)
概要
管理者向けの候補者CSV出力で、絞り込み条件を「全件」にした場合のみテナントIDの条件が外れ、他の導入企業の候補者を含むCSVが出力されます。管理者権限が必要なため深刻度はHIGHとしていますが、1回の操作で流出する件数が最も多い経路です。
推奨対策
画面からの絞り込み条件にかかわらず、ログイン情報から得たテナントIDを出力条件に必ず付与してください。
APIログに、個人情報がそのまま記録されている
MEDIUM- 分類
- ログへの機微情報の記録/CWE-532
- 該当箇所
- APIサーバーのアクセスログ・エラーログ
- CVSS v3.1
- 4.4(AV:N/AC:H/PR:H/UI:N/S:U/C:H/I:N/A:N)
概要
候補者の登録・更新APIのリクエスト内容が、氏名・メールアドレス・電話番号を含んだままログに出力されています。ログは開発者全員が閲覧でき、保持期間の定めもありません。
推奨対策
個人情報の項目をマスクしてから出力し、ログの保持期間と閲覧できる担当者を定めてください。
F-005〜F-013 について
MEDIUM 3件・LOW 6件の詳細は、F-001〜F-004と同じ書式(概要・再現手順・証跡・推奨対策)で記載しています。本サンプルでは掲載を省略しています。
5. 推奨対応計画
深刻度と修正の依存関係をもとに、以下の順序での対応を推奨します。想定工数はA社開発チームでの作業を想定した目安です。
| 期限 | 対応内容 | 関連 | 想定工数 |
|---|---|---|---|
| 即日 | 候補者詳細APIへのアクセス制限 | F-001 | 0.5人日 |
| 即日 | 本番環境のアクセスログ保全(直近180日分) | F-001 | 0.5人日 |
| 72時間以内 | テナントIDを必須条件とした取得処理への修正 | F-001 | 2人日 |
| 72時間以内 | 同じ書き方のAPI(求人・面接評価等)の横断確認 | F-001 | 3人日 |
| 2週間以内 | 履歴書URLの有効期限短縮とダウンロード時の権限確認 | F-002 | 1.5人日 |
| 2週間以内 | CSV出力へのテナント条件の強制付与 | F-003 | 1人日 |
| 2週間以内 | テナント確認処理の共通化と自動テストの追加 | F-001〜003 | 5人日 |
| 30日以内 | ログのマスク、保持期間・閲覧権限の設定 | F-004 | 2人日 |
| 30日以内 | MEDIUM・LOWの指摘事項の修正 | F-005〜013 | 6人日 |
| 修正完了後 | 再診断(修正内容の確認) | 全件 | 当社にて実施 |
想定工数 合計:21.5人日(再診断を除く)
6. 前提条件・免責事項
- 本診断は、A社による書面での許諾のもと、合意した対象範囲・期間・手法に限って実施しました。
- 本書は診断実施時点・実施範囲で確認できた事項を報告するものであり、範囲外の箇所や診断後の変更について安全を保証するものではありません。
- 本書には再現手順と影響範囲を記載していますが、そのまま悪用できる形の攻撃コードは含めていません。
- 本書の取り扱いはA社の情報管理規程に従い、社外への開示は当社との協議のうえで行ってください。
付録:準拠した基準
- OWASP Top 10(2021)/OWASP API Security Top 10(2023)
- IPA「安全なウェブサイトの作り方」
- CVSS v3.1(共通脆弱性評価システム)
- 診断実施
- 株式会社OUTLIER AIセキュリティ診断チーム
- お問い合わせ
- info@outlier.tokyo
以上