ssecutils
Security / Browser-native guide

OWASP Top 10 入門

Webアプリの代表的なリスクを、A01からA10まで実装者が押さえるべき観点で読み解きます。

9Zero tracking reading surface

OWASP Top 10 とは

OWASP(Open Worldwide Application Security Project)は Web アプリケーションセキュリティのオープンコミュニティで、ボランティアによって運営されています。彼らが数年に一度公開する Top 10 は、世界中の脆弱性データを集計して「実務で本当に多発している Web リスクの上位10カテゴリ」を示したもので、事実上の業界標準として ISO 27001 や PCI DSS の参照資料にも組み込まれています。

本記事では、最新版である OWASP Top 10 - 2021 の10項目を初学者向けに俯瞰します(次版は2025〜2026年中に出る見込み)。各項目には「何が問題か」「典型例」「対策の要点」を1セクションずつ。

A01: Broken Access Control(アクセス制御の不備)

前回(2017)から1位に躍進した、現在最も多発しているカテゴリです。「ログインしているユーザー X が、ユーザー Y のデータを閲覧/編集できてしまう」が典型。

  • URL の /users/123/profile123456 に変えると他人のページが見える(IDOR)
  • 管理画面 /admin がリンク無いだけで認証チェックされていない
  • API で「自分のデータだけ返す」ロジックを忘れて全件返してしまう

対策の要点: 「URL に出てる ID は信用しない」が鉄則。すべての操作で「セッション上のユーザーがそのリソースに権限を持つか」をサーバ側で必ず確認。デフォルト拒否、ホワイトリスト方式、ログ監査。

A02: Cryptographic Failures(暗号化の失敗)

2017 年版では「機密データの露出」だったカテゴリ。原因が「適切な暗号化が無い/弱い」に絞られ改名。

  • ログインページが HTTP(盗聴可能)
  • パスワードを MD5 や SHA-1 で生のハッシュ保存(GPU で即時総当たり)
  • 古い TLS 1.0 / 1.1 で運用
  • 独自暗号アルゴリズム(ほぼ確実に弱い)

対策の要点: 通信は TLS 1.2 以上必須 + HSTS。パスワード保存は bcrypt / scrypt / Argon2。一般データ暗号化は AES-GCM 等の認証付き暗号。「自作するな、標準ライブラリを使え」。

関連: パスワード強度はどう決まるか · HTTPS と TLS の仕組み

A03: Injection(インジェクション)

SQL インジェクション、コマンドインジェクション、LDAP インジェクション、そして XSS もこのカテゴリに統合されました。共通点は「ユーザー入力を、別の言語の構文として解釈する場所にそのまま流し込んだ」こと。

  • SQLi: "SELECT * FROM users WHERE id = " + req.query.id
  • OS コマンド: exec("ping " + req.query.host)
  • XSS: html = "<p>" + userInput + "</p>"

対策の要点: パラメータ化クエリ(プリペアドステートメント)出力時エスケープ。「文字列連結で組み立てない」が原則。ORM、テンプレートエンジンを通すこと。

関連: XSS の基礎と防御

A04: Insecure Design(セキュアでない設計)

2021 年版で新設。コーディングミスではなく 設計段階で抜けている脅威を扱います。

  • パスワードリセットを「秘密の質問」だけで通す(Q&A は公開情報になりがち)
  • レート制限なしで「年齢確認」だけで子供アカウント作成可
  • 無料試用を電話番号で識別 → SMS の使い捨て番号で無限取得可

対策の要点: 設計レビューに 脅威モデリング(STRIDE 等)を組み込む。ビジネス要件と一緒に「悪用シナリオ」も列挙する。実装前に「この機能を悪用されたら何が起きるか」を必ず議論。

A05: Security Misconfiguration(セキュリティ設定ミス)

コードは正しいのに、サーバ・フレームワーク・クラウドの設定で穴を開けてしまうカテゴリ。

  • 本番にデバッグモードが有効でスタックトレースが出ている
  • S3 バケットがパブリック公開
  • 不要なサービス(管理ポート、デフォルト管理者アカウント)が開いたまま
  • CSP / HSTS / X-Frame-Options 等のセキュリティヘッダ未設定

