sábado, 9 de diciembre de 2017

Pastejacking: usando Javascript para sobrescribir el portapapeles con contenido malicioso


La técnica llamada pastejacking permite sobrescribir el portapapeles del usuario (normalmente después de control+c), de tal manera que cuando el usuario quería pegar el texto original (normalmente con control+v) éste ya había sido sustituido por contenido malicioso.

Los navegadores permiten a los desarrolladores añadir automáticamente el contenido al portapapeles de un usuario, dependiendo de ciertas condiciones, normalmente mediante eventos del navegador.

Dylan Ayrey aka dxa4481 ha desarrollado una técnica bautizada como pastejacking que se aprovecha de ésto para engañar al usuario y conseguir que ejecute comandos maliciosos.

Cabe señalar que durante un tiempo también se podían realizar ataques similares a través de HTML/CSS. La diferencia con esta técnica es que el texto puede ser copiado después de un evento o copiado después de un breve periodo de tiempo, y puede ser utilizado para explotar VIM, como se muestra a continuación.

Demo


El siguiente sitio sugiere al usuario copiar un inocente comando: https://security.love/Pastejacking

echo "not evil"

Si el usuario lo copia con la típica combinación de teclas ctrl+c o command+c se establece un temporizador de 800 ms y sobrescribirá el portapapeles del usuario con código malicioso:

echo "evil"\n

El salto de línea que se incluye al final hará que se ejecute el comando sin darle al usuario la oportunidad de revisarlo.

A partir de ahí se pueden usar payloads más sofisticados. Tenemos otro ejemplo en https://security.love/Pastejacking/index3.html:

touch ~/.evil
clear
echo "not evil"

Este comando creará un archivo malicioso en el directorio personal y limpiará la salida del terminal. La víctima verá sólo como su comando se ha pegado en el terminal.

Impacto


Este método se puede combinar con un ataque de phishing para atraer a los usuarios y que ejecuten comandos aparentemente inofensivos. El código malicioso reemplazará el código inocente, y el atacante podrá conseguir la ejecución remota de código en el host del usuario si el usuario pega el contenido en el terminal.

¿Cómo protegerse?


No es sencillo establecer contramedidas. Una solución podría ser la de verificar el contenido del portapapeles antes de pegarlo en un terminal, pero hay que tener cuidado dónde se verifican estos comandos. Por ejemplo si se pegan en vim, las macros de vim pueden utilizarse para la explotación:

copyTextToClipboard('echo "evil"\n \x1b:!cat /etc/passwd\n');

Esto hará que se muestre el contenido del fichero passwd cuando el comando se pegue en vim.

Un workaroung para ello sería:

"+p       -- within vim to paste clipboard without interpreting as vim command

Por otro lado si el usuario está ejecutando iTerm recibirá un aviso de que el comando termina con un salto de línea:


Por supuesto, dejando a un lado éstos tecnicismos, no hace falta decir que hay que tener especial cuidado a la hora de copiar y pegar de fuentes cuestionables.