2022년 4월 9일, NGINX LDAP 참조 구현의 보안 취약점이 공개되었습니다. 조사 결과, 참조 구현만 영향을 받는 것으로 확인되었습니다. NGINX Open Source 및 NGINX Plus 자체는 영향을 받지 않으며, 참조 구현을 사용하지 않는 경우 별도의 조치가 필요하지 않습니다.
NGINX LDAP 참조 구현은 LDAP(Lightweight Directory Access Protocol)를 사용하여 NGINX가 프록시하는 애플리케이션의 사용자를 인증합니다. Python 데몬 및 관련 NGINX 구성은 https://github.com/nginxinc/nginx-ldap-auth에 공개되어 있으며, 그 용도와 구성 방법은 블로그에 자세히 설명되어 있습니다.
LDAP 참조 구현을 배포한 환경은 다음 조건 중 하나라도 해당하는 경우 취약점의 영향을 받습니다. 아래에서는 이러한 조건과 완화 방법을 자세히 설명합니다.
참고: LDAP 참조 구현은 참조용으로 공개되었으며, 통합이 작동하는 방식과 통합을 검증하는 데 필요한 모든 구성 요소를 설명합니다. 이는 프로덕션급 LDAP 솔루션이 아닙니다. 예를 들어 샘플 로그인 페이지에서 사용하는 사용자 이름과 비밀번호는 암호화되지 않으며, 보안 알림에도 이 점이 명시되어 있습니다.
완화 조건 1: 명령줄 매개변수를 사용하여 Python 데몬 구성
LDAP 참조 구현을 구성하는 기본 방법은 여러 proxy_set_header 지시문을 사용하는 것이며, 자세한 내용은 샘플 구성 및 설명서를 참조하십시오. 그러나 Python 데몬을 초기화하는 명령줄에서도 구성 매개변수를 설정할 수 있습니다(nginx-ldap-auth-daemon.py).
명령줄에서 구성 매개변수를 지정하면 공격자가 특수하게 조작된 HTTP 요청 헤더를 전달하여 일부 또는 모든 매개변수를 재정의할 수 있습니다. 이를 방지하려면 NGINX 구성의 location = /auth-proxy 블록(리포지토리의 nginx-ldap-auth.conf)에 다음 구성을 추가하여 인증 중 불필요한 요청 헤더가 무시되도록 하십시오.
location = /auth-proxy {
# ...
proxy_pass_request_headers off;
proxy_set_header Authorization $http_authorization; # If using Basic auth
# ...
}완화 조건 2: 사용되지 않는 선택적 구성 매개변수
조건 1과 마찬가지로, 특정 구성 매개변수가 구성에 설정되어 있지 않으면 공격자가 특수하게 조작된 HTTP 요청 헤더를 전달하여 해당 매개변수를 재정의할 수 있습니다. 예를 들어 LDAP 검색 템플릿이 구성에 명시적으로 설정되어 있지 않으면 재정의될 수 있습니다. 조건 1과 동일한 방식으로, NGINX 구성의 location = /auth-proxy 블록에 다음 구성을 추가하여 이를 방어할 수 있습니다.
location = /auth-proxy {
# ...
proxy_pass_request_headers off;
proxy_set_header Authorization $http_authorization; # If using Basic auth
# ...
}완화 조건 3: LDAP 그룹 멤버십 필요
Python 데몬은 입력값을 정제하지 않습니다. 따라서 공격자는 특수하게 조작된 요청 헤더를 사용하여 그룹 멤버십(memberOf) 검사를 우회함으로써, 인증 대상 사용자가 필수 그룹에 속하지 않더라도 LDAP 인증을 강제로 성공시킬 수 있습니다.
이 문제를 완화하려면 로그인 양식을 제공하는 백엔드 데몬이 사용자 이름 필드에서 모든 특수 문자를 제거하도록 해야 합니다. 특히 여는 괄호와 닫는 괄호 문자 – ( ) – 및 등호(=), 즉 LDAP 서버에서 특별한 의미를 갖는 문자를 모두 제거해야 합니다. LDAP 참조 구현의 백엔드 데몬도 추후 이와 같은 방식으로 업데이트될 예정입니다.
감사의 말
이러한 보안 취약점을 알려주신 Lucas Verney, valodzka, @_Blue_hornet 님께 감사드립니다.
작성자 소개

관련 블로그 게시물
시청하기: KubeCon North America 2023에서의 NGINX Gateway Fabric
이 영상에서는 KubeCon의 NGINX 부스를 찾아가, 저희가 공개한 Kubernetes Gateway API 구현을 살펴봅니다.
F5 NGINX로 대규모 WAF 플릿을 확인하고 관리하는 2가지 방법
앱 보안을 강화하는 두 가지 방법을 소개합니다. NGINX Management Suite를 통해 WAF 운영에 대한 가시성을 높이고, NGINX App Protect WAF를 활용해 코드형 보안을 구현하는 것입니다.
Ingress 컨트롤러 선택 가이드, 4부: NGINX Ingress Controller 옵션
개발 주체, 개발 철학, 프로덕션 환경 준비도, 보안 및 지원을 기준으로 어떤 NGINX Ingress 컨트롤러가 가장 적합한지 알아보세요.
진화하는 공격 환경에 NGINX App Protect Denial of Service가 적응하는 방법
NGINX App Protect Denial of Service(DoS)가 계층 7 DoS 공격을 방어하기 위해 완화 방법을 실시간으로 조정하는 방식을 설명합니다. 정상적인 사용자 행동과 서버 상태에 대한 모델을 생성하여 공격을 나타내는 이상 징후를 감지하고 맞춤형 완화 시그니처를 적용할 수 있습니다.
NGINX Instance Manager를 활용한 대규모 구성 업데이트 및 인증서 관리
NGINX Instance Manager 버전 1.0에는 두 가지 새로운 기능이 도입되었습니다. NGINX 인스턴스에 태그와 사용자 역할을 지정하면 전체 그룹에 구성을 한 번에 적용할 수 있습니다. 인증서 검사는 만료 예정인 인증서를 감지하여 서비스 중단을 방지할 수 있도록 인증서를 교체할 수 있게 해줍니다.
Netflix가 자사 CDN의 핵심으로 NGINX를 선택한 이유
Netflix가 글로벌 콘텐츠 전송 네트워크인 Open Connect의 스트리밍 미디어 기술로 NGINX를 선택한 이유를 NGINX 개발자 Gleb Smirnoff에게서 알아보세요.