スキャン結果の詳細

このページでは、Cloud Security Scanner のスキャン結果の詳細について説明します。

脆弱性クラス

Cloud Security Scanner では、XSS や Flash のインジェクション、混合コンテンツ、クリアテキストのパスワード、安全でない JavaScript ライブラリの使用という 4 つのクラスの脆弱性が検出されます。こうした脆弱性が検出された場合は、結果がハイライト表示され、詳しい情報を確認できます。

findingType 文字列値

以下の表は、Cloud Security Scanner の Finding リソースfindingType フィールド内で有効な文字列値を示しています。Finding リソースは ScanRun で特定された脆弱性インスタンスを表します。findingType フィールドで脆弱性の種類を確認できます。

Google Cloud Platform によって脆弱性が追加されると、新しい findingType 値が導入されます。このような更新は、既存の API を更新しなくても発生する可能性があります。このページは、新しい findingType 値が導入されるたびに更新されます。有効な値のリストの変更は常にリリースノート ページに記載されます。

findingType 文字列 説明
MIXED_CONTENT HTTPS で提供されたページに HTTP 経由のリソースも読み込まれました。中間者攻撃によって HTTP リソースが改ざんされ、リソースを読み込んでいるウェブサイトへの完全なアクセス権が取得されたり、ユーザーが実行したアクションがモニタリングされたりする可能性があります。
OUTDATED_LIBRARY 組み込みのライブラリのバージョンに、セキュリティ上の問題が含まれていることが知られています。Cloud Security Scanner は使用中のライブラリのバージョンを、脆弱性があるライブラリの既知のリストと照合します。バージョンの検出に失敗した場合やライブラリに手動でパッチを適用したことがある場合は、誤検出の可能性もあります。
ROSETTA_FLASH このタイプの脆弱性は、たとえば JSONP を使用するリクエストで、リクエスト パラメータの値がレスポンスの冒頭に反映される場合に生じます。特定の状況では、攻撃者は脆弱なパラメータに英数字のみの Flash ファイルを入力してブラウザにその Flash ファイルを実行させ、Flash ファイルが脆弱なサーバーから送信されているかのように見せかける可能性があります。
XSS_CALLBACK JavaScript の callback でクロスサイト スクリプティング(XSS)バグが検出されました。XSS について詳しくは、https://www.google.com/about/appsecurity/learning/xss/ をご覧ください。
XSS_ERROR JavaScript の破損によるクロスサイト スクリプティング(XSS)バグの可能性があります。状況によっては、ブラウザでテスト文字列が解析される前に、テスト対象アプリケーションがテスト文字列を変更してしまうこともあります。この変更されたテスト文字列をブラウザが実行しようとすると、ブラウザの動作が中断し、JavaScript 実行エラーがスローされて、インジェクションの問題が発生します。ただし、これは必ずしも悪用可能とは限りません。テスト文字列の変更を回避できるかどうかを確認し、この問題が実際に XSS の脆弱性となっていることを確認するには、手動で確認する必要があります。XSS について詳しくは、https://www.google.com/about/appsecurity/learning/xss/ をご覧ください。
CLEAR_TEXT_PASSWORD アプリケーションがパスワード フィールドをクリアテキスト形式で送信している可能性があります。攻撃者によってネットワーク トラフィックが傍受されて、パスワード フィールドが盗聴される可能性があります。
INVALID_CONTENT_TYPE アプリケーションは、無効なコンテンツ タイプとともに、または 'X-Content-Type-Options: nosniff' ヘッダーなしで機密コンテンツを返します。
XSS_ANGULAR_CALLBACK ユーザー指定の文字列が Angular によって補間されている場合は、AngularJS モジュールのクロスサイト スクリプティング(XSS)の脆弱性が発生する可能性があります。
INVALID_HEADER 不正な形式または無効な値のヘッダー。
MISSPELLED_SECURITY_HEADER_NAME セキュリティ ヘッダー名のスペルミス。
MISMATCHING_SECURITY_HEADER_VALUES 重複したセキュリティ ヘッダーの一致しない値。
ACCESSIBLE_GIT_REPOSITORY アクセス可能な Git リポジトリがスキャンによって見つかりました。
ACCESSIBLE_SVN_REPOSITORY アクセス可能な SVN リポジトリがスキャンによって見つかりました。

クロスサイト スクリプティング

Cloud Security Scanner のクロスサイト スクリプト(XSS)インジェクション テストでは、悪意のないテスト文字列をユーザーによる編集が可能な項目に挿入し、さまざまなユーザー アクションを実行することで、インジェクション攻撃をシミュレートします。このテストを実行すると、カスタムの検知機能がブラウザと DOM を監視して、インジェクションの成否を判断し、悪用の危険性を評価します。

