SV.IL.DEV
このエラーは、アプリケーションが設計情報をアプリケーションの Web インターフェイスに開示している場合に検出されます。
リリース 2023.2 の時点で、このチェッカーは Jakarta EE をサポートしています。
脆弱性とリスク
アプリケーションの実装に関する詳細を開示するということは、攻撃に利用可能な情報を攻撃者に与えることになり、セキュリティ上の問題があります。クラス名、ファイル名、パス名などの詳細を開示すると、新たな攻撃に利用可能な情報が攻撃者に漏れてしまいます。たとえば、メッセージにおけるパス情報を Web インターフェイスに開示すると、Web サーバーのディレクトリ階層の場所が明らかになる可能性があります。攻撃者はこの情報をパスインジェクション攻撃に利用できます。一般に、Web インターフェイスに開示する情報量は最小限にし、特に設計の詳細は開示しないようにする必要があります。
Klocwork セキュリティ脆弱性 (SV) チェッカーは、潜在的に危険なデータを生成する呼び出しを特定します。このような呼び出しは安全でないソースと考えられます。ユーザーは攻撃者になる可能性があり、ヒューマンエラーを取り込む可能性があるため、安全でないソースはユーザーが指定した任意のデータである可能性があります。
軽減と防止
設計情報の漏洩は、アプリケーションの Web インターフェイスに送信するメッセージから情報を除去することによって回避できます。このような情報は、アプリケーションの一般的なユーザーにとってはほとんど不要ですが、新たな攻撃に利用可能な情報として攻撃者に悪用される可能性があります。設計情報の開示は、Java の例外処理において一般的に行われています。例外情報は、プログラミング時に有用ですが、リリース後には危険を伴います。例外情報の表示や送信には十分に注意して、この種の情報がユーザーの目に触れないように徹底する必要があります。すべてのスタックトレースおよびデバッグ情報は、攻撃者が読み取ることができないサーバーログに適切に保存します。
例 1
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String name = req.getParameter("userName");
File file = new File(System.getProperty("web.root"), name + ".dat");
try {
FileOutputStream str = new FileOutputStream(file);
// ...
str.close();
} catch (IOException e) {
throw new ServletException("Cannot open file " + file + ":"+ e.getMessage());
}
}
SV.IL.DEV が 23 行目に対して報告されています。'name' は HTTP 要求パラメーターの値で初期化されるため、汚染される可能性があります (16 行目)。この値は、17 行目で 'file' の作成に使用されます。19 行目で例外がスローされた場合、'file' は ServletException にラップされるため、HTTP 要求パラメーターの値が Web インターフェイスに開示されます。設計情報の漏洩は、攻撃者に重要な攻撃のヒントを与える可能性があります。
外部参考資料
セキュリティトレーニング
Secure Code Warrior が提供しているアプリケーションセキュリティトレーニング教材。
拡張機能
このチェッカーは、Klocwork knowledge base (ナレッジベース) を利用して拡張できます。詳細については、Java 解析のチューニングを参照してください。