Skip to content

Commit

Permalink
CVE-2023-4727 Fix token authentication bypass vulnerability
Browse files Browse the repository at this point in the history
Previously the LDAPSecurityDomainSessionTable.sessionExists()
and getStringValue() were using user-provided session ID as
is in an LDAP filter which could be exploited to bypass token
authentication.

To fix the problem the code has been modified to escape all
special characters in the session ID before using it in the
LDAP filter.

Resolves: CVE-2023-4727
  • Loading branch information
fmarco76 committed Jun 14, 2024
1 parent 14f7bbe commit 1825278
Showing 1 changed file with 11 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
import com.netscape.cmscore.ldapconn.LDAPConfig;
import com.netscape.cmscore.ldapconn.LdapBoundConnFactory;
import com.netscape.cmscore.ldapconn.PKISocketConfig;
import com.netscape.cmsutil.ldap.LDAPUtil;

import netscape.ldap.LDAPAttribute;
import netscape.ldap.LDAPAttributeSet;
Expand Down Expand Up @@ -179,7 +180,11 @@ public boolean sessionExists(String sessionId) throws Exception {
try {
String basedn = ldapConfig.getBaseDN();
String sessionsdn = "ou=sessions,ou=Security Domain," + basedn;
String filter = "(cn=" + sessionId + ")";

// CVE-2023-4727
// escape session ID in LDAP search filter
String filter = "(cn=" + LDAPUtil.escapeFilter(sessionId) + ")";

String[] attrs = { "cn" };

conn = mLdapConnFactory.getConn();
Expand Down Expand Up @@ -262,7 +267,11 @@ private String getStringValue(String sessionId, String attr) throws Exception {
try {
String basedn = ldapConfig.getBaseDN();
String sessionsdn = "ou=sessions,ou=Security Domain," + basedn;
String filter = "(cn=" + sessionId + ")";

// CVE-2023-4727
// escape session ID in LDAP search filter
String filter = "(cn=" + LDAPUtil.escapeFilter(sessionId) + ")";

String[] attrs = { attr };

conn = mLdapConnFactory.getConn();
Expand Down

0 comments on commit 1825278

Please sign in to comment.