Durante al menos tres años, los piratas informáticos han abusado de un zero-day en uno de los plugins de jQuery más populares, para plantar shells en web y tomar control de servidores web vulnerables.
La vulnerabilidad afecta al plugin jQuery File Upload creado por el prodigioso desarrollador alemán Sebastian Tschan, más conocido como Blueimp.
El plugin es el segundo proyecto jQuery más destacado en GitHub, después del propio jQuery framework. Es inmensamente popular, se ha bifurcado más de 7.800 veces y se ha integrado en cientos, si no miles, de otros proyectos, como CMS, CRM, soluciones de Intranet, complementos de WordPress, complementos de Drupal, componentes de Joomla, etc.
Una vulnerabilidad en este complemento sería devastadora, ya que podría abrir vacíos de seguridad en muchas plataformas instaladas en muchos lugares sensibles.
Este escenario del peor de los casos, es exactamente lo que sucedió. A principios de este año, Larry Cashdollar, un investigador de seguridad para SIRT (Equipo de Respuesta de Inteligencia de Seguridad) de Akamai, descubrió una vulnerabilidad en el código fuente del complemento que maneja las cargas de archivos a los servidores PHP.
Cashdollar dice que los atacantes pueden abusar de esta vulnerabilidad para cargar archivos maliciosos en servidores, como puertas traseras y shells en web.
El investigador de Akamai dice que la vulnerabilidad ha sido explotada libremente. «He visto cosas desde 2016», dijo el investigador a ZDNet en una entrevista.
La vulnerabilidad fue uno de los secretos peor guardados de la escena hacker y parece haber sido explotada activamente, incluso antes de 2016.
Cashdollar encontró varios videos de YouTube que contienen tutoriales sobre cómo se podría explotar la vulnerabilidad del complemento de carga de archivos jQuery para tomar control de los servidores. Uno de los tres videos de YouTube que Cashdollar compartió con ZDNet data de agosto de 2015.
Es bastante claro en los videos que la vulnerabilidad era ampliamente conocida por los piratas informáticos, incluso si seguía siendo un misterio para la comunidad infosec.
Pero ahora se están tomando medidas para abordarlo, se le asignó a la vulnerabilidad el identificador CVE-2018-9206 a principios de este mes, un buen punto de partida para que más personas presten atención.
Todas las versiones de carga de archivos jQuery anteriores a 9.22.1 son vulnerables. Dado que la vulnerabilidad afectó al código para manejar las cargas de archivos para aplicaciones PHP, otras implementaciones del lado del servidor deben considerarse seguras.
Cashdollar reportó el zero-day a Blueimp a principios de mes, quienes rápidamente examinaron el informe.
La investigación del desarrollador identificó la verdadera fuente de la vulnerabilidad, no en el código del plugin en sí, sino en un cambio realizado en el proyecto del servidor web Apache que se remonta a 2010, lo que indirectamente afectó el comportamiento esperado del plugin en los servidores de Apache.
El problema real se remonta al 23 de noviembre de 2010, solo cinco días antes de que Blueimp lanzara la primera versión de su complemento. Ese día, la Fundación Apache lanzó la versión 2.3.9 del servidor HTTPD de Apache.
Esta versión no era nada fuera de lo común, pero incluía un cambio importante, al menos en términos de seguridad. A partir de esta versión, el servidor HTTPD de Apache obtuvo una opción que permitiría a los propietarios de servidores ignorar las configuraciones de seguridad personalizadas realizadas en carpetas individuales a través de archivos .htaccess. Esta configuración se realizó por razones de seguridad, se habilitó de forma predeterminada y se mantuvo así para todas las versiones posteriores del servidor HTTPD de Apache.
El complemento de carga de archivos jQuery de Blueimp fue codificado para confiar en un archivo .htaccess personalizado para imponer restricciones de seguridad a su carpeta de carga, sin saber que cinco días antes, el equipo HTTPD de Apache realizó un cambio importante que socavó el diseño básico del complemento.
«Internet se basa en muchos controles de seguridad todos los días para mantener seguros nuestros sistemas, datos y transacciones», dijo Cashdollar en un informe publicado hoy. «Si uno de estos controles no existe de repente, puede poner la seguridad en riesgo, sin saberlo, para los usuarios y los desarrolladores de software que confían en ellos».
Desde que notificó a Blueimp sobre su descubrimiento, Cashdollar ha pasado su tiempo investigando el alcance de esta vulnerabilidad. Lo primero que hizo fue mirar todas las ramificaciones (forks) de GitHub que han brotado del complemento original.
«Probé 1000 de las 7800 bifurcaciones del complemento de GitHub, y todas fueron explotables», dijo Cashdollar a ZDNet. El código que ha estado usando para estas pruebas está disponible en GitHub, junto con una prueba de concepto para el defecto en sí.
Pero todavía hay mucho trabajo por delante, ya que muchos proyectos quedan sin probar. El investigador ya ha notificado a US-CERT sobre esta vulnerabilidad y su posible impacto. Un paso siguiente, dijo Cashdollar a ZDNet, sería contactar a GitHub para pedirle ayuda a todos los propietarios de proyectos de bifurcaciones.
Pero mirar en las ramificaciones de GitHub es solo el primer paso. Existen innumerables aplicaciones web donde el plugin ha sido integrado. Un ejemplo es Tajer, un complemento de WordPress que Cashdollar identificó como vulnerable.