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 行将安全身份验证方法设置为“简单”。