Warning message

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

HTTPoxy - ¿Se ha afectado mi JBoss o 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

Este incidente se presenta cuando está utilizando CGIServlet en JBoss EAP, o Tomcat. Cualquier solicitud saliente que se genere a partir de la solicitud original del atacante al script CGI puede ser redirigida a un proxy controlado por el atacante..

Resolution

No se recomienda el uso de un CGIServlet en producción. Es mejor eliminar la aplicación Web mediante CGIServlet si usted cuenta con esa opción. También puede agregar un filtro Servlet a la aplicación que retorna la respuesta ‘400: Bad Request’ si se detecta un encabezado HTTP con el nombre ‘Proxy’. Por ejemplo:

Agregue un Servlet Filter para la aplicación CGI que filtra las solicitudes con el encabezado 'Proxy'.
NOTA: Un filtro bloqueará cualquier implementación de lenguaje 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;

/*
 *  Este es un filtro servlet para desautorizar las solicitudes con el encabezado http  "Proxy" .
 */
@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 {
    }

}

Después de compilar el ProxyHeaderFilter.java, se creará un paquete denominado com.redhat.prodsec.web.filter que contiene ProxyHeaderFilter.class.

Cree un jar para el ProxyHeaderFilter.class mediante el comando de abajo. Esto generará un jar denominado ProxyHeaderFilter.jar.

jar -cvf ProxyHeaderFilter.jar com

Coloque este jar en una carpeta WEB-INF/lib. Se habilitará el filtro Servlet en la aplicación web.

Root Cause

Para obtener más información, consulte HTTPoxy - Una vulnerabilidad CGI application-code que afecta PHP, Go y Python entre otros.

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.