CSRF Lab 2
Skills
- CSRF where token validation depends on request method
Certificaciones
- eWPT
- eWPTXv2
- OSWE
- BSCP
Descripción
Este laboratorio
es vulnerable
a un ataque CSRF
en la funcionalidad
de cambio de correo electrónico
. La web
intenta bloquear
los ataques CSRF
, pero solo aplica contramedidas a ciertos tipos de solicitudes
. Para resolver
este laboratorio
, debemos usar nuestro servidor de explotación
para alojar
una página HTML
que lleve a cabo un ataque CSRF
para cambiar
la dirección de correo electrónico
del usuario
que visualice
el mensaje
. Podemos iniciar sesión
en nuestra propia cuenta utilizando las credenciales wiener:peter
Resolución
Al acceder
a la web
vemos esto
Pulsamos sobre My account
y nos logueamos
con las credenciales wiener:peter
Vemos que hay un botón
para cambiar
el email
Para resolver
el laboratorio
, debemos explotar
un CSRF
, el cual es una vulnerabilidad
de seguridad web
que permite a un atacante
inducir a los usuarios
a realizar acciones
que no tienen intención
de realizar. Permite a un atacante
eludir parcialmente la política
de same origin
, que está diseñada para evitar que diferentes sitios web
interfieran entre sí. Para que sea posible un ataque CSRF
, deben cumplirse tres condiciones clave
Una acción relevante
- Hay unaacción
dentro de laaplicación
que elatacante
tienemotivos
parainducir
. Puede ser unaacción privilegiada
(comomodificar
lospermisos
de otrosusuarios
) o cualquieracción
sobredatos específicos
delusuario
(comocambiar
lacontraseña
delusuario
)Manejo de sesiones basado en cookies
- Pararealizar
laacción
, se debenemitir
una o mássolicitudes HTTP
, y laaplicación
se basa únicamente en lascookies de sesión
paraidentificar
alusuario
que realizó lassolicitudes
. No existe ningún otromecanismo
pararealizar
elseguimiento
de lassesiones
ovalidar
lassolicitudes
de losusuarios
Sin parámetros de solicitud impredecibles
- Lassolicitudes
que realizan laacción
no contienen ningúnparámetro
cuyosvalores
elatacante
no puedadeterminar
oadivinar
. Por ejemplo, alhacer
que unusuario
cambie sucontraseña
, lafunción
no esvulnerable
si unatacante
necesitasaber
elvalor
de lacontraseña existente
Las defensas
más comunes
contra ataques CSRF
con las que nos podemos encontrar son las siguientes
Token CSRF
- Es untoken
único, secreto e impredecible generado por elservidor
ycompartido
con elcliente
. Para realizar unaacción sensible
, comoenviar
unformulario
, elcliente
debe incluir estetoken
. Esto dificulta que unatacante
generesolicitudes
válidas en nombre de lavíctima
Cookies SameSite
-SameSite
es unmecanismo
deseguridad
delnavegador
queregula cuándo se incluyen las cookies en las solicitudes de otros sitios web
. Dado que lassolicitudes
para realizaracciones sensibles
suelen requerir unacookie válida
, es decir, unacookie
que haya sido asignada tras unaautenticación válida
, lasrestricciones
que aplicaSameSite
pueden impedir que unatacante
desencadene estasacciones
. Desde 2021,Chrome aplica por defecto las restricciones Lax SameSite
, dado que este es elestándar
, se espera que otrosnavegadores
también loadopten
Validación basada en Referer
- Algunasaplicaciones
hacen uso de lacabecera HTTP Referer
para intentardefenderse
deataques CSRF
, normalmenteverificando
que lapetición
seoriginó
en el propiodominio
de laweb
. Esto suele ser menos efectivo que lavalidación
detokens CSRF
Si nos fijamos en la petición
de cambiar email
, vemos que cumple estas tres condiciones
para ser vulnerable
pero que también se está transmitiendo un token CSRF
Los tokens CSRF
no tienen por qué enviarse como parámetros ocultos
en una solicitud POST
, por ejemplo, algunas aplicaciones usan tokens CSRF
en los encabezados HTTP
. La forma en que se transmiten los tokens
tiene un impacto significativo
en la seguridad
de un mecanismo
en su conjunto. En algunos casos, las aplicaciones
validan correctamente el token
cuando la solicitud utiliza el método POST
, pero omiten la validación
cuando se utiliza el método GET
. Si hacemos click derecho > Change request method
, podemos cambiar
el método
por el que se envía la petición
Al enviar la petición
, vemos que nos la toma como válida
Si nos dirigimos a nuestro perfil
, vemos que nos ha cambiado el email
correctamente
Una vez hemos comprobado
que acepta
el método GET
, tenemos que ver si podemos saltarnos
la validación
del token CSRF
si enviamos la petición
usando este método
Mandamos la petición
y es aceptada
, por lo tanto, podemos confirmar
que no se está validando
el token CSRF
si la petición
la mandamos por el método GET
Confirmamos que ha sido tramitada exitosamente
accediendo a nuestro perfil
Si inspeccionamos
el código
, vemos cómo se envía
el formulario
. Podemos usar
este formulario como modelo
para construir
nuestro propio payload
Si contamos Burpsuite Professional
podemos capturar
una petición
y pulsar click derecho > Engagement tools > Generate CSRF PoC
para que nos genere
un payload
Se nos genera este payload
, aunque es funcional, en la mayoría de ocasiones vamos a tener que retocarlo
un poco para mejorar
su desempeño
En mi caso prefiero construir
el payload
de forma manual
, como la solicitud
va por GET
, no tenemos que añadir el atributo method=GET
porque es el método de envío
por defecto
. Una vez creado, debemos pegar
el paylod
en el Exploit server
1
2
3
4
5
6
7
8
9
10
<html>
<body>
<form action="https://0aef003a04fed832802f26d100f900ee.web-security-academy.net/my-account/change-email">
<input type="hidden" name="email" value="pwned@gmail.com">
</form>
<script>
document.forms[0].submit();
</script>
</body>
</html>
Una vez hecho esto pulsamos sobre View exploit
para ver si nos cambia
el email
a nosotros y efectivamente
nos lo cambia
. Independientemente de como generemos el payload, para completar
el laboratorio
debemos pegarlo en el Exploit server
y pulsar sobre Delivery exploit to victim
. Debemos tener en cuenta que dos usuarios no pueden tener el mismo email
, por lo tanto, debemos cambiar nuestro email o cambiar el email en el payload que enviamos