¿Cómo deshabilitar el uso del túnel de verbos HTTP mediante encabezados HTTP o parámetros de consulta?

1

La solicitud del atacante utiliza un verbo HTTP de confianza como GET o POST, pero agrega encabezados de solicitud como el método X-HTTP, el método XHTTP-Override, X-Method-Override, o un parámetro de consulta como _método para proporcionar un verbo restringido como PUT o DELETE. Dicha solicitud es interpretada por la aplicación de destino utilizando el verbo en el encabezado de la solicitud en lugar del real Verbo HTTP.

Lo que descubrí para restringir esto es agregar las siguientes entradas en web.xml :

<security-constraint> 
    <web-resource-collection> 
        <web-resource-name>WhiteList_Http_Verbs</web-resource-name> 
        <url-pattern>/*</url-pattern>
        <http-method-omission>GET</http-method-omission>
        <http-method-omission>POST</http-method-omission>
    </web-resource-collection> 
    <auth-constraint/>
</security-constraint>

De acuerdo con estas entradas, mi aplicación solo permite solicitudes GET y POST para todos los patrones de URL y restringe todos los otros métodos HTTP.

La restricción de seguridad se aplicará a todos los métodos, excepto aquellos que fueron nombrados en las omisiones, y la restricción se aplicará solo a los recursos que coincidan con los patrones en la restricción.

Mis preguntas:

  1. En este caso, ¿va a evitar el método / verbo HEAD a través de los encabezados de solicitud especiales anteriores?

  2. ¿Estas entradas deshabilitarán el uso de túneles de verbos usando encabezados como X-HTTP-Method, XHTTP-Method-Override?

  3. O si esta no es una solución adecuada, ¿qué debemos hacer para evitar este problema?

pregunta Afgan 24.10.2018 - 07:13
fuente

1 respuesta

1
  1. La configuración de ejemplo debe bloquear el uso del verbo HEAD , asumiendo que el servidor que tiene esta configuración está recibiendo el verbo (por ejemplo, si tiene una configuración de proxy extraña que falsifica HEAD solicita) hacer una llamada GET , luego soltar el cuerpo, no tendrá ningún efecto).

  2. No, otros encabezados seguirán estando presentes: el servidor no sabe que la otra aplicación trata los otros encabezados como verbos. Si desea evitar el uso de otros métodos pasados de esta manera, la mejor opción es probablemente eliminar los encabezados que la aplicación puede interpretar como verbos HTTP. Dependiendo de la aplicación, esto puede romper algunas funciones: he visto aplicaciones que utilizan este método de pasar verbos para eliminar funciones o permitir modificaciones en los registros.

Según su descripción, parece que el problema no reside en el uso de verbos HTTP, sino en cómo la aplicación permite que se realicen las acciones a las que se relacionan, posiblemente con permisos inapropiados. Es difícil decirlo sin más conocimiento sobre su aplicación, pero es probable que el bloqueo de un método específico para realizar una acción sea menos efectivo que el bloqueo de la acción, dentro de la aplicación, a menos que se proporcione la autorización correspondiente.

    
respondido por el Matthew 24.10.2018 - 12:36
fuente

Lea otras preguntas en las etiquetas