OWASP Top 10 とは
OWASP(Open Worldwide Application Security Project) は、Webアプリケーションセキュリティの向上を目的とした非営利団体です。
OWASP Top 10は、実際のデータと専門家の知見に基づき、最重要のWebアプリケーションセキュリティリスクをまとめたリストです。前回(2021年版)から4年ぶりに更新され、2025年版が2026年1月に正式確定しました。
2025年版では「症状から根本原因へ」というフォーカスシフトが行われています。例えば「センシティブデータの露出(Sensitive Data Exposure)」という症状ではなく、「暗号化の失敗(Cryptographic Failures)」という根本原因を記述するアプローチが定着しました。またサプライチェーン攻撃の急増と例外処理の問題が新カテゴリとして追加されました。
OWASP Top 10 2021 → 2025 の変化
| 順位 | 2025年版 | 2021年版との変化 |
|---|---|---|
| A01 | アクセス制御の不備(Broken Access Control) | 変わらず1位 |
| A02 | セキュリティの設定ミス(Security Misconfiguration) | 5位→2位(大幅上昇) |
| A03 | ソフトウェアサプライチェーンの失敗(Software Supply Chain Failures) | 🆕 新規追加(A06「脆弱なコンポーネント」を発展) |
| A04 | 暗号化の失敗(Cryptographic Failures) | 2位→4位 |
| A05 | インジェクション(Injection) | 3位→5位(下落) |
| A06 | 安全でない設計(Insecure Design) | 変わらず6位 |
| A07 | 識別と認証の失敗(Identification and Authentication Failures) | 7位相当(維持) |
| A08 | ソフトウェアとデータの完全性の失敗(Software and Data Integrity Failures) | 8位相当(維持) |
| A09 | セキュリティログとモニタリングの失敗(Security Logging and Monitoring Failures) | 9位相当(維持) |
| A10 | 例外条件の誤処理(Mishandling of Exceptional Conditions) | 🆕 新規追加 |
主な変更点のポイント:
- A02 Security Misconfiguration が急上昇(5位→2位): テスト済み全アプリで何らかの設定ミスが発見されるという実態を反映
- A03 サプライチェーン(新規): XZ Utils バックドア事件・npm汚染などを反映し、ビルド・配布プロセス全体を対象に拡張
- A10 例外処理の誤処理(新規): 24種類のCWEを包含し、エラーハンドリングの欠陥・論理エラー・フェイルオープン状態を統合
- SSRF(A10→統合): 2021年のSSRF(A10)は「アクセス制御の不備(A01)」に統合・吸収
A01: アクセス制御の不備(Broken Access Control)
2021年から2025年も1位を維持。ユーザーが権限外の操作・データにアクセスできてしまう脆弱性です。94%のアプリケーションで何らかの形で検出されます。
代表的な攻撃パターン:
- IDOR(Insecure Direct Object Reference): URLを
/user/123/profileから/user/124/profileに変更して他人のデータを閲覧 - 通常ユーザーが管理者機能にアクセス可能
- クラウドのストレージバケット(S3等)の誤公開
- SSRF(Server-Side Request Forgery): サーバー経由で内部リソースへのアクセス(2025年版でA01に統合)
2024-2025年の注目事例:
- APIの水平的アクセス制御の不備(BAPIの A01 問題)が侵害の主要ベクターに
- クラウドインフラのIDおよびアクセス管理(IAM)ポリシーのミスが大規模漏洩の原因として多発
対策:
- サーバー側でのアクセス制御(クライアント側だけでは不十分)
- デフォルト拒否原則(Default Deny)
- 直接オブジェクト参照を避け、間接参照マップを使用
- CORS ポリシーの適切な設定
- アクセス制御のユニットテスト・統合テストの実施
A02: セキュリティの設定ミス(Security Misconfiguration)
2021年の5位から2位へ大幅上昇。テストされたほぼすべてのアプリケーションで何らかの設定ミスが発見されています。
例:
- デフォルトの認証情報(admin/admin)のまま本番稼働
- デバッグモードが本番環境で有効
- クラウドストレージの誤公開(S3バケット・Azure Blob Storage)
- 不要なポート・サービスの公開
- セキュリティヘッダーの未設定(CSP・HSTS・X-Frame-Options等)
- 詳細なエラーメッセージの外部公開(内部パスやスタックトレースの漏洩)
クラウド環境では設定ミスのインパクトが従来のオンプレミスより大幅に大きくなります。誤って公開されたS3バケット1つで数百万件の個人情報が流出した事例が多数あります。Infrastructure as Code(IaC)と自動スキャン(CSPM)の組み合わせが推奨されます。
対策:
- セキュリティベースライン(CIS Benchmarks等)の適用
- 自動化されたセキュリティスキャン(CSPM・IaC静的解析)
- 不要な機能・サービス・ユーザーの削除
- セキュリティヘッダーの設定確認(securityheaders.com等)
A03: ソフトウェアサプライチェーンの失敗(Software Supply Chain Failures) 🆕
2025年版の新規追加カテゴリ。2021年の「A06: 脆弱・廃止されたコンポーネント」を大幅に発展・拡張し、ビルドプロセス・配布チャネル・依存関係全体を対象とします。
LinuxのXZ圧縮ライブラリに、「Jia Tan」というGitHubユーザーが2年以上かけてプロジェクトの信頼を獲得し、悪意のあるバックドアを挿入。SSH認証バイパスを可能にするコードが主要Linuxディストリビューションに配布される寸前まで進んでいました。Microsoftのエンジニアが偶然発見し、世界規模の被害を回避。
これはサプライチェーン攻撃がいかに高度・長期的に計画されるかを示す典型例です。
リスクカテゴリ:
- 直接依存関係の脆弱性: 既知のCVEを持つnpm/pip/Mavenパッケージの使用
- トランジティブ依存関係: 直接依存しないが間接的に使うライブラリのリスク
- ビルドパイプラインへの侵害: CI/CDシステムへの不正アクセス・悪意のあるコードの注入
- コードサイニングの欠如: ビルド成果物の完全性検証なし
- パッケージタイポスクワッティング: 正規パッケージに似た偽パッケージの配布(例:
lodasvslodash)
2024-2025年の主要事例:
- tj-actions/changed-files(2025年): GitHubアクションが侵害され多数のCIパイプラインに影響(CVE-2025-30066)
- Cleo経由のCl0p攻撃(2025年): ファイル共有ソフトの脆弱性経由でHertz・Kelloggなどが被害
- npm汚染(2025年9月): 18以上の広く使われたnpmパッケージに暗号通貨窃取マルウェアが注入
対策:
- SBOM(Software Bill of Materials)の管理: 使用するすべてのコンポーネントを把握
- 自動脆弱性スキャン(GitHub Dependabot、Snyk、OWASP Dependency-Check)
- 依存関係のピンニング(バージョン固定):
npm installでのバージョン範囲を避ける - コード署名とビルド成果物のハッシュ検証
- Sigstore / cosign: サプライチェーンの透明性確保・署名ツール
- CI/CD パイプラインのセキュリティ強化(最小権限のGitHub Actions トークン等)
A04: 暗号化の失敗(Cryptographic Failures)
機密データの保護に関する暗号化の欠如・不備。2021年の2位から4位に下落しましたが、依然として重要なリスクです。
例:
- HTTP(非SSL)での個人情報・クレジットカード情報の送信
- MD5・SHA-1でのパスワードハッシュ(レインボーテーブルで解読可能)
- ハードコードされた暗号化鍵
- 弱い乱数生成器の使用
2024年8月、NISTがポスト量子暗号(PQC)の最初の3標準を正式公開しました(FIPS 203 = ML-KEM、FIPS 204 = ML-DSA、FIPS 205 = SLH-DSA)。現在のRSA・ECCは将来の量子コンピュータで破られる可能性があるため、長期保護が必要なデータには今からPQCへの移行準備が求められます。NISTは2035年までの移行を推奨しています。
対策:
- TLS 1.2/1.3の強制、弱い暗号スイートの無効化
- 適切なパスワードハッシュ(Argon2id、bcrypt)
- 機密データの最小収集原則
- 暗号化鍵の適切な管理(HSM・シークレット管理ツールの使用)
A05: インジェクション(Injection)
T1190 公開アプリケーションの悪用2021年の1位から5位に下落。セキュアコーディングの普及による改善を反映しています。
含まれる脆弱性:
- SQLインジェクション
- コマンドインジェクション
- LDAPインジェクション
- XSS(クロスサイトスクリプティング)
SQLインジェクションの対策(セキュアコーディング):
// 危険なコード(絶対に使用しないこと)
$query = "SELECT * FROM users WHERE id = " . $_GET['id'];
// 安全なコード(プリペアドステートメント)
$stmt = $pdo->prepare("SELECT * FROM users WHERE id = ?");
$stmt->execute([$_GET['id']]);
A06: 安全でない設計(Insecure Design)
設計・アーキテクチャレベルの脆弱性で、実装後に修正するのが困難です。
例:
- レート制限なしの認証エンドポイント(ブルートフォース・スプレー攻撃に無防備)
- 「秘密の質問」による本人確認(ソーシャルエンジニアリングで突破可能)
- APIのビジネスロジック欠陥(本来制限すべき操作が無制限に行える設計)
対策: 脅威モデリング(STRIDE・DREAD)、セキュアデザインパターン、設計段階でのセキュリティレビュー
A07: 識別と認証の失敗(Identification and Authentication Failures)
例:
- ブルートフォース・クレデンシャルスタッフィングへの対策なし
- セッションIDのURLパラメータへの露出
- ログアウト後のセッション無効化の失敗
- 弱いセッションID生成
対策: MFAの実装(特にFIDO2/パスキー)、強力なセッション管理、レート制限
2025年、パスキー(FIDO2/WebAuthn)がメインストリームに到達し、10億人以上が利用しています。NIST SP 800-63B-4(2025年7月正式リリース)でもパスキーがAAL2/AAL3要件に明示的に統合されました。パスキーはフィッシングサイトでは動作しない仕様のため、フィッシング対策としても最強の認証方式です。
A08: ソフトウェアとデータの完全性の失敗(Software and Data Integrity Failures)
署名・検証なしのコード・データへの依存です。A03と関連しますが、こちらは実行時・更新時の完全性検証に焦点を当てています。
例:
- 信頼できないCDNからのスクリプト読み込み(SRI未使用)
- 署名検証なしの自動アップデートメカニズム
- 安全でないデシリアライゼーション
対策:
- サブリソース整合性(SRI)チェック:
<script src="..." integrity="sha384-..." crossorigin="anonymous"> - コード署名(アプリケーション・コンテナイメージ)
- 安全なCI/CDパイプライン(シークレット管理、最小権限)
A09: セキュリティログとモニタリングの失敗(Security Logging and Monitoring Failures)
例:
- ログなしでのインシデント発生(原因究明不可能)
- ログはあるが監視・アラートがない
- ログの改ざん防止がない
- 侵害の平均発見期間が204日(IBM Cost of Data Breach 2024)
対策: 包括的なログ収集、SIEMによる相関分析、改ざん不可能なログ保管
A10: 例外条件の誤処理(Mishandling of Exceptional Conditions) 🆕
2025年版の新規追加カテゴリ。24種類のCWE(Common Weakness Enumeration)を包含し、エラーハンドリングの欠陥・論理エラー・フェイルオープン状態を統合します。
含まれる問題:
- フェイルオープン(Fail Open): エラーが発生したときに「許可」状態になる認証ロジック
- 詳細なエラーメッセージの外部公開(内部パス・DBスキーマ・スタックトレース)
- 例外をキャッチして何もしない(サイレントフェイル)
- エラー状態での機密データの露出
危険なコード例(フェイルオープン):
// 危険:例外が発生したらアクセスを許可してしまう
try {
const result = await verifyToken(token);
if (result.valid) {
allowAccess();
}
} catch (error) {
// エラーを無視してアクセスを許可してしまう
allowAccess(); // ← フェイルオープン:絶対にやってはいけない
}
// 安全:例外が発生したらアクセスを拒否する
try {
const result = await verifyToken(token);
if (result.valid) {
allowAccess();
} else {
denyAccess();
}
} catch (error) {
logger.error('Token verification failed', error);
denyAccess(); // ← フェイルセキュア:デフォルト拒否
}
対策:
- フェイルセキュア(Fail Secure)の原則: エラー時はデフォルト拒否
- 例外をキャッチしたら必ず適切に処理する(ログ記録+エラーレスポンス)
- 本番環境では詳細エラーメッセージをユーザーに返さない
- セキュリティテストで例外パスを明示的にテストする
OWASP Top 10 2025 の活用方法
- 開発者: セキュアコーディングの学習リファレンス・コードレビューチェックリスト
- テスター: ペネトレーションテストの確認項目
- マネージャー: セキュリティトレーニングのカリキュラム設計
- 組織: セキュリティ成熟度評価の基準
OWASPの関連プロジェクト
OWASP Top 10 以外にも、特定領域に特化したリストが公開されています:
| プロジェクト | 対象 |
|---|---|
| OWASP API Security Top 10 | RESTful API・GraphQL |
| OWASP LLM Top 10 | 大規模言語モデル(LLM)アプリケーション |
| OWASP Mobile Top 10 | iOS・Androidアプリ |
| OWASP SAMM | ソフトウェアセキュリティ成熟度モデル |
OWASP Top 10 2025 で新規追加されたカテゴリはどれですか?(2つ選択の場合、最も重要な1つを答えてください)
OWASP Top 10 2025 で2位に大幅上昇したカテゴリはどれですか?