2012-06-27 6 views
9

Después de leer este artículo que no tengo una respuesta clara:¿Se pueden explotar los URI de datos en <img> s XSS?

http://palizine.plynt.com/issues/2010Oct/bypass-xss-filters/

  • Will navegadores interpretar text/html URI de datos de carga útil en <img>src como un documento en el que se ejecutan <script> etiquetas?

  • Si no es así, ¿es seguro permitir los URI de datos en HTML de terceros?

  • ¿Qué mecanismos de seguridad existen en el nivel del navegador para este caso de uso?

+0

Al menos no está entre las formas mencionadas aquí http://ha.ckers.org/xss.html – BalusC

+0

Muy buen sitio, pero Netscape 8 es un poco anticuado ... :) Tal vez alguna información actualizada en algún lado –

Respuesta

9

El MSDN documentation dice IE no:

Por razones de seguridad, URIs de datos están restringidos a los recursos cargados. Los URI de datos no se pueden usar para navegación, scripts ni para llenar elementos frame o iframe.

Por otra parte, Mozilla sí permite iframe y script ejecución:

de datos: las direcciones URL que heredan el origen de su referente les permite ser utilizados para generar o contenido de la ventana con la que el padre puede interactuar. Gecko siempre lo ha hecho de esta manera (y tenemos un montón de controles de seguridad dispersos que tienen que preocuparse).

Safari y Chromium caja de arena datos ejecución URI, el tratamiento eficaz de ellos como solicitudes de dominios.

Actualmente marcamos que los URI no tienen acceso a ningún otro origen, incluidos otros datos: URI.

La especificación HTML5:

si un documento o imagen se generan a partir de un conjunto de datos: URL que se devuelve como la ubicación de un redireccionamiento HTTP (o su equivalente en otros protocolos)

El origen es el origen de la URL que redirigió a los datos: URL.

Si se generó un documento o imagen de un conjunto de datos: URL encontrado en otro documento o en un script

El origen es un alias para el origen especificado por la configuración titulares objetar cuando se invoca el algoritmo de navegar, o , si no se trataba de ninguna secuencia de comandos, del documento de nodo del elemento que inició la navegación a esa URL.

Si se obtuvo un documento o imagen de alguna otra manera (p.a data: URL ingresada por el usuario, un documento creado con la API createDocument(), un data: URL devuelto como la ubicación de un redireccionamiento HTTP, etc.)

El origen es un identificador global único asignado cuando el documento o la imagen es creada.

Y el RFC6454 añade:

Un URI no es necesariamente del mismo origen con ella misma. Por ejemplo, un URI de datos [RFC2397] no es el mismo origen consigo mismo porque los URI de datos no usan una autoridad de nombres basada en el servidor y, por lo tanto, tienen identificadores únicos a nivel mundial como orígenes.

El CSSHTTPRequest library utiliza URIs de datos para hacer peticiones GET de cross-site, pero eso es lo más que puede hacer en todos los navegadores.

Referencias

+0

por lo que esto significa que no es seguro en mozilla? pero seguro en el resto? – pvgoddijn

+0

@pvgoddijin Yo [no] (https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2009-3013) [necesariamente] (https: //web.nvd.nist. gov/view/vuln/detail? vulnId = CVE-2012-2899) [say] (https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2012-6463) [that] (https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2011-2609). [Ever] (https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2009-3016). –

1

Es posible inyectar datos de esta manera, pero es importante tener en cuenta que también es posible Inyectar datos en los datos binarios de las imágenes. De cualquier manera, nada es 100% seguro. NUNCA. Si está utilizando el marco CodeIgniter, puede muy sólidamente protegerse de esto con

$this->security->xss_clean() 

Aparte de eso pude podría construir su propia versión de un guión de tal manera que sólo elimina las cosas peligrosas con expresiones regulares. Recuerde estar preocupado por las diferentes codificaciones de caracteres cuando construya una secuencia de comandos.

Cuestiones relacionadas