José C. García Gamero

Minando con Coinhive, mediante ataque XSS

Posted on

Parece que siempre voy a empezar los post igual: “Hace mucho tiempo que no escribo nada y hoy quería hablaros sobre…”. Pero no, hoy no lo voy a hacer así. Hoy os voy a hablar directamente sobre el XSS y las consecuencias que puede traer cuando hablamos de cryptojacking.

Para los que no esteis muy puestos en el tema, el cryptojacking, no es más que introducir código de minado, mediante javascript, en una página web. Es decir, obligar al usuario a minar criptomonedas por nosotros. Con esta última frase, seguro que ya sabes de lo que hablo.

Pues bien, dicho esto, hoy voy a hacer una prueba de cómo se podría llevar a cabo este tipo de ataque, y cómo lo podemos evitar. En primer lugar he preparado un formulario. Sencillo y sin historias. Es para una prueba, no quería que me costara más tiempo hacerlo bonito que el tiempo que me iba a llevar hacer la prueba en sí.

No me digáis que no es bonico. Bueno, ya tenemos el formulario, en este caso, lo único que vamos a hacer es imprimir por pantalla lo que introduzcamos por teclado. Imaginaros por un momento que es un comentario. Si hacemos la prueba, la respuesta que nos daría es la siguiente:

Como veis no hay mucha parafernalia. Escribimos, le damos a buscar, que en este caso sería introducir comentario y nos imprime el comentario. Ahora vamos a introducir un bonito javascript. Se trata de un código de Coinhive que hemos obtenido de una web que sabíamos que minaba.

No voy a poner el código entero, pero se puede coger cualquiera. Este es el estado de mi CPU, antes de darle a enviar con el formulario:

Como podéis comprobar, la CPU está totalmente tranquila con Firefox, pero ahora le vamos a dar poco de movimiento.

Ya hemos introducido el código de javascript en la página web.

Si pensamos que es un comentario, ese comentario debe estar guardado en algún sitio. En este caso vamos a guardar el comentario en una base de datos y vamos a imprimirlo por pantalla.

Como podéis ver, ya hemos introducido el script en la base de datos y, automáticamente, está ejecutándolo nuestro navegador.

Esto con Firefox si se puede hacer, pero si lo intentamos hacer con Google Chrome, el resultado es el siguiente:

Te sale la advertencia de que ha habido una inyección XSS, pero el dato ya está guardado en la base de datos, es decir, no te lo va a mostrar a ti, que eres el que lo ha inyectado, pero si se lo va a mostrar a los visitantes. Simplemente recargamos la página y:

Como podéis comprobar, realizar este tipo de ataque es muy sencillo, si el desarrollador de la página web, no ha tomado las medidas de precaución adecuadas.  Ahora vamos a ver cómo podemos evitar este tipo de ataques.

En primer lugar, vamos a irnos a la parte del formulario, y añadimos una pequeña linea de código “strip_tags”.

Ahora todo lo que se introduzca en nuestro formulario, pasará a ser texto plano, ya que las etiquetas, serán eliminadas. El resultado sería este:

Con una simple linea de código, ya tenemos parte del problema solucionado. Si no hubiésemos tomado esta medida en el código, pero hubiésemos configurado el X-XSS-Protection de manera correcta y las Content-Security-Policy de nuestro servidor también, el código tampoco se habría ejecutado. Así que es importante realizar estos dos pasos.

Aquí os dejo información sobre X-XSS-Protection y las Content-Security-Policy

Deja un comentario

Your email address will not be published.*
*
*

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información ACEPTAR

Aviso de cookies