コンテンツにスキップ

Server Side Inclusion

サーバーサイドインクルード(SSI)インジェクション

説明

サーバーサイドインクルード(SSI)インジェクションの脆弱性は、アプリケーションがユーザーが制御可能なデータをレスポンスに組み込み、その後サーバーサイドインクルードディレクティブとして解析される場合に発生します。提供されたユーザー入力が厳密に検証されない場合、悪意のあるアクターがディレクティブを操作または挿入して悪意のあるコードを実行する可能性があります。

SSIインジェクションの脆弱性を悪用すると、多くの場合、JavaScriptなどの任意のコンテンツをアプリケーションのレスポンスに挿入でき、クロスサイトスクリプティング(XSS)と同様のリスクが生じます。サーバーの設定によっては、この脆弱性により、保護されたファイルへのアクセスや、サーバー上での任意のシステムコマンドの実行が可能になる場合もあります。

SSIインジェクションは、POSTフォーム、HTTPヘッダー、Cookieなど、複数のインジェクションポイントを持つ可能性があります。

  • コード実行:
GET / HTTP/1.1
Host: localhost
Referer: <!--#exec cmd="/bin/ls"-->
  • ファイルインクルード:
POST /contact HTTP/1.1
Host: localhost

body=<!--#include virtual="/proc/version"-->

推奨事項

サーバーサイドインクルードインジェクションの脆弱性のリスクを軽減するには、以下の推奨事項を検討してください。

  • SSIを無効にする:必要ない場合は、SSIを無効にすることがSSIインジェクションのリスクを軽減するための確実な推奨事項です。SSIを限られた数のページに制限することでも、一部のリスクを軽減できます。

  • 入力の検証とサニタイズ:ユーザーが提供した入力(特に<>のようなHTML特殊文字)を、SSI実行権限を持つページに渡す前にサニタイズおよび/またはエンコードします。

  • suEXECを使用する:suEXECを使用して、SSIディレクティブを実行するユーザーの権限を制限します。

<!--#if expr="$user_input =~ /^[a-zA-Z0-9_\-]+$/i" -->
   <!--#include virtual="/web/$user_input" -->
<!--#else -->
   Invalid input!
<!--#endif -->

リンク

標準

  • GDPR:
    • ART_5
    • ART_32
  • PCI_STANDARDS:
    • REQ_6_2
    • REQ_6_3
    • REQ_11_3
  • SOC2_CONTROLS:
    • CC_2_1
    • CC_3_4
    • CC_4_1
    • CC_7_1
    • CC_7_2
    • CC_7_4
    • CC_7_5
  • HIPAA_CONTROLS:
    • SECURITY212
    • SECURITY213
    • SECURITY255