¿El purificador de HTML (que convierte & a &) evita la contaminación de los parámetros HTTP?

0

Si un punto final REST ( enlace ) lee el parámetro de consulta p y lo pasa a otro punto final:

http_get("http://example.com/api2?p=".$_GET['p']); 

Podré explotarlo agregando contenido después de p : enlace , lo que lo causará para hacer una solicitud a enlace ( %26 se decodifica a & por el servidor), que dará como resultado una vulnerabilidad si el punto final /api2 lee el parámetro admin .

Sin embargo, si uso HTML Purifier en $_GET['p'] , convertirá & en & , lo que romperá el ataque a menos que api2 lee amp;admin (lo cual no es probable en la práctica).

¿Eso significa que el escape de & en & impedirá efectivamente la explotación? ¿Por qué esta página nos advierte que estemos atentos a &HPP_TEST entonces? / p>     

pregunta Avery235 17.11.2018 - 09:21
fuente

2 respuestas

2

La contaminación de parámetros HTTP es el proceso de manipular una URL para evitar la validación de parámetros en el servidor o WAF. Por ejemplo, se hace agregando un parámetro nuevamente, es decir, haciendo que la cadena de consulta foo=1&bar=2 a foo=1&bar=2&bar=bad-value .

Tenga en cuenta que una URL contaminada sigue siendo una URL válida y que incluso podría estar destinada de esa manera, por ejemplo, mediante el formulario web con varios campos de entrada que tienen el mismo nombre de campo. Debido a esto, cualquier tipo de protección contra la contaminación por parámetros HTTP necesita saber qué tipo de URL o parámetros se esperan realmente.

El caso de uso del purificador de HTML es completamente diferente: desinfecte el HTML proporcionado por el usuario antes de que se incluya en algún HTML generado por el servidor. Un purificador de HTML no tiene idea de cómo debe ser la URL válida en el contexto de la aplicación y, por lo tanto, no puede ayudar a proteger contra la contaminación de parámetros HTTP.

Pero su uso podría empeorar el problema: por ejemplo, si la cadena de consulta de la URL tiene los parámetros foo=1&bar=2 , convertir esto a HTML dará como resultado foo=1&bar=2 , lo que resultará en la obtención de un parámetro amp;bar=2 extraído del bar=2 esperado.

    
respondido por el Steffen Ullrich 17.11.2018 - 10:20
fuente
0

La razón por la que OWASP advierte que busque &HPP_TEST es porque es un síntoma de la vulnerabilidad CLIENT-SIDE hpp. El ataque que estás describiendo es contra SERVER-SIDE hpp. Estas son dos cosas completamente diferentes.

Entonces, ¿qué es hpp del lado del cliente? Considera si te envío un enlace como:

www.example.com?name=avery%26action=delete .

Ahora el sitio generará html para ese enlace. Por ejemplo, podría tener etiquetas <a> que dependen de los parámetros. Si el sitio no es vulnerable, podría enviar algo inofensivo como

<a href="http://www.example.com/showMessage?name=avery%26action=delete">View</a>

Pero si el sitio es vulnerable, podría enviar un código html como:

<a href="http://www.example.com/showMessage?name=avery&action=delete">View</a>

<a href="http://www.example.com/showMessage?name=avery&amp;action=delete">View</a>

Entonces, lo que sucedió es que el servidor ha sido manipulado para crear un enlace que tiene parámetros adicionales. Ahora, si usa www.example como lo haría normalmente, puede hacer clic en el enlace para encontrar que de alguna manera ha sido engañado para que elimine sus propios datos. Básicamente, OWASP le advierte que verifique si su servidor crea este tipo de HTML a partir de parámetros de URL.

En cuanto a si es seguro usar el purificador de HTML como una forma de prevenir contra hpp del lado del servidor; Diré que sí, funcionará en su caso, pero no es una solución tan buena, ya que significa que nunca podrá crear ninguna función que requiera más de un parámetro. Es mejor hacer una codificación de URL adecuada y validación de entrada.

    
respondido por el AlphaD 17.11.2018 - 11:55
fuente

Lea otras preguntas en las etiquetas