Hello there, ('ω')ノ
1. NG レポート三大パターン
パターン | よくある書き方 | 主な却下理由 |
---|---|---|
A. 情報不足 | 「XSS を発見しました」だけ | 再現不可・影響不明 |
B. 冗長・脱線 | 5000字の調査日記+スクショ 30 枚 | 重要情報が埋もれ、読む気を削ぐ |
C. 断定口調&主観 | 「重大です!至急直してください!」 | 根拠薄&高圧的で信頼ダウン |
2. NG から OK へ:ビフォー/アフター比較
2.1 パターン A:情報不足
Before(NG)
脆弱性: Stored XSS 説明: コメント欄でスクリプトが実行できます。
After(改善)
タイトル: コメント欄の Stored XSS により任意 JS 実行 → セッションクッキー窃取 概要: 未ログインでもコメント投稿が可能で、HTML エンコードが欠如しているため、任意 JavaScript が保存・実行されます。 再現手順: 1. https://example.com/article/1 を表示 2. コメント欄に <svg/onload=alert(document.cookie)> を投稿 3. 別ブラウザで当該記事を再読み込み → アラート表示 影響度: 全訪問者の Cookie 盗用によるアカウント乗っ取り 修正案: サーバ側で文字列を HTML エスケープし、CSP を設定
改善ポイント
- 再現手順・影響度 を必ずセットに
- 「誰が何をできるか」を 140 文字以内で要約する
2.2 パターン B:冗長・脱線
Before(NG)
〜○月○日 13:00 テスト開始。まず nmap を実行したところポート 80 が…… 〜(長文の日誌が延々続く)〜 最後に SQL インジェクションっぽい動きを確認。
After(改善)
タイトル: 商品検索 API における Blind SQLi でデータベース読み取り可能 概要: 商品検索 API の `q` パラメータがプレースホルダ化されておらず、Blind SQLi が成立します。 再現手順: 1. curl -X GET "https://api.example.com/search?q=1' AND SLEEP(5)--" 2. レスポンス所要時間が通常 100ms → 5000ms に増加 影響度: 任意クエリで全顧客情報を抽出可能(PoC: `UNION SELECT email,password FROM users`) 修正案: Prepared Statement 使用 + DB エラーメッセージ非公開
改善ポイント
- 調査ログは別ファイルに保管、レポートは結果だけ
- 数値差分(レスポンス時間など)でインパクトを示す
2.3 パターン C:断定口調&主観
Before(NG)
これは超ヤバいバグです!早く直さないとヤバいです!
After(改善)
影響度: 認証不要で全ユーザの個人情報(氏名・住所・電話)が取得可能。法規上の罰金リスクは最大 2% 売上相当と推定されます。 修正案: エンドポイントに認可ミドルウェアを追加し、レスポンスで個人情報を返さない設計に変更。
改善ポイント
- 客観的根拠(法律・罰金・件数)で深刻度を立証
- 感情語を避け標準用語(CWE/Owasp分類)を使用
3. さらに差がつく“ワンランク上”テクニック
テクニック | 効果 |
---|---|
数式で損害試算 | 例:平均購入単価 × 想定悪用回数 = 最大 ○万円 |
業界ニュース引用 | 類似インシデント事例リンクを添付し実害をイメージさせる |
Fix Pull Request | OSS ならパッチ提案 PR を同時提出 → 報酬+評価アップ |
PoC GIF | 5〜10 秒のアニメ GIF で動きを一目瞭然に |
4. チェックリスト:提出前の“5 分レビュー”
- タイトルでバグ種 + 影響が伝わるか?
- 再現手順を新人でも 3 分で実行できるか?
- 影響度に数字・法的根拠・ユーザ数のどれかが入っているか?
- 修正案が具体的(ライブラリ名・設定値)か?
- 敬語・敬称に漏れはないか?感情語がないか?
まとめ:NG レポートは“情報・構造・語彙”で改善できる
- 不足 → 追加、冗長 → 圧縮、主観 → 根拠 が鉄則
- 数字・比較・標準用語を盛り込むだけで説得力は飛躍的に向上
- レポートは開発チームへのサービス。読みやすさが最も評価される
「技術 ≒ 半分、ライティング ≒ 半分」 良いバグハンターは、レポート作成を“攻撃フェーズの一部”と考えます。
Best regards, (^^ゞ