HTTPoxy - Ist mein JBoss/tomcat betroffen?
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
Dieses Problem tritt auf, wenn Sie CGIServlet auf der JBoss EAP oder bei Tomcat verwenden. Ausgehende Anfragen, die von der Originalanfrage des Angreifers an das CGI-Skript erzeugt werden, können auf einen Proxy umgeleitet werden, der vom Angreifer kontrolliert wird.
Resolution
Es ist nicht empfohlen, ein CGIServlet in Produktion zu verwenden. Am besten ist es, die Web-Anwendung mittels CGIServlet zu entfernen, falls Sie diese Option haben. Alternativ können Sie aber auch einen Servlet-Filter zu Ihrer Anwendung hinzufügen, der die Antwort ‘400: Bad Request’ ausgibt, wenn ein HTTP-Header mit dem Namen ‘Proxy’ entdeckt wird. Zum Beispiel:
Fügen Sie einen Servlet Filter zu Ihrem WAR der CGI-Anwendung hinzu, damit dieser Anfragen mit dem ‘Proxy’-Header filtert:
HINWEIS: Ein Filter blockiert die CGI-Implementierung bei der Implementierung von Sprachen.
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;
/*
* Dies ist ein Beispiel-Servlet-Filter, damit keine Anfragen mit "Proxy" http Header zugelassen werden
*/
@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 {
}
}
Nach dem Kompilieren von ProxyHeaderFilter.java wird ein Paket namens com.redhat.prodsec.web.filter erstellt, das ProxyHeaderFilter.class enthält.
JAR für den ProxyHeaderFilter.class mittels Befehl unten erstellen. Dies erstellt ein JAR namens ProxyHeaderFilter.jar.
jar -cvf ProxyHeaderFilter.jar com
Speichern Sie dieses JAR im WEB-INF/lib Ordner Ihrer Web-Anwendung. Dies wird den Servlet-Filter in der Web-Anwendung aktivieren.
Root Cause
Weitere Informationen finden Sie unter HTTPoxy - A CGI application-code vulnerability affecting PHP, Go, Python, and others.
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