Robo de contraseñas mediante la suplantación de las barras de búsqueda de los navegadores (PoC js preventDefault)

Continuamente se publican en Internet listas de contraseñas de sitios comprometidos, amén de otro tipo de información delicada como números de tarjetas de crédito o cuentas bancarias. Seguro que en alguna ocasión habéis realizado una búsqueda mediante el navegador para comprobar que vuestra contraseña (o lo que sea) no se encuentra en esa enorme lista expuesta: pulsáis ctrl+f e introducís el texto en busca de coincidencias en la página y pensáis "total, como no introduzco mi contraseña en ningún formulario no hay peligro de que me la levanten"...

¡Error! Mediante Javascript es posible "secuestrar" el comando de búsqueda de cualquier navegador, de tal forma que podemos ejecutar un script malicioso al pulsar la combinación de teclas ctrl+f o
⌘+f. Esto se traduce en que podemos emular una barra de búsqueda falsa que sustituya a la barra real del navegador y a la hora de buscar el texto en la página todo lo que se escriba se mande a un servidor remoto.

Todo lo que tenemos que hacer es utilizar la función preventDefault, que cancela una acción por defecto y nos permite ejecutar otros eventos. El código genérico es muy sencillo:
$(window).keydown(function(evt){
                if((evt.which == "70" && (evt.metaKey || evt.ctrlKey))){
                        console.log("STRG+F");
                        evt.preventDefault();
                        /* display fake search */
                        $("#searchbox").slideDown(110);
                        $('#search').focus();

Y el resultado es más que creíble como podéis ver en las siguientes pruebas de concepto que emulan la barra de búsqueda de Chrome (1 y 2) o Firefox (1).

Fuentes:
Browser Event Hijacking
{ what's real and what's not }
How script kiddies can hijack your browser to steal your password

4 comentarios :

  1. Hola ke tal Vicente?
    Una duda, como haces para que el usuario inicie el script? es decir como hacer para secuestrar el comando de búsqueda?
    Gracias.

    ResponderEliminar
  2. Hola Javi,

    Con la función preventDefault anulamos el evento de abrir el cuadro de búsqueda del navegador y los sustituimos por una barra falsa que contiene un 'input value' (luego lo que hagamos con el texto introducido depende de la maldad de cada uno).

    Saludos!

    ResponderEliminar
  3. Amigo ha sido un excelente articulo, aunque lo interesante para mi ha sido mas a nivel de programacion, lo de preventDefault no lo sabia, es decir, como programador se le pueden dar muchos uso a esa funcion (6), bueno y ya con lo visto mejor descargar la lista de passwords y hacer una busqueda con bash por ejemplo xD

    Un saludo!

    ResponderEliminar