Hello there, ('ω')ノ
1. レポートのゴールを再確認
目的 |
読み手 |
成功指標 |
脆弱性を 正確に再現 させる |
トリアージ担当 |
3 分以内に PoC 成功 |
ビジネス影響を 瞬時に把握 させる |
PM・CISO |
1 行で重大度を理解 |
迅速な修正 を促す |
開発エンジニア |
修正ポイントが具体的 |
「読んだ直後に次の行動が決まる」 ことが、良いレポートの絶対条件です。
2. 黄金フォーマット 6 セクション
# |
セクション名 |
役割 |
1 |
タイトル |
バグ種別 + 影響範囲を 50 字以内で |
2 |
概要(Summary) |
1~2 文で「どこで・何が起こる・何が危険」 |
3 |
前提条件(Prerequisites) |
必要アカウント / 権限 / ツール |
4 |
再現手順(Steps to Reproduce) |
クリック&リクエストを番号付きで |
5 |
結果 & 期待挙動 |
実際のレスポンス vs. 本来あるべき挙動 |
6 |
影響度 & 修正案 |
ビジネス損失試算+技術的 Fix 提案 |
2.1 タイトル例
- Bad:「脆弱性報告」
- Good:「管理者 API で認可欠如により一般ユーザが全データ閲覧可能(IDOR)」
検索結果に並んだときでも “深刻度” を瞬時に伝えるのが狙い。
2.2 概要(Summary)
/GET /api/admin/users に認可チェックが存在せず、ログイン済みの一般ユーザトークンで全ユーザ情報を取得できます。本脆弱性は縦方向の権限昇格(BOLA)に該当し、個人情報漏えいリスクが極めて高いと判断しました。
2.3 再現手順(5 行以内)
1. 一般ユーザでログインし JWT を取得
2. Burp Repeater で下記リクエスト送信
GET /api/admin/users Authorization: Bearer <user_jwt>
3. 200 OK と共に全ユーザの JSON が返る
2.4 結果と期待
項目 |
内容 |
結果 |
200 OK, ユーザ 1,000 件の個人情報 |
期待 |
403 Forbidden(一般権限ではアクセス不可) |
2.5 影響度
- PII(氏名・メール・住所)100,000 件漏えい
- GDPR/個人情報保護法違反による最大 2 億円の罰則リスク
- ブランド信頼失墜 → 解約率 ×% 想定
2.6 修正案
- サーバ側 RBAC ミドルウェアを admin ルートへ適用
- 追加テストケース:一般ユーザで 403 を確認
- レート制限ログを監視し、不審アクセスを即遮断
3. 添付資料のベストプラクティス
種類 |
内容 |
Tips |
スクリーンショット |
①前提画面 ②脆弱性発生瞬間 |
赤枠・番号で視線誘導 |
リクエスト/レスポンス |
Burp 自動エクスポート .txt |
Diff 表示で変更点強調 |
PoC スクリプト |
cURL or Python 10 行以内 |
環境変数でトークン指定 |
4. やってはいけない NG 構成
NG例 |
なぜダメ? |
改善策 |
スクショのみで手順が無い |
再現できず「Informative」落ち |
手順を番号付きで補記 |
3,000 文字の長文 |
読む前に離脱 |
箇条書き+表に整理 |
影響度が主観 |
「ヤバいです!」だけ |
損害試算 or 同種インシデント引用 |
5. “読まれる”ための執筆ハック
- 結論→理由→詳細 のピラミッド構造
- 1 セクション = 5 行以内 を目標に削る
- 2 色(赤・黄)だけでハイライト → 迷わない
“調査ログ” と “レポート” を分けて書く
6. テンプレ配布(Markdown)
# {タイトル}
## 概要
{140 字以内}
## 前提条件
- 役割: 一般ユーザ
- 環境: 本番 / staging
- ツール: Burp Suite 2024.6
## 再現手順
1. ...
2. ...
3. ...
## 結果
HTTP/1.1 200 OK
[ { "id": 1, "email": "..." } ]
期待挙動
HTTP/1.1 403 Forbidden
影響度
修正案
---
## まとめ:構成は **“固定”**、内容で勝負
- 6 セクションの黄金フォーマットを **テンプレ化**
- 読み手の“次の行動” を意識 → 再現&修正に直結
- **数字・比較・表** を使い「説得力」を可視化
> **“読みやすい=信用される”**
> バグハンターの価値は、技術と同じくらいレポートで決まります。
Best regards, (^^ゞ