SV.LDAP
このエラーは、未チェックのユーザー入力が LDAP クエリのフィルター部に使用される場合に検出されます。
軽減と防止
LDAP インジェクション攻撃は、アプリケーションの外部からのあらゆる入力 (ユーザー入力、ファイル入力、システムパラメーターなど) を検証することで防止できます。ユーザーデータをフィルタリングする最良の方法は、許可される文字のタイプのみを含めたブラックリスト正規表現を使用することです。LDAP クエリフィルターを可能な限り具体的にします。特殊な記号の使用を許可する必要がある場合には、それらを確実にエスケープします。
Klocwork セキュリティ脆弱性 (SV) チェッカーは、潜在的に危険なデータを生成する呼び出しを特定します。このような呼び出しは安全でないソースと考えられます。ユーザーは攻撃者になる可能性があり、ヒューマンエラーを取り込む可能性があるため、安全でないソースはユーザーが指定した任意のデータである可能性があります。
例 1
コピー
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
try {
String filter = req.getParameter("filter");
NamingEnumeration<SearchResult> namingEnumeration = context.search(name, filter, null);
while (namingEnumeration.hasMore()) {
SearchResult searchResult = namingEnumeration.next();
Attribute attribute = searchResult.getAttributes().get("");
if (ATTRIBUTE_TYPE.equals(attribute.getID())) {
resp.getOutputStream().println(attribute.get() + ";");
}
}
} catch (NamingException e) {
throw new ServletException("LDAP failure", e);
}
}
SV.LDAP が 27 行目に対して報告されています。26 行目で未検証のユーザー入力が 'filter' に保存され、これが LDAP フィルターとして使用されています。このフィルターは、任意のコンテンツを含んでいる可能性があり、サーバーにおける LDAP 挿入攻撃に対する脆弱性の原因となります。
外部参考資料
セキュリティトレーニング
Secure Code Warrior が提供しているアプリケーションセキュリティトレーニング教材。
拡張機能
このチェッカーは、Klocwork knowledge base (ナレッジベース) を利用して拡張できます。詳細については、Java 解析のチューニングを参照してください。