ataques basados en CSS

33

Actualmente estoy trabajando en un complemento para un CMS que debería permitir a los editores de contenido escribir etiquetas de estilo en línea.

Estoy buscando consejos / enlaces sobre cómo se pueden abusar de los estilos en línea.

Parte del motivo del complemento es permitir una política de seguridad de contenido estricta (no se permiten los javascript en línea, pero sí los estilos en línea), lo que debería mitigar el impacto de cualquier desagradable que pueda agregarse a la página, pero no para los antiguos navegadores.

¿Funcionan los comportamientos de Microsoft para los estilos en línea?

Sé que la mejor solución para hacer este trabajo sería validar / sanear el CSS contra una lista blanca, pero esto requiere implementar un analizador de CSS y generar / mantener una lista blanca de propiedades. ¿Sería factible una lista negra de propiedades / patrones? (Soy consciente de los méritos relativos de la inclusión en listas blancas / negras, pero aquí está algo sesgado porque solo debería haber un número finito de vectores de ataque).

Actualizar

Solo para aclarar, ya que los editores de contenido deberían ser confiables, la mitigación de los ataques podría ser una solución más pragmática que la prevención.

También, acabo de encontrar un ejemplo específico en CVE-2011-0232 , aunque estoy más interesado en los casos en los que no hay una vulnerabilidad intrínseca en una implementación, sino un defecto de diseño.

    
pregunta symcbean 21.06.2013 - 13:10
fuente

1 respuesta

26

Con respecto a JavaScript:

En Internet Explorer y en algunos navegadores muy , es posible inyectar JavaScript en las hojas de estilo. Se describen varias formas de hacer esto en la Hoja de referencia de XSS Filter Evasion . Los tres temas principales son:

  1. imagen de fondo y similar: background-image: url('javascript:alert(/XSS/);')
  2. Expresión de JavaScript: width: expression(alert(/XSS/)) - confirmado trabajando en IE 7
  3. Cargando archivos .htc: behavior: url(/evil.htc) - confirmado trabajando en IE 7 a 9

Otros problemas con CSS:

Básicamente, cada recurso descargable (imagen, fuente, ...) puede tomar la capacidad de la red de visitantes y puede utilizarse para ejecutar ataques CSRF, espiar a los visitantes o ejecutar ataques DDOS en sitios web más pequeños.

Puede haber algunas formas en que se puede usar CSS para bloquear el navegador, tener mucha memoria o girar la CPU al 99% durante algún tiempo. CSS 3 admitirá muchas cosas extrañas que desea rechazar, incluidas cosas 3D y transiciones.

El diseño del sitio web se puede modificar libremente. Esto incluye cosas divertidas como intercambiar las posiciones de la búsqueda y la entrada de contraseña. Es posible que no sea posible usar estilos en línea, simplemente se consciente de ello.

Con respecto a las listas negras:

Una lista negra de patrones es una muy mala idea. Hay un gran número de formas de codificar CSS, los navegadores lo hacen todo de manera diferente. Los analizadores de CSS a menudo siguen el principio "basura en - CSS fuera". Además, debe tenerse en cuenta que los analizadores de CSS en general no se detienen en los errores, sino que intentan continuar analizando el texto.

En una prueba corta, podría encontrar un montón de definiciones válidas de background-color : ackground-color: , 2ackground-color: , ackground-color:0062ackground-color: , bac\k\g\r\o\u\nd-c\o\l\or: , %code% .

La solución pragmática:

  1. Escribe tu propio analizador. No lo haga completo ni compatible con las normas, sea sencillo y tenga una lista blanca de propiedades. Hay muchas más propiedades que usted no quiere que desea. Deseche cualquier basura.

  2. Mantén fuera a los navegadores que ejecutan JavaScript en CSS. Tendrá que investigar un poco aquí, pero IE 8 y superior ya no admiten la expresión JS. Los otros temas permanecen.

respondido por el copy 21.06.2013 - 16:32
fuente

Lea otras preguntas en las etiquetas