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 が提供しているアプリケーションセキュリティトレーニング教材。