Nuestro compañero de ingeniería en Faast - el servicio de pentesting persistente - en Eleven Paths Ricardo, llevaba un tiempo dándole vueltas a las opciones de Auto-relleno de formularios de Google Chrome, hasta que ha dado con un fallo de seguridad que permite explotar y robar los datos de los clientes sin que estos se den cuenta, tal y como hemos publicado en el blog de Eleven Paths.
Para poder entender la idea, primero hay que presentar el concepto de Auto-relleno de formularios que Google Chrome añadió hace un tiempo. Asociados a la cuenta de Google, se pueden tener una serie de campos rellenos con los datos que habitualmente se solicitan en los formularios de Internet. Estos campos pueden ser los datos personales, tales como nombre, apellidos, número de teléfono, pero también la tarjeta de crédito.
Figura 1: Opciones de campos que se pueden guardar para formularios de autorelleno |
Para que estos datos puedan ser solicitados en "autorelleno" por un formulario de una página web, los inputs del form deben venir con la propiedad de "autofill", tal y como se puede ver en la siguiente imagen.
Figura 2: Formulario con solicitud de campos en autorelleno |
Por seguridad, Google Chrome protege el envío de datos a los servidores con diferentes técnicas. La primera de ellas es que los datos más sensibles, tales como el número de la tarjeta de crédito, solo se permiten enviar vía conexiones HTTP-s, por lo que para hacer este ataque será necesario que el servidor esté operando con un certificado y vía SSL.
Las siguientes protecciones son más interesantes, ya que si el creador de un formulario con autorelleno creara los campos hidden o invisibles, entonces el usuario no se estaría dando cuenta de todos los datos que está enviando, lo que deja a las claras que l@s chic@s de Google han estado dándole vueltas a diferentes formas en que pudiera ser atacada esta propiedad.
Sin embargo, a nuestro compañero se le ocurrió que sería mucho más sencillo poner todos los datos en del formulario bien visibles aparéntemente, tal y como se puede ver en esta imagen.
Figura 3: Creación de un formulario con autorelleno con 19 campos |
Y luego meter ese formulario en una capa DIV de menor tamaño que sólo permitiera ver los campos que le interesara al atacante, quitando la barra de scroll de la ecuación, con lo que aparentemente no se estaría accediendo a ningún dato más que lo que se ve.
Figura 4: La capa evita que el usuario vea todos los valores |
Pero el atacante podría acceder a todos los que hubiera querido, y el usuario no habría sido consciente de ello, tal y como se aprecia en los datos que llegan al servidor controlado por el atacante.
Es un bug muy fácil de explotar y con un alto impacto en la privacidad de los usuarios, por lo que esperemos que pronto sea resuelto en una nueva versión de Google Chrome.
Saludos Malignos!
Hola Chema,
ResponderEliminarUna pregunta para evitar todo esto,hasta que parcheen el chrome, creo que, con solo ir a Configuración > Contraseñas y Formularios y desmarcar las 2 opciones que hay.
Después ir a Herramientas > Borrar datos de navegación > "Eliminar datos guardados de la función Autocompletar" Seleccionar el origen de los tiempos para eliminarlo todo.
Tras hacer todos estos pasos, el chrome no sigue guardando los datos de autocompletacion. No ??
Maligno, ¿sabes que pagan por este tipo de bugs?
ResponderEliminarAcuerdate de pedir la recompensa.
Esto se publico hace ya tiempo:
ResponderEliminarBreaking Browsers: Hacking Auto-Complete
@Pedro Laguna, sí, por eso hay cosas que están bloqueadas como los campos hidden o la invisibilidad. Esto lo hace con capas saltándose las protecciones añadidas.
ResponderEliminarSaludos!
Este comentario ha sido eliminado por el autor.
ResponderEliminarRealmente bueno el trabajo de Ricardo!
ResponderEliminarIncreíble que después de 3 años de que se publicará (no conocía el enlace que ha puesto Pedro) el tema siga estando prácticamente igual.
Enhorabuena!
Recuerdo cuando probé lo de Jeremiah Grossman, Breaking Browsers: Hacking Auto-Complete, pero son cosas diferentes lo que exponía Jeremiah, era la extracción con un script de todos los valores de un input con x nombre asociado a unos valores. Son cosas diferentes. Por mi inexperiencia no lo reporté a google, otra vez será. Y gracias a Chema y a los comentarios.
ResponderEliminar@Chema Lei despues bien el articulo; mas bien el codigo, y tienes razon, comparten la misma idea pero la ejecucion es distinta. Pense que esto ya estaba superado, pero veo que no!
ResponderEliminarSupongo que en unos dias veremos algo parecido para IE? ;)