2020-04-10 10:55 (금)
15년동안 존재한 HTTProxy 보안 취약점 재발견돼
상태바
15년동안 존재한 HTTProxy 보안 취약점 재발견돼
  • 길민권
  • 승인 2016.07.20 16:14
이 기사를 공유합니다

서버단 웹 사이트 소프트웨어가 공격받을 위험이 커져
15년 전에 발견된 HTTProxy 보안 취약점(참고. https://httpoxy.org)이 다시 발견되었고, 서버단 웹 사이트 소프트웨어가 공격받을 위험이 커졌다.
 
아파치 소프트웨어 재단, 레드햇, Ngnix 등은 httpoxy라고 불리는 취약점에 대해 경고하고 있다. (PHP: CVE-2016-5385; Go: CVE-2016-5386; Apache HTTP server: CVE-2016-5387; Apache TomCat: CVE-2016-5388; PHP-engine HHVM: CVE-2016-1000109; Python: CVE-2016-1000110)
 
해당 취약점은 많은 웹 애플리케이션과 라이브러리에 존재하여 취약한 웹 사이트를 공격할 수 있다. 이를 통해 민감한 데이터에 접근하거나 코드를 건드릴 수도 있다.
 
기본적으로 애플리케이션 서버에 있는 ‘HTTP_PROXY’로 불리는 환경 변수를 설정하기 위한 요청에서 Proxy HTTP 헤더를 오용한다. 이 네이밍 혼동으로 인해 애플리케이션은 HTTP 커넥션 송신 부분의 변수로 정의된 프록시 서버를 사용하게 된다.  
 
그래서 만약 사용자가 악성 서버의 HTTP_PROXY를 가리키면, 웹 애플리케이션의 다른 시스템으로의 연결을 가로채게되며, 코드 설계에 따라 원격 코드 실행이 가능해지기도 한다. 원격 코드 실행과 익스플로잇 가능 여부는 애플리케이션 동작 부분의 송신 연결 여부에 달려있다.
 
Vend 인프라 개발자인 Dominic Scheirlinck은 “만약 사용자가 PHP 또는 CGI를 실행하고 있다면, Proxy헤더를 삭제해야한다”며 “httpoxy는 익스플로잇이 굉장히 쉬우며, 보안 연구원들도 쉽게 스캔할 수 있다”고 말했다.
 
그는 서버단 CGI에서 실행되는 동안 다른 작업을 수행하거나 정보를 찾는 HTTP 송신 연결을 만드는 코드가 공격에 노출되어 있다고 덧붙였다. 공격자는 내부 민감한 정보들을 빼돌릴 수도 있고 의심스러운 데이터를 애플리케이션에 숨길 수도 있으며, 프록시 서버에 중간자 공격을 삽입할 수도 있다.
 
Scheirlinck은 또한 “만약 사용자가 Guzzle 6을 이용하는 Drupal 플러그인을 사용 중이고 그것이 HTTP 송신을 요청한다면, 사용자는 그 플러그인이 만든 요청에 취약하게 된다”고 설명했다. Guzzle이나 Artax 같은 단 하나의 취약한 라이브러리만 사용되면 익스플로잇이 가능하다.
 
PHP에는 getenv()라고 불리는 메소드가 있다. getenv()는 환경 변수와 사용자가 통제하는 데이터를 모두 가지는 $_SERVER superglobal와 비슷하다. 특히 PHP가 CGI 같은 서버에서 실행될 때, HTTP 요청 헤더들은 ‘HTTP_’로 시작하는 키로 합쳐지며 이는 getenv가 읽어들이는 정보와 같게 된다.
 
만약 사용자가 프록시 헤더로 요청을 보내면, 헤더가 PHP 에플리케이션에 getenv(‘HTTP_PROXY’)로 나타나게 된다. 몇몇 PHP 라이브러리들은 CGI/SAPI 환경에서 실행될 때에도 이 값을 신뢰한다. $_SERVER[‘HTTP_PROXY']를 읽고 사용하는 것도 똑같은 취약점이지만, 전자보다는 덜 발생한다.
 
해당 취약점에 대해서는 빠르고 쉬운 mitigation이 가능하며, 가장 좋은 방법은 시스템 간의 연결에서 Proxy 요청 헤더를 막는 것이다. Proxy / HTTP_PROXY 혼동은 2001년 3월 libwww-perl에서 처음으로 공개되었고 수정되었다. 이번 달에는 Vend 연구원들이 같은 혼동을 발생시키는 라이브러리와 툴을 발견했다.
 
★정보보안 대표 미디어 데일리시큐!★
 
<데일리시큐 HSK 외신기자>