웹 애플리케이션이 사용자 입력값을 이용해 LDAP 검색 쿼리를 만들 때, 그 입력값을 검증하지 않으면 공격자가 LDAP 구문을 조작해 인증 우회, 정보 노출을 유발할 수 있는 공격
- LDAP : 디렉터리 서비스를 질의(Query)하기 위한 표준 프로토콜
- 주로 사용자 인증, 조직도 정보 조회, 그룹 정보, 로그인 처리 등에 사용
- 예시 : Microsoft AD(Active Directory), OpenLDAP
로그인 기능에서 LDAP 사용
// Java LDAP 인증 코드 예시 (취약)
String filter = "(&(uid=" + userInput + ")(password=" + password + "))";
사용자가 아래와 같이 입력한다면?
userInput: *)(&(objectClass=*)
password: 아무거나
→ 최종 LDAP 필터가 이렇게 됨:
(&(uid=*)(&(objectClass=*))(password=아무거나))
→ 모든 사용자의 조건과 일치 → 인증 우회 발생!!
공격 목적
- 인증 우회 : 필터 조작으로 로그인 우회 (uid=)(&(objectClass=))
- 정보 노출 : `uid=admin*)(
- 조건 우회 : OR 조건을 인위적으로 추가하여 필터 조작
- 서비스 다운 : 잘못된 필터 구조로 LDAP 서버 부하 유발 (DoS)