テスト文字列内に含まれている JavaScript が正常に実行された場合は、Chrome デバッガが起動します。

以下は、脆弱性があるパラメータ q= 内の XSS アラートの例です。

テスト文字列を実行できたため、このページに JavaScript を挿入して実行できることがわかりました。この問題を攻撃者に知られた場合、攻撃者は悪意のあるリンクをクリックしたユーザー(被害者)として、任意の JavaScript を実行できるようになります。

状況によっては、ブラウザでテスト文字列が解析される前に、テスト対象アプリケーションによってテスト文字列が変更されることがあります。たとえば、入力内容の検証や項目のサイズ制限が行われる可能性があります。この変更されたテスト文字列をブラウザが実行しようとすると、ブラウザの動作が中断し、JavaScript 実行エラーがスローされます。これはインジェクションの問題が発生したことを示します。ただし、これは必ずしも悪用可能とは限りません。テスト文字列の変更を回避できるかどうかを調べ、この問題が実際に XSS の脆弱性となっていることを確認するには、手動で検証する必要があります。

この問題を修正するにはさまざまな方法があります。すべての出力をエスケープし、状況に応じた自動エスケープをサポートするテンプレート生成システムを使用することをおすすめします。

Angular クロスサイト スクリプティング

ユーザー指定の文字列が Angular によって補間されている場合は、AngularJS モジュールの XSS 脆弱性が発生する可能性があります。ユーザー指定の値を AngularJS の補間に挿入すると、次のような攻撃を招くおそれがあります。

  • 攻撃者が、ブラウザによってレンダリングされたページに任意のコードを挿入する。
  • 攻撃者が、攻撃対象のブラウザに代わってページの送信元でアクションを実行する。

以下は、Angular XSS のインジェクションの問題を示す破損アラートの例です。

この潜在的な脆弱性を再現するには、スキャンを実行した後に、Google Cloud Platform Console で再現 URL のリンクを使用してください。このリンクはアラート ダイアログを直接開くか、文字列「XSSDETECTED」を挿入して、攻撃でコードを実行できることを証明します。挿入の場合は、ブラウザのデベロッパー ツールを開いて「XSSDETECTED」を検索し、挿入されている正確な位置を特定できます。

Flash インジェクション

レスポンスの先頭に影響を与えるパラメータが検出される場合があります。これを Rosetta Flash とも呼びます。攻撃者は、ブラウザでレスポンスを実行するときに、そのレスポンスを脆弱性があるウェブ アプリケーションから提供された Flash ファイルであるかのように見せかける場合があります。

以下は、callback= パラメータ内の Flash インジェクション アラートの例です。

これを修正するには、HTTP レスポンスの先頭にユーザーが制御可能なデータを含めないようにします。

混合コンテンツ

Cloud Security Scanner は HTTP トラフィックをパッシブに監視し、JavaScript や CSS ファイルに対するリクエストが HTTPS ページのコンテキストでありながら HTTP 経由で実行された場合に報告します。

以下は、attribute_script という HTTPS ページ内の混合コンテンツ アラートの例です。このページには http://irrelevant.google.com からの HTTP リソースが含まれています。

これを修正するには、HTTP の相対リンクを使用します。たとえば、http://// に置き換えます。

古いライブラリ

アプリケーションに組み込まれているライブラリのバージョンの中にはセキュリティの問題が含まれていることが知られているものがあり、Cloud Security Scanner でそのことを検出できる場合があります。これはシグネチャベースのスキャナと呼ばれるもので、使用中のライブラリのバージョンを特定し、そのライブラリを脆弱性があるライブラリの既知のリストと照合します。バージョンの検出に失敗した場合やライブラリに手動でパッチを適用したことがある場合は、誤検出の可能性もあります。

以下は、jquery-1.8.1.js の使用による古いライブラリ アラートの例です。

これを修正するには、組み込みのライブラリを既知の安全なバージョンに更新します。

クリアテキストのパスワード

Cloud Security Scanner により、アプリケーションがパスワード フィールドをクリアテキスト形式で送信している可能性があると報告される場合があります。

クライアントとサーバー間で渡される機密情報を保護するには、次の予防措置を講じます。

  • TLS 証明書または SSL 証明書を使用します。
  • パスワード フィールドを含むページでは常に HTTPS を使用します。
  • フォーム アクションの属性では常に HTTPS URL を指定します。

無効な Content-Type ヘッダー

