¿Por qué alguien debería bloquear todos los métodos que no sean GET y POST en una aplicación RESTful?

12

TL; DR:

¿Existe una razón válida para exigir que un proveedor de software deje de usar los métodos HTTP PUT y DELETE en una aplicación web y use solo GET y POST ? La aplicación usa marcos para lista blanca que permiten rutas y métodos de solicitud

En otras palabras, ¿hay alguna diferencia desde el punto de vista de seguridad en permitir la eliminación de un registro a través de los métodos DELETE o POST sin cambiar el código y las comprobaciones de seguridad?

Pregunta completa

Nuestro cliente configuró su instancia de Tomcat con lo siguiente, de acuerdo con su estándar corporativo:

<security-constraint> 
    <web-resource-collection> 
        <web-resource-name>restricted methods</web-resource-name> 
        <url-pattern>/*</url-pattern> 
        <http-method>CONNECT</http-method> 
        <http-method>PUT</http-method> 
        <http-method>DELETE</http-method> 
        <http-method>OPTIONS</http-method> 
        <http-method>TRACE</http-method> 
    </web-resource-collection> 
    <user-data-constraint> 
        <transport-guarantee>CONFIDENTIAL</transport-guarantee> 
    </user-data-constraint> 
    <auth-constraint /> 
</security-constraint> 

Esto, entre la configuración Http Header Security Filter , hizo que nuestra aplicación se rompiera.

Nuestra aplicación proporciona las mismas características de seguridad del encabezado HTTP en Spring Security. Además, nuestra aplicación es REST, por lo que usamos ampliamente los métodos PUT y DELETE para cargar archivos. En futuras versiones, también planeamos usar websockets (pero desde una búsqueda, no usan CONNECT, que es para proxy).

Nuestro cliente dijo que tendrá que generar una excepción de política en producción para eliminar las líneas ofensivas de la configuración de Tomcat y hacer que la aplicación funcione.

La política de excepciones de seguridad se activa cuando las aplicaciones del proveedor no cumplen con el requisito de seguridad de manera que 1) no se puede solucionar el problema dentro de los horarios y 2) no se encuentra una vulnerabilidad evidente. Las políticas de excepción requieren la aprobación de la alta dirección.

Sin embargo, las excepciones de la política de seguridad requieren que nuestro cliente se comprometa con el proveedor dentro de los 6 meses para "solucionar el problema de seguridad". En un plazo de 6 meses, el proveedor debe proporcionar los costos y los plazos para cumplir con la política de seguridad.

Esto significa que volverán a pedirme una cotización para que la aplicación funcione con el filtrado de métodos HTTP habilitados y el filtro de seguridad de encabezado HTTP.

No quiero hacerles un favor y cambiar todas las llamadas Ajax de los patrones REST a GET / POST solo, ni siquiera por dinero si es posible. En cambio, me gustaría demostrar que su implementación de seguridad no solo es incompatible, sino también redundante, en lo que respecta a las implementaciones de seguridad dentro de la aplicación.

Si establecemos un precedente al hacerle un favor a este cliente con las solicitudes PUT y DELETE, tendremos que enfrentar solicitudes como "ser compatible con mi marco / política / entorno" desde una gran base de clientes (todos los bancos e instituciones financieras) . En el futuro, eso puede ir en contra de nuestra administración de costos.

La pregunta es, como en el TLDR, ¿el uso de los métodos PUT y DELETE solo, independientemente de las características de seguridad de la aplicación, representa un riesgo para la seguridad?

Si se demuestra que el único verbo HTTP no representa un riesgo para la seguridad, podré plantear una política de excepción permanente y confrontar al personal de TI con una sólida argumentación.

Editar

Trabajo en una fábrica de software que implementa la misma instancia de producto en un gran número de clientes y en nuestra nube. Estamos utilizando completamente todas las herramientas que tenemos a bordo, incluido el patrón REST. Estamos planeando emplear HATEOAS, WebSockets, descargas de archivos reanudables y todo lo que la tecnología web nos puede ofrecer para brindar una mejor experiencia. Sí, suena como una línea de marketing. De todos modos, la seguridad sigue siendo una preocupación en nuestros productos.

    
pregunta usr-local-ΕΨΗΕΛΩΝ 14.12.2018 - 17:36
fuente

3 respuestas

21

Sospecho que este es el caso de alguien que aplica con celo "mejores prácticas" que no entiende.

Ataque de manipulación de verbos HTTP

La razón por la que existe esta mejor práctica es el Ataque de manipulación de verbos HTTP. De este artículo :

  

Muchos mecanismos de autenticación del servidor web utilizan controles de acceso y autenticación basados en verbos. Por ejemplo, un administrador puede configurar un servidor web para permitir el acceso sin restricciones a una página web mediante solicitudes HTTP GET, pero restringir los POST solo a los administradores. Sin embargo, muchas implementaciones de mecanismos de seguridad basados en verbos aplican las reglas de seguridad de una manera no segura, permitiendo el acceso a recursos restringidos mediante el uso de métodos HTTP alternativos (como HEAD) o incluso cadenas de caracteres arbitrarias.

Alguien decidió que debido a que algunas aplicaciones están mal escritas, se debería prohibir que todas las aplicaciones acepten verbos HTTP que no sean GET o POST, porque ... ya sabes ... ¡murmuren, murmulen, SEGURIDAD!

Mi opinión (posiblemente incompleta / incorrecta, publique comentarios) :

Parece que su aplicación está bien y su cliente tiene una política de seguridad demasiado celosa.

A un lado, HEAD es un ejemplo interesante; algunos escáneres de seguridad parecen quejarse si su aplicación responde a las solicitudes HEAD, ya que algunas aplicaciones devolverán encabezados válidos sin invocar las comprobaciones de autenticación adecuadas. Sin embargo, la mayoría de las aplicaciones diseñadas correctamente procesarán un GET completo y luego solo devolverán los encabezados, incluido el content-length: correcto. Por lo tanto, para las aplicaciones que utilizan marcos modernos, probablemente no haya manera de evitar la lógica de autenticación en su controlador GET. Hacer algunas pruebas rápidas sin embargo! (Gracias @ usr-local-ΕΨΗΕΛΩΝ por señalar esto en los comentarios. Consulte esto La publicación de desbordamiento de pila para detalles sobre cómo Spring MVC maneja esto.

    
respondido por el Mike Ounsworth 14.12.2018 - 18:03
fuente
0

Podría decirse que DELETE y PUT son más seguros que GET / POST porque no pueden usarse en ataques CSRF. También podría decirse que DELETE y PUT deberían estar protegidos contra CSRF de todos modos, porque es malo basar la seguridad de su aplicación en el supuesto de que cada implementación del navegador sigue los estándares. Pero no es raro que las aplicaciones no tengan esa protección, así que tal vez esa sea la idea detrás de la prohibición, aunque estoy llegando un poco aquí.

O tal vez simplemente deshabilitaron todos los métodos que no necesitaban (lo que es una buena práctica) y con el tiempo se convirtieron de una regla predeterminada en una regla inviolable.

    
respondido por el Tgr 15.12.2018 - 03:46
fuente
0

Recomiendo comprometer a su equipo legal corporativo pronto, para que alguien se centre en los aspectos comerciales de las discusiones que se avecinan.

  

Como parte de la política de excepciones de seguridad, el personal de nuestro cliente está obligado a hacer que el proveedor "arregle el problema de seguridad" dentro de 6 meses.

     

Esto significa que volverán a mí pidiendo que la aplicación funcione con el filtrado de métodos HTTP habilitados y el filtro de seguridad de encabezado HTTP.

     

No quiero hacerles un favor y cambiar todas las llamadas Ajax de los patrones RESTful a GET / POST solamente, ni siquiera por dinero.

Su cliente obviamente está ejecutando su propia burocracia, aplicando una política inflexible. Crees que tienes tres caminos posibles:

  1. convencerlos de cambiar su política.
  2. Haz el cambio indeseable.
  3. Riesgo de perderlos como cliente.

Aunque le parezca que es una decisión lógica y técnica, cambiar las políticas requiere una buena cantidad de disputas políticas. La persona con la que está tratando en el otro lado de la discusión puede o no tener la posición necesaria en su compañía para realizar dicha solicitud con éxito. Puede que no quiera perder su tiempo luchando contra su propia burocracia por el cambio. Su vida podría ser considerablemente más fácil si cambia de proveedor y utiliza el producto de otra persona que ya cumple con sus políticas. Peor aún para usted, la vida de su jefe casi seguramente será más fácil si solo cambia de vendedor.

Sería irresponsable de tu parte pensar que puedes lograr que cambien su política sin hacer una planificación seria para los otros resultados.

Los buenos clientes son lo suficientemente difíciles de conseguir. Se lo debemos a su empresa para sopesar cuidadosamente el riesgo de perder uno por esto.

    
respondido por el John Deters 17.12.2018 - 17:25
fuente

Lea otras preguntas en las etiquetas