SV.LDAP.ANON
不正確な認証
SV.LDAP.ANON チェッカーは、LDAP サーバーへの接続時に、匿名 LDAP バインディングが使用されているかどうかを検出します。
脆弱性とリスク
この脆弱性は、意図しないアクターへのリソースまたは機能の露出につながりかねず、攻撃者に機密情報が漏れたり、任意のコードを実行するチャンスを与えたりする可能性があります。匿名バインディングは LDAP サーバー機能の 1 つです。匿名バインディングでは binddn と bindpasswd を指定する必要がないため、クライアントはログインせずに接続してディレクトリを検索 (バインドして検索) できます。
脆弱コード例 1
コピー
// Set up the environment for creating the initial context
Hashtable<String, Object> env = new Hashtable<String, Object>();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, "ldap://localhost:389/o=JNDITutorial");
env.put(Context.SECURITY_AUTHENTICATION, "none"); // Using anonymous authentication
Klocwork は、6 行目で「匿名バインドによる LDAP 認証を使用すると、パスワードを使用しない認証を許す可能性がある」という SV.LDAP.ANON 欠陥を報告します。
修正コード例 1
コピー
// Set up the environment for creating the initial context
Hashtable<String, Object> env = new Hashtable<String, Object>();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, "ldap://localhost:389/o=JNDITutorial");
env.put(Context.SECURITY_AUTHENTICATION, "simple");
修正されたこの例では、5 行目でセキュリティ認証手法が "simple" に設定されているため、Klocwork はもはや欠陥を報告しません。
脆弱コード例 2
コピー
DirContext ctx = new InitialDirContext(env);
ctx.addToEnvironment(Context.SECURITY_AUTHENTICATION, "none");
// another way of using anonymous authentication
ctx.close();
Klocwork は、2 行目で「匿名バインドによる LDAP 認証を使用すると、パスワードを使用しない認証を引き起こす可能性がある」という SV.LDAP.ANON 欠陥を報告します。
修正コード例 2
コピー
DirContext ctx = new InitialDirContext(env);
ctx.addToEnvironment(Context.SECURITY_AUTHENTICATION, "simple");
ctx.close();
修正されたこの例では、2 行目でセキュリティ認証手法が "simple" に設定されているため、Klocwork はもはや欠陥を報告しません。
セキュリティトレーニング
Secure Code Warrior が提供しているアプリケーションセキュリティトレーニング教材。