V13 APIおよびWebサービス検証の要件
Last-modified: 2020-08-10 (月) 14:39:40
Top/V13 APIおよびWebサービス検証の要件
管理目標 †
信頼されたサービスレイヤAPI(一般的にJSONやXML、またはGraphQL)を使用する検証対象アプリケーションが以下を備えていることを確認します。
- すべてのWebサービスで適切な認証、セッション管理および認可
- 低信頼レベルから高信頼レベルに移行する全てのパラメータの入力正当性確認
- クラウドやサーバレスAPIを含む全てのAPIの種類に対して有効なセキュリティ管理策の実施 この章を他の全ての章と組み合わせて同じレベルで読んでください。 認証やAPIセッション管理の課題については重複しません。
V13.1 一般的なWebサービスセキュリティの検証要件 †
項番 | 説明 | L1 | L2 | L3 | CWE No | タイトル | 概要 |
13.1.1 | SSRF 攻撃や RFI 攻撃で使用される可能性があるような、異なる URI またはファイルのパーサを悪用する攻撃を回避するために、すべてのアプリケーションコンポーネントが同じエンコードおよびパーサを使用する。 | ✓ | ✓ | ✓ | 116 | 出力の不適切なエンコードまたはエスケープ | 不適切なエンコーディングまたは出力のエスケープソフトウェアは、別のコンポーネントと通信するために構造化されたメッセージを準備しますが、データのエンコーディングまたはエスケープが欠落しているか、正しく行われていません。その結果、メッセージの意図した構造が保持されません。 |
13.1.2 | Web サービスアプリケーション内の管理機能にアクセスできるのは、アクセスが許可された 管理者のみとなっている。 | ✓ | ✓ | ✓ | 419 | 保護されていないプライマリチャネル | ソフトウェアは、管理または制限された機能のためにプライマリチャネルを使用していますが、チャネルが適切に保護されていません。 |
13.1.3 | API URL が API Key やセッショントークンなどの機密情報を公開していない。 | ✓ | ✓ | ✓ | 598 | 機密性の高いクエリ文字列を持つ GET | リクエストメソッドの使用 ウェブアプリケーションは、HTTP GET メソッドを使用してリクエストを処理し、そのリクエストのクエリ文字列に機密性の高い情報を含みます。 |
13.1.4 | 認可の判定が、URI とリソースレベルの両方で行われている(URI ではコントローラまたはルータで実施するプログラム型または宣言型のセキュリティによって、リソースレベルではモデルベースの許可によって実施される)。 | ✓ | ✓ | 285 | 不適切な認証 | アクターがリソースにアクセスしたり、アクションを実行しようとしたときに、ソフトウェアが認証チェックを実行しないか、または正しく実行されません。 | |
13.1.5 | 予期しないまたは欠落している Content Type を含むリクエストが、適切なヘッダ(HTTPレスポンスステータス 406 Unacceptableまたは 415 Unsupported Media Type)でリジェクトされる。 | ✓ | ✓ | 434 | 解釈の衝突 | 製品 A が製品 B とは異なる入力やステップを処理するため、A は B の状態に対する認識に基づいて誤ったアクションを実行してしまいます。 |
V13.2 RESTful Webサービスの検証要件 †
JSON schemaのバリデーションの標準化のドラフト段階にあります(リファレンスを参照)。SOAP WebサービスのベストプラクティスであるJSON schemaバリデーションの使用を検討するときは、JSON schemaバリデーションと組み合わせ以下の追加のデータ検証の戦略を使用することを検討してください。
- 不足している要素や余分な要素があるかなど、JSONオブジェクトの解析検証
- データタイプ、データ形式、長さなどの標準入力検証メソッドを使用したJSONオブジェクト値のバリデーション
- そして、正式なJSON schemaのバリデーション
JSON schemaのバリデーション標準が正式化されると、ASVSはこの領域でのアドバイスを更新します。使用中のJSON schemaバリデーションのライブラリを注意深く監視します。標準が正式になり、バグがリファレンス実装から解決されるまで、定期的に更新する必要があります。
項番 | 説明 | L1 | L2 | L3 | CWE No | タイトル | 概要 |
13.2.1 | 保護された API またはリソースに対して通常ユーザが DELETE または PUT を使用するのを防ぐなど、有効化されている RESTful HTTP メソッドが、ユーザまたはアクションにとって妥当となっている。 | ✓ | ✓ | ✓ | 650 | サーバー側でのHTTPパーミッションメソッドの信頼性 | サーバーには、HTTP GET を使用してアクセスされた URI は、関連するリソースの状態変化を引き起こさないことを前提とした保護メカニズムが含まれています。これにより、攻撃者は意図したアクセス制限を迂回して、リソースの変更や削除攻撃を行うことができるかもしれません |
13.2.2 | JSON スキーマバリデーションが設定され、入力を受け付ける前に確認されている。 | ✓ | ✓ | ✓ | 20 | 不適切な入力検証 | 製品は入力またはデータを受け取りますが、入力がデータを安全かつ正しく処理するために必要なプロパティを持っていることを検証しないか、誤って検証します。 |
13.2.3 | Cookie を使用する RESTful Webサービスが、次のうち少なくとも1つ以上を使って、クロスサイトリクエストフォージェリから保護されている。三重または二重送信クッキーパターン(参考文献)、CSRFノンス、ORIGINリクエストヘッダのチェック。 | ✓ | ✓ | ✓ | 352 | クロスサイトリクエストフォージェリ(CSRF) | ウェブアプリケーションは、リクエストを送信したユーザーが意図的に提供した形のある有効で一貫性のあるリクエストであるかどうかを十分に検証できないか、あるいは検証できない。 |
13.2.4 | 特に API が認証不要な場合、過剰な呼び出しから保護するための耐自動化管理策が REST サービスにある。 | ✓ | ✓ | 779 | 不十分なロギング | セキュリティ上重要なイベントが発生した場合、ソフトウェアはイベントを記録しないか、ログを記録する際にイベントに関する重要な詳細を省略します。 | |
13.2.5 | 受信したContent-Type が application/xml や application/JSONなどの予期されるものであることを、RESTサービスが明示的に検査している。 | ✓ | ✓ | 436 | 例外がスローされたときの不適切なクリーンアップ | 例外がスローされたときに、製品がその状態をクリーンアップしなかったり、不適切にクリーンアップしたりしたため、予期しない状態や制御フローが発生します。 | |
13.2.6 | メッセージヘッダとペイロードが信頼でき、転送中に変更されていない。機密性、完全性の保護のため、転送に強力な暗号化(TLS のみ)を要求することは、多くの場合これで十分です。メッセージごとのデジタル署名は、高度なセキュリティを必要とするアプリケーションに対して、転送保護に加えて追加の保証を提供することができますが、複雑さやリスクをもたらす可能性があります。 | ✓ | ✓ | 345 | データの真正性の検証が不十分 | ソフトウェアがデータの起源や真正性を十分に検証しておらず、無効なデータを受け入れる原因となっています。 |
V13.3 SOAP Webサービスの検証要件 †
項番 | 説明 | L1 | L2 | L3 | CWE No | タイトル | 概要 |
13.3.1 | 適切に形成された XML 文書を確保するために、XSD スキーマバリデーションに続いて、そのデータの処理が行われる前に各入力フィールドのバリデーションが実施されている。 | ✓ | ✓ | ✓ | 20 | 不適切な入力検証 | 製品は入力またはデータを受け取りますが、入力がデータを安全かつ正しく処理するために必要なプロパティを持っていることを検証しないか、誤って検証します。 |
13.3.2 | クライアントとサービス間の信頼できる転送を確保するために、メッセージペイロードが WS-Security を使用して署名されている。 | ✓ | ✓ | 345 | データの真正性の検証が不十分 | ソフトウェアがデータの起源や真正性を十分に検証しておらず、無効なデータを受け入れる原因となっています。 |
注:DTDに対するXXE攻撃の問題があるため、DTD検証は使用しないでください。また、V14構成で設定された要件に従って、フレームワークDTD評価を無効にしてください。
V13.4 GraphQLや他のWebサービスデータレイヤのセキュリティ要件 †
項番 | 説明 | L1 | L2 | L3 | CWE No | タイトル | 概要 |
13.4.1 | 高コストで、ネストされたクエリの結果として GraphQL またはデータレイヤエクスプレッションがサービス運用妨害(DoS)となることを防止するために、クエリホワイトリストまたは、Depth 制限と量の制限の組み合わせを使用している。より高度なシナリオでは、クエリコスト分析を使用する必要があります。 | ✓ | ✓ | 770 | 制限やスロットルのないリソースの割り当て | ソフトウェアは、アクターのために意図されたセキュリティポリシーに反して、割り当て可能なリソースのサイズや数に制限を課すことなく、アクターに代わって再利用可能なリソースまたはリソースのグループを割り当てます。 | |
13.4.2 | GraphQL または他のデータレイヤの認可ロジックが、GraphQL レイヤではなくビジネスロジックレイヤに実装されている。 | ✓ | ✓ | 285 | 不適切な認証 | アクターがリソースにアクセスしたり、アクションを実行しようとしたときに、ソフトウェアが認証チェックを実行しないか、または正しく実行されません。 |
参考情報 †
詳しくは以下の情報を参照してください。
- OWASP Serverless Top 10 : https://www.owasp.org/images/5/5c/OWASP-Top-10-Serverless-Interpretation-en.pdf
- OWASP Serverless Project : https://www.owasp.org/index.php/OWASP_Serverless_Top_10_Project
- OWASP Testing Guide 4.0: Configuration and Deployment Management Testing : https://www.owasp.org/index.php/Testing_for_configuration_management
- OWASP Cross-Site Request Forgery cheat sheet : https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Cross-Site_Request_Forgery_Prevention_Cheat_Sheet.md#triple-submit-cookie
- OWASP XML External Entity Prevention Cheat Sheet - General Guidance* JSON Web Tokens (and Signing) : https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/XML_External_Entity_Prevention_Cheat_Sheet.md#general-guidance
- REST Security Cheat Sheet : https://www.owasp.org/index.php/REST_Security_Cheat_Sheet
- JSON Schema : https://json-schema.org/specification.html
- XML DTD Entity Attacks : https://www.vsecurity.com//download/publications/XMLDTDEntityAttacks.pdf
- Orange Tsai - A new era of SSRF Exploiting URL Parser In Trending Programming Languages : https://www.blackhat.com/docs/us-17/thursday/us-17-Tsai-A-New-Era-Of-SSRF-Exploiting-URL-Parser-In-Trending-Programming-Languages.pdf