계: Input Validation and Representation

입력 검증 및 표현 문제는 메타 문자, 대체 인코딩 및 숫자 표현 때문에 발생합니다. 보안 문제는 입력을 신뢰하기 때문에 발생합니다. 문제로는 "Buffer Overflows", "Cross-Site Scripting" 공격, "SQL Injection", 그 외 여러 가지가 있습니다.

LDAP Entry Poisoning

Abstract
개체 반환 LDAP 검색을 수행하는 응용 프로그램에서는 공격자가 LDAP 응답을 제어하여 서버에서 임의의 코드를 실행할 수 있습니다.
Explanation
공격자는 미사용 항목을 수정하거나 이동 중인 응답을 가로채고 수정하여(MiTM(Man-in-The-Middle) 공격) 특수한 Java 속성을 LDAP 항목에 주입하는 방법으로 LDAP 응답을 조작할 수 있습니다. 개체 반환 검색을 수행할 때 Java 속성은 Java 역직렬화 또는 JNDI 역참조를 사용하여 Java 개체로 디코딩되므로 공격자는 검색을 통해 응용 프로그램 서버에서 원격 코드를 실행할 수 있습니다.

이 응용 프로그램은 search 메서드로 전달되는 javax.naming.directory.SearchControls 인스턴스에서 returningObjectFlagtrue로 설정하거나 이 플래그를 대신 설정해 주는 라이브러리 함수를 사용하여 개체 반환 검색을 수행합니다.

이런 경우 응용 프로그램은 Spring Security LDAP 인증 모듈을 사용하는데, 이것은 개체 반환 검색을 수행하기 때문에 LDAP Entry Poisoning에 취약합니다.

예제: 다음 Beans 구성 파일은 응용 프로그램이 Spring Security LDAP 모듈을 인증 공급자로 사용하도록 구성합니다.


<beans ... >
<authentication-manager>
<ldap-authentication-provider
user-search-filter="(uid={0})"
user-search-base="ou=users,dc=example,dc=org"
group-search-filter="(uniqueMember={0})"
group-search-base="ou=groups,dc=example,dc=org"
group-role-attribute="cn"
role-prefix="ROLE_">
</ldap-authentication-provider>
</authentication-manager>
</beans>
References
[1] Introducing JNDI Injection and LDAP Entry Poisoning OpenText Fortify
[2] A Journey from JNDI/LDAP manipulation to remote code execution dream land BlackHat
desc.configuration.java.ldap_entry_poisoning