Skip to content

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 などが代表例です。

ts
// 誤り:クライアントから渡された 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 による平文通信、復号可能なパスワード保存、古いアルゴリズム、ソースコードへ登録された鍵などは、個人情報や認証情報の漏えいにつながります。

ts
// パスワードには成熟した Argon2id、scrypt、bcrypt 実装を使用する
const passwordHash = await argon2.hash(password, { type: argon2.argon2id })

**対策:**必要なデータだけを保持し、通信には TLS、パスワードには専用の低速ハッシュを使います。鍵は鍵管理システムで保管・ローテーションし、独自の暗号方式を設計しません。

A05:インジェクション(Injection) ​

信頼できない入力を SQL、OS コマンド、テンプレートなどへ連結すると、データが命令として解釈されます。XSS もこのカテゴリーです。

ts
// 誤り:文字列連結による 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年版で追加されたカテゴリーです。タイムアウト、権限不足、資源枯渇などの際に、失敗時に処理を許可する、トランザクションが途中まで進む、内部エラーをそのまま返す、といった挙動は危険です。

ts
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位へ上昇しました。
  • 「脆弱で古いコンポーネント」はサプライチェーン全体へ拡張されました。
  • ログに加えてアラートと対応が強調されました。
  • 「例外状態の不適切な処理」が新設されました。

チーム導入チェックリスト ​

  1. **設計:**脅威モデリングで資産、信頼境界、悪用ケース、要件を整理する。
  2. **実装:**認可、パラメーター化クエリ、出力エンコード、パスワードハッシュ、例外処理を標準化する。
  3. **コミット:**秘密情報、ソースコード、依存関係、ライセンスを検査する。
  4. **ビルド:**パイプラインを分離し、SBOM を生成し、成果物へ署名する。
  5. **テスト:**認可、認証、業務ロジック、例外経路、設定を検証する。
  6. **デプロイ:**最小権限と秘密管理を徹底し、クラウドとコンテナ設定を検査する。
  7. **運用:**ログを集約し、有効なアラートを設定し、インシデント対応を訓練する。

まとめ ​

OWASP Top 10 の価値は10個の名称を暗記することではなく、製品、開発、運用、セキュリティの各担当者が共通言語を持つことにあります。それぞれのリスクを、自社の設計規則、コーディング標準、自動検査、インシデント訓練へ変換してください。

参考資料 ​

本記事はセキュリティ教育を目的としています。実際のプロジェクトでは事業リスク、技術構成、コンプライアンス要件に合わせて対策してください。

最終更新:

最近更新