Hay amenazas que requieren de la interacción del usuario para llevar a cabo su cometido malicioso, y a veces incluso el resultado se evidencia a simple vista. Sin embargo, hay mecanismos de infección que son imperceptibles para el usuario, y ocurren sin darle indicios de lo sucedido. En esta ocasión, queremos presentarles un método clásico: ejecutar código PHP en un HTML.
Si hablamos de lenguajes como HTML y PHP, veremos que son de los más utilizados al desarrollar aplicaciones web. Su masividad es evidente y todos los servidores web habituales los soportan, cosa que no sucede con lenguajes menos convencionales como Ruby o Django, el framework web de Python.
HTML se asocia habitualmente con sitios web estáticos, a saber, sitios que “presentan” la información y no están diseñados para interacciones con el usuario, simplemente dirigirse de una página hacia otra. Al acceder a una página en HTML podemos inspeccionar el código fuente sin llevar a cabo acciones complejas (todos los navegadores proveen una opción de “Ver el código fuente” de la página, normalmente haciendo clic derecho sobre la misma).
Por otro lado, PHP está asociado a sitios dinámicos, en los cuales el usuario interactúa de forma más compleja, como por ejemplo con un calendario. A su vez presenta más funcionalidades, como poder interactuar con una base de datos. El código no es accesible para el cliente como sucede con HTML, por lo que la ejecución del script (que se ejecuta en el servidor donde se encuentra alojada la aplicación) es transparente al usuario.
Ahora, ¿cómo se relaciona todo esto? Gracias a una particularidad importante: se puede lograr que un servidor web reconozca documentos HTML como PHP. Por ejemplo, si dispongo de un servidor Apache, puedo agregar un archivo .htaccess con el siguiente contenido:
Esto hará que el servidor reconozca los documentos con extensión HTM y HTML como scripts PHP válidos para su ejecución. Por eso, si yo agrego código PHP en un archivo HTML (ver siguiente imagen), podré ejecutarlo de forma invisible para el usuario, incluso agregando un script con comportamiento malicioso:
En dicho script se podría por ejemplo verificar la versión de Java disponible en el navegador, de forma que si es una versión desactualizada se la podrá aprovechar con las vulnerabilidades que la misma presenta. Si vemos el código HTML de la página, observaremos que no hay rastros del script:
Este mecanismo es utilizado por exploits para aprovechar vulnerabilidades presentes en el cliente. Por eso, recomendamos contar con una solución de seguridad para evitar ser víctimas de las amenazas que lo utilicen. En las próximas entradas les mostraremos otros mecanismos de infección habituales en amenazas y que llevan a cabo su cometido de forma imperceptible.