先に要点
- OWASP Top 10 は OWASP(Open Web Application Security Project) が約 3〜4 年ごとに更新する Web アプリで頻発する脆弱性カテゴリのランキング。世界中のペネトレ・バグバウンティ・ベンダー集計データを根拠にしており、個別の脆弱性カタログ」 ではなく `カテゴリ単位の優先順位 として読む。
- 2021 版の上位は A01: アクセス制御の不備、A02: 暗号化の失敗、A03: インジェクション、A04: セキュアでない設計、A05: セキュリティ設定ミス、A06: 脆弱で古いコンポーネント、A07: 識別と認証の失敗、A08: ソフトウェアとデータの整合性失敗、A09: ログとモニタリングの不備、A10: SSRF。
- 仕様書として読むより、自社プロダクトのチェックリスト として現状を当てはめるのが本来の用途。「どのカテゴリが自分達に当てはまるか」 を四半期に一度棚卸しすると、優先度のついた改善バックログになる。
- 2025 年以降の更新では AI / LLM 由来の入力経路」 「サプライチェーン攻撃」 `クラウド設定ミス がさらに重く扱われる方向。npm サプライチェーン攻撃 や S3 公開設定の事故 は最近の頻発事例。
- Top 10 だけが世界ではない。OWASP API Security Top 10」 「OWASP LLM Top 10」 `OWASP Mobile Top 10 など領域別のリストもあり、自分達のスタックに合わせて読む。Web Top 10 は 一般 Web アプリ向けの最大公約数。
「セキュリティ強化」 と言われても、「何から手を付けるべきか分からない」 のが現場の正直な気持ちです。「OWASP Top 10」 は、その問いに対する まずこの 10 カテゴリを上から押さえると、現実の事故の大部分はカバーできる という共通リファレンスです。
「仕様書として暗記する」 のではなく、自社プロダクトの現状をカテゴリ単位で当てはめるチェックリスト として使うのが正しい使い方です。この記事では、2021 版の 10 カテゴリを実務目線で順に読み解き、「それぞれで現場が踏みやすい失敗と対策」 を整理します。
OWASP Top 10 とは何か
OWASP(Open Web Application Security Project) は、Web セキュリティのオープンコミュニティです。OWASP Top 10 は、世界中のペネトレーションテスト、バグバウンティ、セキュリティベンダーから集めたデータを集計し、Web アプリで実際によく見つかる脆弱性カテゴリの上位 10 件 をランキングしたもの。
具体的な脆弱性のリストではない
個別の CVE ではなく、「脆弱性のカテゴリ」 を扱う。「SQL インジェクションが何件あった」 ではなく、「インジェクション系全般」 という粒度。抽象的すぎず具体的すぎない、現場の議論で使いやすい単位。
3〜4 年ごとに更新される
2013 / 2017 / 2021 / (2025 予定) と更新されてきた。新しいパターン(クラウド設定ミス、サプライチェーン攻撃、AI 由来の入力経路)が時代とともに重み付けが変わる。
対策の世界共通言語
「 うちのアプリ、A03 まだ残ってる」 と言えば世界中のエンジニアに通じる。セキュリティ要件を会話する共通語 として使える価値が大きい。
プロセスへの組み込みが本質
「 開発・レビュー・運用の各フェーズで Top 10 を意識する」 のが理想。「設計レビュー時にカテゴリを 1 つずつチェック」 「年次のセキュリティ棚卸しで現状をマップ」 のような使い方。
2021 版 10 カテゴリを実務目線で読む
各カテゴリで どんな攻撃か」 「現場でよく見る失敗」 `対策の方向性 を整理します。
A01: アクセス制御の不備 (Broken Access Control)
2017 版から 「5位 → 1位」 に大幅上昇したカテゴリ。認可ロジックの抜け による情報漏洩・権限昇格が中心です。
よくある失敗
「 URL の ID を書き換えるだけで他人の情報が見える」(IDOR)、「管理者用エンドポイントが認可チェック無しで叩ける」、「フロント側だけで権限制御している」、「API のメソッド差別なし(POST も DELETE も同じ権限で通る)」。
対策の方向性
サーバ側で必ず認可チェック が大前提。「ロール + リソース所有者 + コンテキスト」 を確認するパターンを共通ヘルパに切り出し、「各エンドポイントで明示的に呼ぶ」 設計にする。「認可テスト」 を CI に組み込む。
クラウド時代の追加観点
S3 バケットの誤公開、IAM の過剰権限、「CloudFront のキャッシュ汚染で他人のレスポンスを見る」 のような クラウド層での認可不備 も A01 に含まれる。S3 + OAC 移行 もこのカテゴリ対策。
なぜ最重要扱いか
「 攻撃者にとって最もコスパが良い」 から。「脆弱性スキャナでは検出しづらく、人間がロジックを追わないと見つからない」 種類が多い。被害は 「データ漏洩」 と直結。
A02: 暗号化の失敗 (Cryptographic Failures)
2017 版 「Sensitive Data Exposure」 から 「根本原因に着目した名前」 へ変わったカテゴリ。暗号化していない / 弱い / 鍵管理がずさん が中心です。
よくある失敗
「 パスワードを平文または弱いハッシュ(MD5, SHA-1)で保存」、「通信に TLS を使っていない / 古い TLS バージョン」、「秘密鍵をリポジトリに commit」、「暗号化していない DB バックアップを S3 に置く」。
対策の方向性
パスワードは 「 Argon2」 や 「bcrypt」 でハッシュ + ソルト。通信は TLS 1.2 以上、できれば 1.3。秘密鍵は AWS KMS / Secrets Manager / HashiCorp Vault のような専用基盤に置く。「暗号化は仕組みに任せ、自前で実装しない」 が鉄則。
A03: インジェクション (Injection)
伝統的に上位常連。ユーザー入力がそのままコマンドや SQL として解釈される 系全般です。XSS もこのカテゴリに統合されました。
よくある失敗
「 SQL を文字列連結で組み立て」、「外部コマンドを shell=True で呼ぶ」、「テンプレートエンジンの自動エスケープを切って HTML 連結」、「ORM の Raw クエリを生で組む」。
対策の方向性
SQL は プレースホルダ(prepared statement)、HTML は テンプレートエンジンの自動エスケープを切らない、外部コマンドは シェルを介さない API + 引数配列。詳細は サニタイズ・エスケープ・バリデーション と エスケープ深掘り 参照。
新興: プロンプトインジェクション
LLM が普及した結果、プロンプトインジェクション という新カテゴリが台頭。OWASP は別途 「LLM Top 10」 を出して扱っているが、「A03 と同じ発想の防御」(入力の文脈分離、権限最小化)が効く。
原則: ホワイトリスト + 分離
「 危ない文字を消す(ブラックリスト)」 ではなく、許す形だけ通す(ホワイトリスト)」 + `データと指示を分ける(プレースホルダ/分離)。これがインジェクション系すべての対策の核。
A04: セキュアでない設計 (Insecure Design)
2021 版で新登場した 設計レベルでの不備 を独立カテゴリ化したもの。「実装を直しても、設計が間違っていれば直しきれない」 という問題意識です。
よくある失敗
「 パスワードリセット URL に有効期限が無い」、「機能フラグで管理者機能を一般ユーザーにも見せられる作り」、「レート制限が無く総当たり攻撃が可能」、`認可境界が曖昧で 「Admin」 と 「User」 の差が APIで実装依存になっている」。
対策の方向性
脅威モデリング(STRIDE / PASTA) を設計フェーズで行う。「このユースケースで攻撃者は何を狙うか」 「想定される攻撃に対し、どの層で守るか」 を 設計段階で言語化する。実装後に脆弱性スキャナで検出するより、はるかに低コスト。
セキュア・バイ・デザイン
「 機能を作る → 後でセキュリティを足す」 ではなく、機能要件と同時にセキュリティ要件を定義する。「このフォームは認証必須」 「この API は管理者のみ」 を 設計ドキュメントの第一級要素 として扱う。
既存システムへの適用
「 一度動いているシステム」 でも、「機能追加や仕様変更のタイミング」 に脅威モデリングを差し込める。「全部やる」 ではなく、重要な機能から優先順位を付けて評価する のが現実解。
A05: セキュリティ設定ミス (Security Misconfiguration)
クラウド時代に最も増えているカテゴリ。デフォルト値のまま」 「不要な機能が有効」 `公開設定を間違える の3パターンが多い。
よくある失敗
S3 バケットの誤公開、「管理画面のデフォルトパスワードのまま運用」、「本番に開発用デバッグエンドポイントが残っている」、「セキュリティヘッダ(Content-Security-Policy 等)を設定していない」、「管理者向けディレクトリリスティングが見える」。
対策の方向性
Infrastructure as Code + ポリシーチェック(Terraform + Checkov、CloudFormation Guard、AWS Config Rules)で 設定の自動検出と是正を仕組み化する。「人間が気を付ける」 だけでは必ず漏れる。
最小権限・最小機能の原則
「 必要なものだけ有効にする」。デフォルトで全部 ON ではなく、必要だと判明したものだけ明示的に有効化する設計が事故を減らす。「IAM のワイルドカード権限」 をなくすだけでも被害縮小に効く。
A06: 脆弱で古いコンポーネント (Vulnerable and Outdated Components)
サプライチェーン攻撃の温床。依存ライブラリの脆弱性 が直接プロダクトの脆弱性になる時代です。
よくある失敗
「 package.json / composer.json / requirements.txt の依存を半年以上更新していない」、「CVE が出ているライブラリを使い続けている」、「脆弱性スキャナを CI に組み込んでいない」、「SBOM(Software Bill of Materials)を持っていない」。
対策の方向性
npm audit / pip-audit / composer audit / dependabot を CI に組み込み、「新規脆弱性発見時に自動 PR」。ロックファイルをコミットして再現性を確保 し、「依存追加時にレビュー」 する文化を作る。
最近の事故事例
Mini Shai-Hulud Worm(2026 年 5 月の npm/PyPI 大規模サプライチェーン攻撃)が代表例。「正規パッケージのメンテナアカウントを乗っ取って悪意あるバージョンを公開」 で全世界に伝播した。
A07: 識別と認証の失敗 (Identification and Authentication Failures)
旧 「Broken Authentication」。ログイン周りの仕組みが弱い 系。
よくある失敗
「 短すぎるパスワード許可」、「MFA(多要素認証)が無い」、「セッション ID が予測可能」、「セッションタイムアウトが長すぎる」、「パスワードリセットが攻撃に弱い」、「ブルートフォース対策(レート制限)無し」。
対策の方向性
認証は自前で書かず、AWS Cognito / Auth0 / Okta / Firebase Auth のような既製品に任せる。MFA を 標準で有効にする。レート制限を WAF や API Gateway で実装。OAuth 2.0 と OIDC の正しい使い分けも重要。
A08: ソフトウェアとデータの整合性失敗 (Software and Data Integrity Failures)
2021 版で新登場。検証なしに信頼してしまう 系。
よくある失敗
「 署名検証なしの自動更新」、`CI/CD で外部スクリプトを 「curl | sh」 する」、「セッションオブジェクトを Cookie に詰めて改ざん検証なし」、「untrusted な JSON / YAML を deserialize して任意コード実行」。
A09: ログとモニタリングの不備 (Security Logging and Monitoring Failures)
「攻撃に気付けない」 系。事故そのものより、事故後に気付くまでの時間が遅れることが致命的。
対策の方向性
認証・認可・重要操作のイベントを構造化ログに残す、「改ざん不可能な場所(S3 Object Lock、CloudWatch Logs)に保管」、「異常パターンで自動アラート(WAF、GuardDuty、Datadog)」。事故時に 何が起きたか追える状態 を最低ラインに。
クラウドネイティブな最低構成
「 CloudTrail データイベント + GuardDuty + Security Hub + S3 アクセスログ」 を有効化するだけでも、「攻撃に気付くまでの時間」 が大幅に短くなる。「設定するだけで効く」 のが現代的な選択肢の良さ。
A10: SSRF (Server-Side Request Forgery)
新規カテゴリ化。サーバ自身に内部宛のリクエストを送らせる攻撃。クラウドメタデータ盗難の典型手段。
よくある失敗
「 ユーザー指定の URL を fetch する画像取得 / Webhook テスト機能」 で、「http://169.254.169.254/」(クラウドメタデータエンドポイント)に到達可能、「内部 IP やプライベートサービスに到達可能」。
対策の方向性
内部 IP 範囲(127.0.0.1, 10.0.0.0/8, 169.254.169.254 など)へのアクセスをブロック、「URL スキームをホワイトリスト(http/https のみ)」、「DNS 解決結果も検証(リバインディング攻撃対策)」、「必要なら専用プロキシ経由でのみ外部リクエスト」。
クラウドでの被害シナリオ
「 EC2 や Lambda で動くアプリが SSRF で 169.254.169.254 を叩く → IAM 一時クレデンシャル取得 → AWS API を任意実行 → データ取得 / 削除 / マイニング VM 起動」。IMDSv2 を必須化するだけでもかなり緩和できる。
最近の事例
2026 年 5 月の Next.js セキュリティリリース にも SSRF が含まれていた。「フレームワーク側の脆弱性」 として出ることもあり、「常に最新版に保つ」 ことも対策の一つ。
OWASP Top 10 を 「自社の運用」 にどう組み込むか
「読んで終わり」 にしないために、運用への組み込み方を整理します。
「プロセスへの組み込み」 こそが OWASP Top 10 を活かす本質です。
API / LLM / Mobile 向け Top 10 もある
Web Top 10 だけが世界ではありません。自分達のスタックに合わせて他リストも読むと、抜けが減ります。
| リスト名 | 対象 | Web Top 10 との関係 |
|---|---|---|
| OWASP API Security Top 10 | API バックエンド | 「 API 特有の認可・流量制御・スキーマ検証」 を深掘り。「Broken Object Level Authorization」 などが追加 |
| OWASP LLM Top 10 | LLM 組み込みアプリ | 「 プロンプトインジェクション」 「機密データ漏洩」 「モデル盗難」 など。Web Top 10 にない新カテゴリが多い |
| OWASP Mobile Top 10 | モバイルアプリ | 「 ローカルストレージ」 「バイナリ改ざん」 「認証通信」 など Mobile 特有 |
| OWASP Cloud-Native Top 10 | クラウドネイティブ環境 | 「 コンテナイメージ」 「Kubernetes 設定」 「サーバレス」 の脆弱性パターン |
「自社の主たるスタック」 のリストを 1 つ深く読み、Web Top 10 を共通基盤とするのが現実的な学習ルートです。
OWASP Top 10 に関するよくある質問
Q. Top 10 を全部対策すれば安全ですか?
A. 安全に近づくが、十分ではない です。Top 10 は 「特に多いカテゴリ」 を集計したもので、「これだけ守れば全部 OK」 ではありません。「業界特有のリスク」 「自社固有のビジネスロジック由来の脆弱性」 もあるので、Top 10 を 最低ライン と捉え、その上で 自社の脅威モデリング を追加するのが本来の使い方です。
Q. 2017 版と 2021 版で何が変わりましたか?
A. 「 A04 セキュアでない設計」 「A08 整合性失敗」 「A10 SSRF」 が新規入りし、「 A01 アクセス制御」 が 5 位から 1 位に大幅上昇しました。「XSS が独立カテゴリから A03 インジェクションに統合」 されたのも大きな変化です。「設計レベル」 と 「サプライチェーン」 への重み付けが強くなったのが特徴。
Q. 2025 版ではどうなる予想ですか?
A. AI / LLM 由来の入力経路」 「サプライチェーン攻撃」 `クラウド設定ミス がさらに重く扱われる方向と予想されています。2026 年の npm 大規模感染 のような事例が頻発しており、A06(古いコンポーネント)や A08(整合性失敗)の重要度が上がる流れ。
Q. 個人開発でも OWASP Top 10 を使うべきですか?
A. 規模に応じて使う が答えです。「自分しか使わないツール」 なら Top 10 全部は過剰ですが、「公開する Web サービス」 「他人に使わせる API」 なら最低でも A01 / A03 / A07」 はチェックしておくべき。「MFA 必須化 + プレースホルダ使用 + サーバ側認可」 だけでも事故率が大幅に下がります。
Q. セキュリティ専門家がいない組織でも始められますか?
A. 始められます。Top 10 は元々 「セキュリティに専任できない開発者向け」 に作られたリストです。「カテゴリごとに 1 つだけ対策を入れる」 から始めても、ゼロより圧倒的に強い。AWS や Cloudflare の マネージドサービス(WAF、Cognito、Macie、IAM Access Analyzer)を使うと、専門家がいなくても多くのカテゴリで現代水準の対策ができます。
Q. CVSS との関係は?
A. 別の軸 です。CVSS は 「個別の脆弱性の重大度スコア(0〜10)」、OWASP Top 10 は 「脆弱性カテゴリのランキング」。Top 10 を どのカテゴリを優先するか の議論に使い、CVSS を カテゴリ内の個別 CVE をどう優先するか に使う、と整理すると両方活きます。
Q. 脆弱性スキャナを買えば全部見つかりますか?
A. 半分くらいは見つかります。「A03 インジェクション」 「A06 古いコンポーネント」 「A02 弱い TLS」 はスキャナで見つけやすい一方、A01 認可ロジック」 「A04 設計の不備」 `A09 ログ不足 は 人間が業務知識を持ってレビューしないと見つかりません。スキャナは 「下地」、レビューと脅威モデリングが 「上もの」 と考えてください。
まとめ
OWASP Top 10 は Web セキュリティの共通言語 です。「仕様書として暗記する」 のではなく、自社の現状をマップするチェックリスト として、設計・実装・運用の各フェーズに組み込むのが本来の使い方です。
2021 版を起点に、「AI 時代の入力経路」 「サプライチェーン攻撃」 「クラウド設定ミス」 を追加で意識しておけば、2025 版にもスムーズに移行できます。「完璧に守る」 ではなく、攻撃者にとってのコスパを悪くする 発想で、「まず Top 3 から」 のような優先順位で進めるのが現実的です。
参考リンク
- OWASP: OWASP Top 10:2021
- OWASP Cheat Sheet Series: Cheat Sheet Series
- OWASP: API Security Top 10
- OWASP: LLM Top 10
- NIST: SP 800-63B Digital Identity Guidelines