String Concatenation in LDAP Filters
Using string interpolation or concatenation to build LDAP filters with user input.
LDAP injection vulnerabilities occur when untrusted user input is concatenated into LDAP filters or distinguished names without proper escaping. Attackers can modify LDAP query logic to bypass authentication, access unauthorized directory entries, extract sensitive information, or escalate privileges within Active Directory or LDAP systems.
using System.DirectoryServices;
public User FindUser(string username)
{
// VULNERABLE: direct string interpolation in LDAP filter
string filter = $"(sAMAccountName={username})";
DirectorySearcher searcher = new DirectorySearcher();
searcher.Filter = filter;
SearchResult result = searcher.FindOne();
return result != null ? new User(result) : null;
}
// Attack: username = "*)(objectClass=*))(&(objectClass=void"
// Result: (sAMAccountName=*)(objectClass=*))(&(objectClass=void)
// This bypasses authentication by matching any userusing System.DirectoryServices;
using System.Web.Security.AntiXss;
using System.Text.RegularExpressions;
public User FindUser(string username)
{
// Validate input format
if (!IsValidUsername(username))
{
return null;
}
// SECURE: escape LDAP special characters
string escapedUsername = AntiXssEncoder.LdapFilterEncode(username);
string filter = $"(sAMAccountName={escapedUsername})";
DirectorySearcher searcher = new DirectorySearcher();
searcher.Filter = filter;
SearchResult result = searcher.FindOne();
return result != null ? new User(result) : null;
}
private bool IsValidUsername(string username)
{
// Only allow alphanumeric and specific characters
return !string.IsNullOrEmpty(username) &&
Regex.IsMatch(username, @"^[a-zA-Z0-9._-]+$") &&
username.Length <= 100;
}The vulnerable code uses string interpolation to build LDAP filters with user input, allowing attackers to inject malicious LDAP syntax. The secure version validates input format and uses AntiXssEncoder.LdapFilterEncode() to escape special LDAP characters before constructing the filter.
Using string interpolation or concatenation to build LDAP filters with user input.
Sourcery automatically identifies ldap injection in .net directory services and many other security issues in your codebase.