Translated message

A translation of this page exists in English.

Warning message

This translation is outdated. For the most up-to-date information, please refer to the English version.

HTTPoxy - JBoss/tomcat은 영향을 받습니까?

Solution Verified - Updated -

Environment

  • Red Hat JBoss Enterprise Application Platform (EAP) 6.x
  • Red Hat JBoss Enterprise Application Platform (EAP) 5.x
  • Red Hat JBoss Enterprise Web Server (EWS) 2.x
    • Tomcat 6
  • Red Hat JBoss Web Server (JWS) 3.x
    • Tomcat 6
    • Tomcat 7

Issue

본 문제는 JBoss EAP 또는 Tomcat에서 CGIServlet 사용 시 영향을 받게 됩니다. 공격자의 원래 요청에서 CGI 스크립트로 생성된 모든 나가는 요청에 대해 공격자가 제어하는 프록시로 전환될 수 있습니다.

Resolution

프로덕션 환경에서 CGIServlet 사용은 권장되지 않습니다. 이러한 옵션이 있을 경우 CGIServlet을 사용하는 웹 애플리케이션을 삭제하는 것이 가장 좋습니다. 다른 방법으로 ‘Proxy’라는 이름의 HTTP 헤더가 감지될 경우 ‘400: Bad Request’ 응답을 반환하는 Servlet 필터를 애플리케이션에 추가할 수 있습니다. 예:

‘Proxy’ 헤더가 있는 요청을 필터링하는 CGI 애플리케이션 war에 Servlet 필터를 추가합니다:
주의: 필터는 모든 CGI 구현 언어 구현을 차단하게 됩니다.

package com.redhat.prodsec.web.filter;

import java.io.IOException;
import java.util.Enumeration;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.annotation.WebFilter;

/*
 *  "Proxy" http 헤더로 요청을 거부하기 위한 샘플 servlet 필터입니다.
 */
@WebFilter("/*")
public class ProxyHeaderFilter implements Filter {

    /**
     * @see Filter#destroy()
     */
    public void destroy() {
        // TODO Auto-generated method stub
    }

    @Override
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
            throws IOException, ServletException {
        HttpServletRequest httpRequest = (HttpServletRequest) req;
        Enumeration<String> headerNames = httpRequest.getHeaderNames();


        if (headerNames != null) {
                while (headerNames.hasMoreElements()) {
                    String headerName = headerNames.nextElement();
                    if(headerName.equalsIgnoreCase("Proxy"))
                        ((HttpServletResponse) res).sendError(HttpServletResponse.SC_BAD_REQUEST);
                }
        }

        chain.doFilter(req, res);

    }

    /**
     * @see Filter#init(FilterConfig)
     */
    public void init(FilterConfig fConfig) throws ServletException {
    }

}

ProxyHeaderFilter.java를 컴파일하면 ProxyHeaderFilter.class가 포함된 com.redhat.prodsec.web.filter라는 패키지가 생성됩니다.

아래 명령을 사용하여 ProxyHeaderFilter.class 용 jar 파일을 생성합니다. ProxyHeaderFilter.jar라는 jar 파일이 생성됩니다.

jar -cvf ProxyHeaderFilter.jar com

웹 애플리케이션의 WEB-INF/lib 폴더에 이러한 jar 파일을 저장합니다. 이는 웹 애플리케이션에서 Servlet 필터를 활성화합니다.

Root Cause

자세한 내용은 HTTPoxy - PHP, Go, Python, 등에 영향을 미치는 CGI 애플리케이션 코드 취약점에서 참조하십시오.

This solution is part of Red Hat’s fast-track publication program, providing a huge library of solutions that Red Hat engineers have created while supporting our customers. To give you the knowledge you need the instant it becomes available, these articles may be presented in a raw and unedited form.

Comments