レスポンスの Content-Type HTTP ヘッダーと読み込まれたリソースの不一致が Cloud Security Scanner によって検出される場合があります。

以下は、無効な Content-Type ヘッダーに関するアラートの例です。

この脆弱性を修正するには、以下を確認してください。

  • JSON レスポンスが Content-Type ヘッダー application/json で返される
  • その他の機密情報を含むレスポンスが適切な MIME タイプで返される
  • コンテンツ提供に HTTP ヘッダー X-Content-Type-Options: nosniff が使用されている

無効なセキュリティ ヘッダー

Cloud Security Scanner がセキュリティ ヘッダー内で構文エラーを検出することがあります。その場合、このヘッダーはブラウザで無視されます。

以下は、無効なセキュリティ ヘッダーが見つかった例です。

Referrer-Policy ヘッダー

有効な Referrer-Policy ヘッダーには、空の文字列、no-referrerno-referrer-when-downgradesame-originoriginstrict-originorigin-when-cross-originstrict-origin-when-cross-originunsafe-url のいずれかの値が含まれています。

X-Frame-Options ヘッダー

有効な X-Frame-Options ヘッダーに含めることができる値は、DENY(すべてのフレーム処理を無効化)、SAMEORIGIN(最上位の URL が同じ発信元の場合にフレーム処理を許可)、または ALLOW-FROM URL に限られます。ALLOW-FROM URL は Chrome ではサポートされていません。また、複数の X-Frame-Options は許可されないことにも注意してください。

X-Content-Type-Options ヘッダー

有効な X-Content-Type-Options ヘッダーに含めることができる値は nosniff のみです。

X-XSS-Protection ヘッダー

有効な X-XSS-Protection ヘッダーは 0(「無効化」)または 1(「有効化」)で始まっている必要があります。この条件を満たしていて、かつ、保護を有効化する場合にのみ、オプションとして mode=block(XSS をフィルタリングする代わりに空白のページを表示)または report=URLURL にレポートを送信)のいずれか、あるいは両方を追加できます。両方のオプションを追加する場合は、1; mode=block; report=URI のようにセミコロンで区切る必要があります。末尾にはセミコロンを追加しないでください。

セキュリティ ヘッダー名のスペルミス

Cloud Security Scanner によって、セキュリティ ヘッダー名のスペルミスが検出されることがあります。スペルミスがあるとそのセキュリティ ヘッダーは無効になるので、修正する必要があります。

以下は、スペルミスのあるセキュリティ ヘッダー名が見つかった例です。

この脆弱性を再現するには、ブラウザのデベロッパー ツールの [ネットワーク] タブでスペルミスをチェックしてください。

セキュリティ ヘッダー値の不一致

Cloud Security Scanner でレスポンスを調べた結果、重複しており、値が競合しているセキュリティ関連のレスポンス ヘッダーが見つかることがあります。セキュリティ関連の HTTP ヘッダーがレスポンスで 2 回宣言され、それらの値が一致しないと、動作を予測できないことがあります。

以下は、セキュリティ ヘッダーの値が一致していない例です。

この脆弱性を修正するには、これらの一致していないヘッダーのうち、いずれか 1 つのみを使用してください。

アクセス可能なリポジトリ

Cloud Security Scanner がアプリケーション内でアクセス可能な Git または SVN リポジトリを検出する場合があります。これによって構成やソースコードが漏洩するおそれがあります。

以下はアクセス可能な Git リポジトリが検出された例です。

この脆弱性を再現するには、検出結果レポートの再生用 URL をクリックしてください。

問題の確認

Cloud Security Scanner から問題が報告された場合は、問題の箇所を特定する必要があります。この確認には、XSS 保護機能を無効にしたブラウザを使用します。Chrome の独立したテスト インスタンスを使用することをおすすめしますが、XSS 保護機能を無効にできる最近のブラウザを使用できます。

Chrome で XSS 保護機能を無効にするには:

  • Linux を使用している場合は、次のように Linux の Chrome コマンドを入力します。

    chrome --user-data-dir=~/.chrometest --allow-running-insecure-content \ --disable-xss-auditor --disable-sync --bwsi

  • Mac OSX を使用している場合は、次のように Chrome コマンドを入力します。

    open -n /Applications/Google\ Chrome.app/ --args --disable-xss-auditor \ --user-data-dir=/tmp/xssrepro

Content Security Policy(CSP)を適用していると、JavaScript コードの実行が阻止される場合があります。このため、XSS の再現が難しくなることがあります。この問題が発生した場合は、ブラウザのログコンソールを開いて、発生した CSP 違反の詳細を確認してください。

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

Cloud Security Scanner のドキュメント