블로그 | NGINX

NGINX 및 NGINX Plus를 사용하여 CVE-2015-1635로부터 보호

NGINX-F5-수평-검정-유형-RGB의 일부
오웬 개렛 썸네일
오웬 개렛
2015년 4월 16일 게시

4월 14일, Microsoft는 공격자가 영향을 받는 Windows 시스템에 특수하게 조작된 HTTP 요청을 보낼 경우 원격 코드 실행을 허용할 수 있는 문제에 대한 취약성 경고 (현재 CVE-2015-1635 로 추적됨)를 발표했습니다. 프로덕션 Windows 서버에 즉시 패치를 적용할 수 없는 경우 NGINX와 NGINX Plus가 공격으로부터 보호하는 데 도움이 될 수 있습니다.

이 글을 쓰는 시점까지 취약점의 구체적인 세부 사항은 공개되지 않았지만, 공격자는 매우 큰 Range 요청이 포함된 HTTP 요청을 보내 취약한 시스템을 찾으려 하는 것으로 알려졌습니다. 이는 버퍼 오버플로를 유발하고 Windows 시스템에서 충돌을 일으킬 수 있습니다.

사용자는 이 취약점을 해결하기 위해 Microsoft 패치를 적용하는 것이 좋습니다. 그러나 모든 운영 시스템에 패치를 적용할 수 없고 NGINX 또는 NGINX Plus를 사용하여 트래픽을 부하 분산 하거나 프록시하는 경우, 간단한 구성 변경만으로도 취약한 시스템으로 전송되는 특수 요청을 가로채서 수정할 수 있습니다.

정찰 트래픽 식별 및 처리

Mattias Geniar는 공격 트래픽을 분석 하고 Range 헤더에 큰 바이트 범위가 있는 HTTP 요청이 충돌을 유발한다고 보고했습니다.

GET / HTTP/1.1rn호스트: stuffrn
범위: 바이트=0-18446744073709551615rn
rn

가장 간단한 해결책은 proxy_set_header 지시문을 사용하여 Range 헤더를 "" (빈 문자열)로 설정하는 것입니다. 이렇게 하면 HTTP 요청이 proxy_pass 지시문에서 지정한 Windows 서버로 전달되기 전에 헤더가 효과적으로 삭제됩니다.

서버 { listen 80;

location / {
proxy_set_header 범위 "";
proxy_pass http://windowsserver:80;
}
}

애플리케이션에 바이트 범위 지원이 필요한 경우 proxy_set_header 지시문을 사용하여 Range 헤더를 설정하기 전에 map 지시문을 사용하여 큰 정수와 유사한 문자열을 빈 문자열로 바꿀 수 있습니다.

map $http_range $saferange { "~d{10,}" ""; # 10개 이상의 정수 문자열과 일치하면 제거
default $http_range;
}

server {
listen 80;

location / {
proxy_set_header Range $saferange;
proxy_pass http://windowsserver:80;
}
}

또는 HTTP 코드를 반환할 수 있습니다.444 Range 헤더의 값이 큰 정수와 유사한 경우. 암호444 NGINX 및 NGINX Plus에 아무것도 반환하지 않고 클라이언트 연결을 즉시 닫으라고 지시합니다.

서버 { 80을 수신;

if ($http_range ~ "d{9,}") {
return 444;
}

location / {
proxy_pass http://windowsserver:80;
}
}

안전을 유지하고 패치를 적용하세요. 하지만 즉시 적용할 수 없는 경우 NGINX 및 NGINX Plus가 잠재적인 취약점을 막는 데 도움을 줄 수 있습니다.

NGINX Plus를 사용해보려면 오늘 무료 30일 체험판을 시작하거나 데모를 위해 저희에게 문의하세요 .


"이 블로그 게시물에는 더 이상 사용할 수 없거나 더 이상 지원되지 않는 제품이 참조될 수 있습니다. 사용 가능한 F5 NGINX 제품과 솔루션에 대한 최신 정보를 보려면 NGINX 제품군을 살펴보세요. NGINX는 이제 F5의 일부가 되었습니다. 이전의 모든 NGINX.com 링크는 F5.com의 유사한 NGINX 콘텐츠로 리디렉션됩니다."