상세 컨텐츠

본문 제목

HTTPoxy 취약점 발견

국내외 보안동향

by 알약(Alyac) 2016. 7. 20. 14:37

본문

HTTPoxy 취약점 발견

Vulnerability Note VU#797896


HTTPoxy CGI 보안 취약점이 공개되었습니다. 이 취약점은 php, python, Go 어플리케이션 등 다양한 환경에 적용될 수 있어 주의가 필요합니다.


CGI나 CGI와 같은 컨텍스트를 운영하는 웹서버는 클라이언트 Proxy 헤더값을 내부의 HTTP_PROXY 환경 값에 할당할 수 있습니다. 이 취약점은 링크들을 임의의 호스트로 연결시키기 위해 내부에 하위요청(subrequest)하거나 서버에 직접 중간자 공격(MITM)을 실행하는 것으로 악용될 수 있습니다.


해당 취약점은 메타변수를 네이밍하는 방식으로 존재하는데, 이로 인해 이름이 충돌됩니다.

“이 HTTP 헤더의 필드 네임이 대문자로 변환 되어 “-“이 “_”으로 교체 되어 “HTTP_”가 앞에 붙은 메타 변수명이 된다.”


또한 아래의 경우에 웹서버들이 취약할 수 있습니다.


1. 웹서버에서 프로그래밍 언어나 프레임워크가 웹 요청에서 사용자가 제공하는 Proxy 헤더로부터 환경 변수 HTTP_PROXY 또는 유사하게 사용 되는 변수들을 설정할 경우


2. 웹 어플리케이션에서 HTTP_PROXY나 유사한 변수들을 안전하지 않게 사용해(요청 타입 체크를 누락하는 등) 공격자가 제어하는 프록시를 사용하게 되는 결과를 초래하게 됨(특히 HTTP_PROXY가 안전하지 않게 사용되었을 경우)



해결 방법


이 취약점에 해당되는 제품이나 컴포넌트들은 반드시 업데이트되어야 합니다. 제조사의 업데이트 정보를 찾아보기를 권고 드립니다. 만약 해당되지 않거나 패치가 불가능할 경우, 아래의 해결 방법을 고려해보시기 바랍니다.


※ Proxy 요청 헤더 필터링

연구원들과 커뮤니티에서는 제품에 의존하는 필터링 전략 몇가지를 발견해냈습니다.


APACHE/CGI

이 설정에서는 어떠한 언어든 취약할 수 있습니다. Mod_headers를 사용 중이라면, 아래와 같이 “Proxy” 헤더의 설정을 해제하면 됩니다.


RequestHeader unset Proxy early


Mod_security를 사용 중이라면, 룰을 아래와 같이 세팅합니다.


SecRuleEngine On

SecRule &REQUEST_HEADERS:Proxy "@gt 0"

"id:1000005,log,deny,msg:'httpoxy denied'"


▶ 관련하여 더 많은 정보는 Apache의 권고문에서 찾아볼 수 있습니다.


HAProxy


http-request del-header Proxy


Nginx/FastCGI

Proxy 헤더가 PHP-FPM, PHP-PM 등으로 전해지는 것을 차단하기 위해 다음과 같이 설정해줍니다. 


fastcgi_param HTTP_PROXY "";


Nginx with proxy_pass

nginx에서 “proxy_pass”를 사용 중이라면 아래와 같이 세팅합니다.


proxy_set_header Proxy "";


Microsoft IIS with PHP or a CGI framework


마이크로소프트는 영향받은 써드 파티 프레임워크를 활용하는 IIS 서버를 위한 가이드라인을 제공했습니다.

Proxy header가 포함된 요청을 차단하기 위하여 CMD에서 다음과 같은 명령을 실행합니다. 


appcmd set config /section:requestfiltering /+requestlimits.headerLimits.[header='proxy',sizelimit='0']


혹은 아래의 룰로 apphost.config를 업데이트하면 됩니다.


<system.webServer>

   <rewrite>

        <rules>

            <rule name=3D"Erase HTTP_PROXY" patternSyntax=3D"Wildcard">

                <match url=3D"*.*" />

                <serverVariables>

                    <set name=3D"HTTP_PROXY" value=3D"" />

                </serverVariables>

                <action type=3D"None" />

            </rule>

        </rules>

    </rewrite>

</system.webServer>




출처 :

http://www.kb.cert.org/vuls/id/797896

https://httpoxy.org/

관련글 더보기

댓글 영역