LDAP 삽입 (LDAP Injection)
Improper Neutralization of Special Elements used in an LDAP Query ('LDAP Injection')
설명
LDAP 삽입 취약점은 사용자 입력이 적절히 검증되지 않고 LDAP(Lightweight Directory Access Protocol) 쿼리에 직접 포함될 때 발생합니다. 공격자는 특수 문자를 활용하여 LDAP 쿼리를 조작하고, 인증 우회, 권한 상승 또는 민감한 데이터 조회 등의 공격을 수행할 수 있습니다.
잠재적 영향
인증 우회: 공격자가 LDAP 인증을 우회하여 권한이 없는 계정으로 로그인할 수 있습니다.
데이터 유출: LDAP 디렉터리의 사용자 계정, 이메일 주소 등의 민감한 정보를 탈취할 수 있습니다.
권한 상승: 권한이 낮은 계정이 관리자 계정의 권한을 획득할 수 있습니다.
해결 방법
LDAP 쿼리에서 사용자 입력을 직접 사용하지 않기
filterArgs매개변수를 사용하여 자동으로 특수 문자를 이스케이프 처리합니다.Spring Security의
LdapQueryBuilder를 활용하여 안전한 쿼리를 작성합니다.
사용자 입력값을 철저히 검증 및 인코딩하기
입력값을 사전 정의된 허용 목록(whitelist)과 비교하여 검증합니다.
특수 문자를 적절히 이스케이프 처리하여 악성 입력을 방지합니다.
최소 권한 원칙 적용
LDAP 연결에 필요한 최소한의 권한을 가진 계정을 사용하여 실행합니다.
취약한 코드 및 안전한 코드 예시
취약한 코드
안전한 코드
설명:
취약한 코드: 사용자의 입력값(
username)을 직접 LDAP 쿼리에 포함하여, 공격자가(cn=*)또는(|(cn=*))등의 값을 삽입하여 모든 사용자 정보를 조회할 수 있는 보안 취약점이 발생합니다.안전한 코드:
filterArgs매개변수를 활용하여 입력값을 자동으로 이스케이프 처리하여 LDAP 쿼리 조작 공격을 방지합니다.
참조
Last updated