OWASP Top 10(2025)解説
攻撃者の視点でアプリケーションを点検し、設計・実装・デリバリー・運用の各段階にセキュリティ対策を組み込みます。
OWASP(Open Worldwide Application Security Project)は、アプリケーションセキュリティに取り組むオープンコミュニティです。OWASP Top 10 は、Web アプリケーションにおける重大なリスクを10のカテゴリーに整理した代表的な啓発資料です。
本記事では正式版 OWASP Top 10:2025 を扱います。Top 10 はリスク分類と教育資料であり、完全なセキュリティ標準ではありません。脅威モデリング、コードレビュー、ペネトレーションテストの代わりになるものでもありません。
10のリスク一覧
| 順位 | リスク | 要点 |
|---|---|---|
| A01 | アクセス制御の不備 | 利用者が権限外の操作を実行できる |
| A02 | セキュリティ設定の不備 | 危険な初期値、公開サービス、設定ミスが攻撃面になる |
| A03 | ソフトウェアサプライチェーンの不備 | 依存関係、ビルド、リリースが脆弱性や改ざんの影響を受ける |
| A04 | 暗号化の不備 | 機密データが正しく暗号化・保護されていない |
| A05 | インジェクション | 信頼できない入力が命令、クエリ、コードとして実行される |
| A06 | 安全でない設計 | 設計そのものに必要なセキュリティ制約がない |
| A07 | 認証の不備 | ログイン、セッション、認証情報の復旧が回避・悪用される |
| A08 | ソフトウェアまたはデータの完全性の不備 | コード、更新、重要データへの信頼が検証されていない |
| A09 | セキュリティログとアラートの不備 | 攻撃を迅速に検知、追跡、対応できない |
| A10 | 例外状態の不適切な処理 | エラーや資源枯渇時にシステムが安全でなくなる |
A01:アクセス制御の不備(Broken Access Control)
アクセス制御は「誰が、どの資源に、どの操作を行えるか」を決めます。認証に成功しても、すべてのデータへのアクセスが許可されるわけではありません。IDOR、フロントエンドだけの権限制御、SSRF などが代表例です。
// 誤り:クライアントから渡された id だけで検索する
const invoice = await db.invoice.findUnique({ where: { id: req.params.id } })
// 正しい例:検索条件に所有者も含める
const invoice = await db.invoice.findFirst({
where: { id: req.params.id, ownerId: req.user.id }
})**対策:**デフォルト拒否、サーバー側での一元的な認可、所有権の確認、最小権限、CORS の制限、権限違反の記録と通知を行います。外向き通信は宛先を許可リスト化します。
A02:セキュリティ設定の不備(Security Misconfiguration)
デバッグモード、初期アカウント、公開ストレージ、スタックトレースを含むエラーページなどは攻撃の入口になります。
**対策:**環境ごとに再現可能なハードニングテンプレートを用意し、不要な機能やアカウントを削除します。CSP や HSTS を使い、内部エラーを公開せず、CI/CD で IaC、コンテナイメージ、設定ドリフトを検査します。
A03:ソフトウェアサプライチェーンの不備(Software Supply Chain Failures)
2025年版では、2021年の「脆弱で古いコンポーネント」がサプライチェーン全体へ拡張されました。乗っ取られたパッケージ、汚染されたビルドツール、漏えいした資格情報も対象です。
**対策:**SBOM を維持し、依存バージョンを固定・レビューします。信頼できる配布元を使い、SCA を継続実行し、CI/CD を保護して成果物の署名、来歴、完全性を検証します。
A04:暗号化の不備(Cryptographic Failures)
HTTP による平文通信、復号可能なパスワード保存、古いアルゴリズム、ソースコードへ登録された鍵などは、個人情報や認証情報の漏えいにつながります。
// パスワードには成熟した Argon2id、scrypt、bcrypt 実装を使用する
const passwordHash = await argon2.hash(password, { type: argon2.argon2id })**対策:**必要なデータだけを保持し、通信には TLS、パスワードには専用の低速ハッシュを使います。鍵は鍵管理システムで保管・ローテーションし、独自の暗号方式を設計しません。
A05:インジェクション(Injection)
信頼できない入力を SQL、OS コマンド、テンプレートなどへ連結すると、データが命令として解釈されます。XSS もこのカテゴリーです。
// 誤り:文字列連結による SQL インジェクション
db.query(`SELECT * FROM users WHERE email = '${email}'`)
// 正しい例:パラメーター化クエリ
db.query('SELECT * FROM users WHERE email = ?', [email])**対策:**パラメーター化クエリと安全な API を優先し、入力を検証します。出力先の文脈に応じてエンコードし、シェル利用を抑え、CSP で XSS の影響を軽減します。
A06:安全でない設計(Insecure Design)
クーポンを無制限に重ねられる、送金額に上限がない、パスワード再設定で利用者を列挙できる、といった問題は設計段階の制約不足であり、スキャナーでは発見しにくいものです。
**対策:**開発前に脅威モデリングと悪用ケースの検討を行い、信頼境界と要件を定義します。重要操作にはレート制限、再確認、状態検証を追加し、テストで安全性の制約を検証します。
A07:認証の不備(Authentication Failures)
弱いパスワードポリシー、無制限のログイン試行、更新されないセッション ID、ログアウト後も有効なトークン、回避可能な MFA などが含まれます。
**対策:**実績のある ID 基盤と標準プロトコルを使い、高リスク操作にはフィッシング耐性のある MFA を導入します。ログイン後にセッション ID を更新し、Cookie へ HttpOnly、Secure、適切な SameSite を設定します。
A08:ソフトウェアまたはデータの完全性の不備(Software or Data Integrity Failures)
署名や完全性確認がなければ、攻撃者が更新、プラグイン、パイプライン成果物、重要データを置き換えられます。
**対策:**電子署名を検証し、デシリアライズ可能な型を制限します。リポジトリとパイプラインの承認規則を保護し、重要なデータ変更を監査可能にします。外部スクリプトには SRI を使います。
A09:セキュリティログとアラートの不備(Security Logging and Alerting Failures)
ログだけで実行可能なアラートがなければ、攻撃を長期間見逃します。一方、パスワードやトークンを記録すると新たな漏えいリスクになります。
**対策:**認証・認可の失敗、管理操作、重要データの変更を構造化して記録し、改ざん防止とアクセス制御を行います。対応可能なアラートを作り、検知から復旧までを定期的に訓練します。
A10:例外状態の不適切な処理(Mishandling of Exceptional Conditions)
2025年版で追加されたカテゴリーです。タイムアウト、権限不足、資源枯渇などの際に、失敗時に処理を許可する、トランザクションが途中まで進む、内部エラーをそのまま返す、といった挙動は危険です。
try {
await authorizeAndTransfer(command)
} catch (error) {
logger.error({ errorId, userId: user.id }, 'transfer failed')
return reply.status(500).send({ error: 'TRANSFER_FAILED', errorId })
}**対策:**例外処理を一元化し、安全側に失敗させます。トランザクションで原子性を保証し、タイムアウト、再試行、資源利用に上限を設け、利用者には一般的なエラーと追跡用 ID だけを返します。
2021年版から2025年版への変更
- アクセス制御の不備は引き続き1位で、SSRF が統合されました。
- セキュリティ設定の不備は5位から2位へ上昇しました。
- 「脆弱で古いコンポーネント」はサプライチェーン全体へ拡張されました。
- ログに加えてアラートと対応が強調されました。
- 「例外状態の不適切な処理」が新設されました。
チーム導入チェックリスト
- **設計:**脅威モデリングで資産、信頼境界、悪用ケース、要件を整理する。
- **実装:**認可、パラメーター化クエリ、出力エンコード、パスワードハッシュ、例外処理を標準化する。
- **コミット:**秘密情報、ソースコード、依存関係、ライセンスを検査する。
- **ビルド:**パイプラインを分離し、SBOM を生成し、成果物へ署名する。
- **テスト:**認可、認証、業務ロジック、例外経路、設定を検証する。
- **デプロイ:**最小権限と秘密管理を徹底し、クラウドとコンテナ設定を検査する。
- **運用:**ログを集約し、有効なアラートを設定し、インシデント対応を訓練する。
まとめ
OWASP Top 10 の価値は10個の名称を暗記することではなく、製品、開発、運用、セキュリティの各担当者が共通言語を持つことにあります。それぞれのリスクを、自社の設計規則、コーディング標準、自動検査、インシデント訓練へ変換してください。
参考資料
- OWASP Top 10:2025
- OWASP Top 10:2025 — Introduction
- OWASP Cheat Sheet Series
- OWASP Application Security Verification Standard
本記事はセキュリティ教育を目的としています。実際のプロジェクトでは事業リスク、技術構成、コンプライアンス要件に合わせて対策してください。