対策の要点: 「最小権限」「不要なものは無効化」。Infrastructure as Code(Terraform 等)で設定を版管理し、定期スキャンで逸脱検出。本サイト自身も securityheaders.com で A 評価を維持しています。

A06: Vulnerable and Outdated Components(古い・脆弱なコンポーネント)

Apache Struts の脆弱性で Equifax が 1.5 億人分の個人情報を流出させた事件が代表例。使っているライブラリ・OS・フレームワークが脆弱なまま放置されているケース。

対策の要点: SBOM(依存リスト)の管理自動アップデート。GitHub なら Dependabot、Node なら npm audit、Python なら safety、コンテナイメージは Trivy / Snyk でスキャン。本サイトも Dependabot + npm audit を CI に組み込み済みです。

A07: Identification and Authentication Failures(識別・認証の失敗)

旧「Broken Authentication」。ログイン・セッション管理周りの脆弱性全般。

  • クレデンシャルスタッフィング(漏洩パスワード辞書での総当たり)に無防備
  • セッション ID が予測可能 / URL に出ている
  • パスワードリセットで脆弱なトークン
  • 多要素認証なし

対策の要点: 強いパスワードポリシー + 漏洩パスワードチェック(HIBP API)レート制限・アカウントロックTOTP / FIDO2 (Passkey) による MFA、セッション ID は cryptographically random。

A08: Software and Data Integrity Failures(整合性の検証不足)

2021 年版で新設。サプライチェーン攻撃と CI/CD パイプラインへの注目で追加されました。

  • npm パッケージを署名検証なしで取得(依存パッケージ乗っ取りで RCE)
  • CDN から JS を読み込むが SRI(Subresource Integrity)未設定で改ざん検出不可
  • 署名なしオートアップデート(SolarWinds 事件型)
  • シリアライズデータの逆シリアライズで任意コード実行

対策の要点: ライブラリは lockfile + ハッシュ検証、外部スクリプトは SRI、デプロイは署名済みアーティファクト。逆シリアライズは信頼できる入力のみ。

A09: Security Logging and Monitoring Failures(ロギング・監視の不足)

実際に侵害が起きても気付けない、調査できない問題。検知までの平均日数(MTTD)は業界平均で 200 日以上と言われています。

  • ログイン失敗・権限拒否・入力バリデーションエラーが記録されていない
  • ログが平文で書かれパスワードまで含む
  • アラートがそもそも設定されていない

対策の要点: 認証・権限・入力検証・サーバ側エラーは必ず記録。中央集約型のログ基盤(ELK / CloudWatch / Datadog)と異常検知。インシデント対応プレイブックを事前に用意。

A10: Server-Side Request Forgery(SSRF)

2021 年版で新設。「サーバ側で URL を取得しに行く機能」を悪用される攻撃。クラウド時代の代名詞的な脆弱性です。

// プレビュー機能で任意URLをfetch
const url = req.body.url
const html = await fetch(url).then(r => r.text())

攻撃者が http://169.254.169.254/latest/meta-data/iam/security-credentials/(AWS インスタンスメタデータ)を渡すと、サーバは内部ネットワークから一時クレデンシャルを取得して返してしまいます(Capital One 事件型)。

対策の要点: URL ホワイトリスト内部ネットワーク・IMDS への接続を ファイアウォールで遮断、IMDSv2 強制、HTTP リダイレクト追跡しない / 追跡先も検証。

使い方: チェックリストとして

OWASP Top 10 は「これだけ守れば安全」というリストではない点に注意。あくまで「最頻出のカテゴリ」であって、業界・サービス特性によっては他のリスクが上回ることも普通にあります。とはいえ、新規プロジェクトの設計レビューや既存システムの自己診断には最良の出発点

実務での使い方の例:

  1. 新機能の設計時、10項目をチェックリストで通す
  2. 外部監査・ペネトレ依頼前のセルフチェック
  3. セキュリティ研修の構成テンプレ
  4. SOC 2 / ISO 27001 等のコンプライアンス文書の参照

おわりに

OWASP Top 10 はWebセキュリティの共通言語。エンジニア・PM・経営層が同じ用語で会話するために整備されているとも言えます。各項目を深掘りした記事は本サイトの Learn に順次追加していくので、関連記事リンクから掘り下げてみてください。

参考: OWASP Top 10 公式(owasp.org)