2010-12-28 12 views
19

Se conocen atributo style ataques XSS como:ataques XSS y los atributos de estilo

<DIV STYLE="width: expression(alert('XSS'));"> 

O

<DIV STYLE="background-image: url(javascript:alert('XSS'))"> 

Todos los ejemplos I've seen utilizan ya sea la expresión o la funcionalidad url - básicamente la función de algo así como que requieren " ("y") ".

Estoy pensando siguiente método de filtrado de etiquetas de estilo, me gustaría comprobar que el uso de gramática siguiente (aproximadamente):

identifier: [a-zA-Z_][a-zA-Z0-9\-]* 
number: [0-9]+ 
string: '[a-zA-Z_0-9 ]*' 
value : identifier | number | string | number + "(em|px)" | number +"%" 
entry: identifier ":" value (\s value)* 
style: (entry ;)* 

Así que básicamente me permito propiedades ASCII con valores numéricos o valores de cadena muy limitados (básicamente para nombres de fuentes) que no permite usar nada que se parece a una llamada.

La pregunta es esta suficientemente buena? ¿Hay algún ataque que pueda hacer algo como eso?

<DIV STYLE="this-is-js-property: alert 'XSS';"> 

¿Y triunfar?

¿Alguien puede pensar en la vulnerabilidad XSS de tal prueba?

dejar claro

necesito atributos de estilo tantas herramientas como TinyMCE los utilizan y atributos filtrado inofensiva estilo fuera perjudicaría significativamente la funcionalidad.

Así que prefiero pasar casos comunes eliminando todo lo que pueda usar @import, url, expresión, etc. Y también asegúrese de que la sintaxis básica de css esté bien.

respuesta

No, no es seguro debido a clickjacking vulnerabilidad.

+1

buen trabajo, no sabía que muchos de este –

Respuesta

9

Esto no funciona debido a click-jacking vulnerabilidad.

Ejemplo:

<a href="http://example.com/attack.html" style="display: block; z-index: 100000; opacity: 0.5; position: fixed; top: 0px; left: 0; width: 1000000px; height: 100000px; background-color: red;"> </a> 

encontrar en: http://www.bioinformatics.org/phplabware/forum/viewtopic.php?id=164

el código sería perfectamente valida pero puede causar daños graves.

Así que, regla general, use una lista blanca muy estricta o no permita atributos de estilo.

+0

¡Buen punto! Creo que podríamos usar X-Frame-Options para defenderse de la vulnerabilidad de click-jacking hoy en día. – liweijian

3

Hay una base abierta denominada OWASP que le ayuda con esto.

Para responder a su pregunta Are there any attacks....; ¡Sí!

Hay toneladas de documentación allí, y hay bibliotecas que puede usar para escapar correctamente de todos los códigos XSS.

Lea el XSS prevention sheet.

+3

puede usted por favor más específico? ¿Algún ataque ** específico **? He buscado en estos sitios y no encontré nada que permita hacer tales ataques usando identificadores css, y solo números. Es por eso que estoy preguntando. – Artyom

+0

Hay muchísimas formas de codificar html. Puede usar entidades HTML para uno. La documentación de OWASP tiene todos los ejemplos, y las bibliotecas allí escapan de todas las posibilidades. –

+0

Las entidades de HTML y otras formas de codificación "cableadas" no están permitidas, como se puede ver en la gramática. Se permite un subconjunto de cadenas muy estricto. " – Artyom

1

Regla de seguridad n. ° 1: si tiene la menor duda, suponga que hay un orificio.

¿Qué estás tratando de lograr? ¿Qué funcionalidad causaría CSS de una fuente no confiable?

+0

tal vez un editor wysiwyg n usuario no confiable? –

+0

En mi caso, es un sistema de discusión, donde las personas pueden publicar comentarios en CommonMark + HTML, y pueden incluir atributos 'style = ...'. (No soy el póster original, solo tengo un "problema" similar). – KajMagnus

0

Sí, puede usar ataques XSS con atributos de Estilo. Se inyectaron

Estos estilos ya que no nos hemos declarado en ellas nuestras etiquetas en una página en particular JSP, pero atravesaron cuando auditado por nuestro grupo de seguridad:

<img src="<path here>" style=x:ex/**/pression 
(alert(54163)) ".gif" 

Estoy pensando en usar un filtro HTTP para detenerlo aquí, pero todavía estoy investigando.

Asimismo, no tenemos nuestros campos de entrada ocultos proteccted bien y esto conseguimos a través, así:

<input type="hidden" name="<variable name here>" value="<value here>" style=x:ex/**/pression(alert 
(54163)) ""> 

Con una herramienta como Burpsuite, puede modificar las peticiones sobre la marcha para inyectar XSS en etiquetas como esta . Sin embargo, con las API ESAPI de OWASP, puede agregar protección. No estábamos usando etiquetas JSTL ya que era código antiguo heredado, por lo que era la mejor solución a corto plazo.

Para la entrada oculta que utilicé;

<input type="hidden" name="id" value="<%=ESAPI.encoder().encodeForHTMLAttribute(id)%>" 

También puede utilizar XSS with the js onload event in an img tag:

+0

Pero en su caso, los atributos de estilo y src no se escapan correctamente, es decir, no pueden pasar sin comillas y contenido correctamente codificado. – Artyom

+0

Los XSS que muestro son los que realmente obtuvieron nuestro código js. –

Cuestiones relacionadas