SV.LDAP.ANON

不正确的身份验证

SV.LDAP.ANON 检查器会检测在连接到 LDAP 服务器时是否使用匿名 LDAP 绑定。

漏洞与风险

此弱点可导致资源或功能暴露给意外的参与者,这可能为攻击者提供敏感信息或使攻击者能够执行任意代码。匿名绑定是一项 LDAP 服务器功能。匿名绑定让客户端能够在不登录的情况下连接和搜索目录(绑定和搜索),因为不需要 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 行报告了 SV.LDAP.ANON 缺陷,这表示“使用具有匿名绑定的 LDAP 身份验证有助于在不使用密码的情况下成功进行身份验证”。

修正代码示例 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");

在此修正代码示例中,Klocwork 不再报告缺陷,因为在第 5 行将安全身份验证方法设置为“简单”。

漏洞代码示例 2

复制
   DirContext ctx = new InitialDirContext(env);
   ctx.addToEnvironment(Context.SECURITY_AUTHENTICATION, "none")
         // another way of using anonymous authentication
   ctx.close();

Klocwork 在第 2 行报告了 SV.LDAP.ANON 缺陷,这表示“使用具有匿名绑定的 LDAP 身份验证有助于在不使用密码的情况下成功进行身份验证”。

修正代码示例 2

复制
   DirContext ctx = new InitialDirContext(env);
   ctx.addToEnvironment(Context.SECURITY_AUTHENTICATION, "simple");
   ctx.close();

在此修正代码示例中,Klocwork 不再报告缺陷,因为在第 2 行将安全身份验证方法设置为“简单”。

安全培训

应用程序安全培训材料由 Secure Code Warrior 提供。