document.cookie y su alcance

3

Hay alguna confusión básica que tengo.

Una víctima no sospechosa visita un sitio web vulnerable, vulnerable.com e inicia sesión allí. vulnerable.com , inicio de sesión posterior, envía una respuesta que tiene el siguiente conjunto de encabezado HTTP,

  

Acceso-Control-Permitir-Credenciales: Verdadero
  Access-Control-Allow-Origin: vulnerablesite.com

Digamos que la cookie de sesión está orientada solo a la ruta /home.html (lo que puede no tener mucho sentido, pero supongamos que, por el bien de esta discusión) y no tiene el conjunto de indicadores HTTPOnly.

Ahora, en el mismo navegador, abre una nueva pestaña y visita vulnerablesite.com/some_page.html Un atacante identifica un XSS almacenado en vulnerablesite.com/some_page.html y decide explotarlo para obtener acceso a la cookie de sesión del usuario en vulnerable.com .

Para hacerlo, el atacante inyecta un script AJAX en vulnerablesite.com/some_page.html , por lo que cuando la víctima visita la página, realizará una solicitud AJAX a vulnerable.com/home.html . Ahora, esta solicitud definitivamente tendrá éxito (no hay razón para no hacerlo y también porque Access-Control-Allow-Credentials era verdadero) y la respuesta que se recibe también será legible por el script AJAX del atacante (debido a que Access-Control-Allow-Origin se estableció en vulnerablesite.com , así que no hay violación de la misma política de origen)

Cuando el script AJAX del atacante dice xhr.response, este objeto de respuesta definitivamente contendrá la página /home.html .

La confusión principal está en torno a la ruta y los atributos de dominio de la cookie. Preguntas

  1. Entonces, en este caso, cuando el script del atacante dice document.cookie ahora, ¿Podrá el atacante leer la cookie de sesión de la víctima?
  2. porque la cookie tiene un alcance de /home.html , cualquier solicitud realizada a /home.html llevará esta cookie a lo largo. Pero porque la respuesta a /home.html no está haciendo un conjunto de cookies cuando el ajax del atacante decir document.cookie ¿qué será leído exactamente?
  3. no tiene idea de cuál sería el atributo de dominio de la cookie en este caso y cómo afectará la lectura de la cookie en De todos modos, si es que lo hará.
pregunta qre0ct 09.09.2016 - 14:09
fuente

2 respuestas

4
  

Entonces, en este caso, cuando el script del atacante dice document.cookie ahora,   ¿Podrá el atacante leer la cookie de sesión de la víctima?

No, la solicitud AJAX puede enviarse y leerse debido a la falla XSS, sin embargo, las cookies de la solicitud AJAX no pueden. document.cookie solo revelará las cookies disponibles para la página explotada inicial ( some_page.html ).

  

debido a que la cookie está orientada a /home.html, cualquier solicitud hecha a   /home.html llevará esta cookie a lo largo. Pero porque la respuesta a   /home.html no hace un set-cookie en absoluto, cuando ajax del atacante dice   document.cookie ¿qué será leído exactamente?

Nuevamente, document.cookie estará en el contexto de some_page.html en vulnerablesite.com , por lo tanto, no podrá leer el ámbito de la cookie para /home.html en vulnerable.com .

Incluso si home.html configuraba cookies, la recuperación del encabezado set-cookie estaría prohibida por la mayoría de los navegadores .

  

no tiene idea de cuál sería el atributo de dominio de la cookie en   este caso y cómo afectará la lectura de la cookie de cualquier manera   si es que lo hará.

El dominio se configurará en vulnerable.com como cookie solo para el host . Por lo tanto, no se puede leer por ej. foo.vulnerable.com .

Nota sobre CORS

No olvide que un origen debe tener un protocolo . Por lo tanto

Access-Control-Allow-Origin: vulnerablesite.com

Debería ser, por ejemplo,

Access-Control-Allow-Origin: https://vulnerablesite.com
    
respondido por el SilverlightFox 09.09.2016 - 14:42
fuente
5

Si los dominios eran los mismos, las cookies se configuraron en http://example.com/home/ y no tenían solo HTTP, pero había una vulnerabilidad XSS en http://example.com/vulnerable/ , entonces el atacante puede acceder a las cookies. pueden inyectar un iframe en la página y usar un script similar a document.getElementsByTagName("iframe")[0].contentDocument.cookie para acceder a las cookies.

Si los dominios son diferentes, como parecen estar en su pregunta, entonces no, no es posible acceder a las cookies. Todo lo que Access-Control-Allow-Credentials: true hace es decirle al navegador que está bien incluir credenciales (cookies y HTTP Basic Auth) en la solicitud, no expone esas credenciales al solicitante (a menos que el sitio web sea por alguna razón, incluidos los detalles del cookies en la respuesta, que hay muy pocas buenas razones para hacer).

Sin embargo, no es necesario poder acceder al valor real de la cookie para poder explotarla. El atacante realiza solicitudes autenticadas como usuario, y puede omitir cualquier protección CSRF (falsificación de solicitud entre sitios) leyendo el token CSRF del documento HTML que se devolvió desde la primera solicitud. Esto significa que, siempre que todos los puntos finales devuelvan los encabezados CORS relevantes (incluido Access-Control-Allow-Methods si algunos puntos finales requieren POST en lugar de GET), el atacante puede realizar las mismas solicitudes a través de AJAX como hubieran podido en su propia computadora con acceso a la cookie de sesión.

    
respondido por el JackW 09.09.2016 - 15:59
fuente

Lea otras preguntas en las etiquetas