✏️ Java 코드 에디터
취약한 코드
public void searchUser(String user) throws NamingException {
DirContext ctx = new InitialDirContext(env);
// [취약한 코드] 입력값을 검증 없이 LDAP 필터 생성에 사용
// user에 "*)(cn=*" 입력 시 모든 사용자 검색 가능
String filter = "(cn=" + user + ")";
NamingEnumeration<SearchResult> results = ctx.search("ou=users,dc=example,dc=com", filter, controls);
}
💡 수정 가이드 (KISA 가이드 기준)
1. 특수문자 이스케이프
LDAP 필터에서 특별한 의미를 갖는 문자들(*, (, ), \, /)을 이스케이프합니다.
user = user.replace("\\", "\\5c")
.replace("*", "\\2a")
.replace("(", "\\28")
.replace(")", "\\29")
.replace("/", "\\2f")
.replace("\0", "\\00");
String filter = "(cn=" + user + ")";
📊 분석 결과 및 설명
🎯 목표
LDAP 쿼리 구성 시 사용자 입력값에 포함된 특수문자가 쿼리의 구조를 변경하지 못하도록 필터링해야 합니다.
⚠️ 현재 취약점
LDAP Injection
공격자가 입력값을 조작하여 의도하지 않은 LDAP 쿼리를 실행하고 디렉터리 정보를 열람하거나 수정할 수 있습니다.