¿Se ejecutará JavaScript en un HREF?

2

Encontré un problema con un sitio donde puedo insertar una etiqueta de script en href de una etiqueta anchor :

<a href="<script>alert(8007)</script>">Click Me</a>

Lo que estoy tratando de determinar es, ¿cuál es la posibilidad de que un navegador, incluso uno más antiguo, ejecute este JavaScript ubicado dentro del HREF?

Entiendo que este valor debe codificarse antes de escribirse en la página, etc. Esta pregunta es estrictamente relacionada con el nivel de amenaza de la declaración anterior y la posibilidad de que un navegador ejecute el JavaScript al crear la página.

Me resulta más difícil probar las vulnerabilidades de xss ahora que los navegadores están haciendo un mejor trabajo de detección y protección contra ellas.

    
pregunta Brettski 21.02.2012 - 18:58
fuente

1 respuesta

6

No conozco ningún navegador que ejecute Javascript para el ejemplo particular que mencionas. Considero altamente improbable que cualquier navegador ejecute Javascript en esta situación. Esto no está relacionado con las nuevas protecciones en los navegadores modernos.

Sin embargo , sospecho que todavía eres vulnerable. Si un atacante puede insertar marcas en un atributo href, probablemente significa que pueden insertar lo que quieran. Y si un atacante puede insertar lo que quiera, entonces suceden cosas malas. Por ejemplo, el atacante puede hacer que se vea así:

<a href="javascript:alert(8007)">Click me</a>

Y eso es una mala noticia, porque los navegadores ejecutarán Javascript en esa situación. Así que esta es una forma en que un atacante podría intentar explotar la vulnerabilidad XSS.

Además, si no hay comillas alrededor del valor del parámetro href, habrá otras formas de atacar su sistema. Por ejemplo, <a href=blah onclick=alert(8007)>Click me</a> es una mala noticia y ejecutará Javascript. (Gracias a @AviD por señalar esto). Incluso si hay are comillas alrededor del valor del parámetro href, si el atacante controla completamente el valor colocado allí, el atacante podrá proporcionar su propias citas para romper el atributo y luego causar problemas, como esto: <a href="blah" onclick=alert(8007) ignoreme="blah">Click me</a> . (Aquí el atacante insertó el valor blah" onclick=alert(8007) ignoreme="blah ). Probablemente hay más ejemplos como este.

El resultado final. Definitivamente, recomiendo que corrijas la vulnerabilidad de XSS. Sospecho que usted está en riesgo. Los chicos malos han desarrollado una gran cantidad de formas sorprendentes e inteligentes de explotar las vulnerabilidades de XSS que no se puede esperar que conozcan; como resultado, si tiene una vulnerabilidad XSS, su mejor opción es solucionarla de manera preventiva y no arriesgarse.

Corrección de la falla. Para corregir la falla, te recomiendo que uses una combinación de validación y escape de salida. Primero, asegúrese de que el controlador de protocolo de la URL sea uno de un conjunto en lista blanca (por ejemplo, http , https , ftp , mailto ). Luego, aplique HTML escaping para escapar de todos los corchetes angulares, comillas y símbolos & antes de insertar la URL en el marcado, y asegúrese de que el valor del atributo esté rodeado de comillas.

La forma exacta de implementar esta solución depende del idioma, pero puede encontrar mucha información en la web sobre cómo evitar fallas de XSS en esta situación. Por ejemplo, después de asegurarse de que el valor dinámico contenga un protocolo seguro, en PHP podría usar htmlspecialchars(., ENT_QUOTES) para escapar de paréntesis, comillas y símbolos. O puede usar OWASP ESAPI , que proporciona ayuda para esta situación exactamente .

Para obtener más información, puedo recomendar Una buena introducción para desarrolladores web . Esto es solo una introducción y necesitará leer más, pero le ayudará a estar al tanto de las amenazas a un alto nivel. OWASP tiene algunos buenos recursos para defenderse contra XSS; por ejemplo, tienen una cheatsheet útil sobre cómo usar OWASP ESPI para evitar las vulnerabilidades de XSS .

    
respondido por el D.W. 21.02.2012 - 19:43
fuente

Lea otras preguntas en las etiquetas