Cómo lograr que miles de personas minen criptomonedas para ti con solo estudiar la documentación de Express.js.

Una herramienta popular para automatizar tareas de repente empezó a «quemar» procesadores en todo el mundo. Los propietarios de servidores se quejaban de una carga de CPU del 100%, y la causa resultó ser banal y desagradable: atacantes instalaban masivamente minero oculto a través de vulnerabilidades de ejecución remota de comandos.
En el centro del incidente se encontraba el proyecto Qinglong – un panel para programar tareas que a menudo se despliega en los propios servidores. La plataforma admite scripts en Python, JavaScript y otros lenguajes y es especialmente popular entre desarrolladores chinos. Muchos lo ejecutan en máquinas virtuales en la nube o en servidores domésticos y exponen el acceso a través de internet.
Los primeros avisos aparecieron el 7–8 de febrero de 2026. Los usuarios empezaron a notar un proceso extraño llamado «.fullgc», que cargaba la CPU entre el 85% y el 100%. Más tarde quedó claro que, mediante el panel de control, los atacantes desplegaban un minero de criptomonedas. La comunidad angloparlante casi no prestó atención a lo ocurrido: la discusión se desarrolló principalmente en foros chinos y en GitHub.
La raíz del problema se descubrió solo a finales de febrero. En la versión 2.20.1 y en las anteriores se hallaron dos vulnerabilidades de elusión de autenticación, identificadas como CVE-2026-3965 y CVE-2026-4047. Ambas permitían ejecutar comandos en el servidor sin iniciar sesión.
El primer fallo se debió al manejo incorrecto de las rutas en la parte del servidor con Express.js. La aplicación reescribe las solicitudes, y un atacante podía aprovechar esto para restablecer las credenciales del administrador con un solo comando. Tras ese restablecimiento, el panel pasaba completamente bajo control del atacante.
La segunda vulnerabilidad resultó aún más simple. La verificación de acceso tenía en cuenta las mayúsculas y minúsculas en la ruta, mientras que el propio servidor no. Bastaba con cambiar la escritura de una parte de la URL para eludir la protección y enviar directamente un comando para su ejecución. En ese caso no se requería contraseña.
Mediante la vulnerabilidad, el atacante modificaba el archivo de configuración añadiendo un script maligno. Ese script descargaba un binario desde un servidor remoto, lo guardaba con el nombre oculto «.fullgc», lo ejecutaba en segundo plano y añadía un mecanismo de autoinicio. El nombre no fue elegido al azar: en el entorno Java el término «Full GC» a menudo se asocia con carga de CPU, por lo que un administrador podía atribuir el problema a procesos normales.
Los informes de infecciones procedían de usuarios con distintas configuraciones, incluidos servidores tras proxies inversos y con cifrado activado. Proveedores en la nube, por ejemplo Alibaba Cloud, empezaron a marcar esos sistemas como participantes en minería. En un caso los atacantes, mediante el mismo panel, obtuvieron acceso al sistema de monitorización y vieron de inmediato cientos de máquinas.
Los intentos por cerrar la brecha inicialmente siguieron un camino equivocado. En el proyecto se propuso bloquear comandos sospechosos como curl y wget en las tareas. Ese enfoque no resuelve el problema, porque la vulnerabilidad está más abajo: en el mecanismo de verificación de acceso. Al final el desarrollador se centró en corregir precisamente esa lógica, lo que resultó ser la solución adecuada. Los propietarios de sistemas deben comprobar sus servidores en busca de rastros de «.fullgc», actualizar las versiones y recrear los contenedores a partir de imágenes limpias. El simple borrado del contenedor no es suficiente: el código malicioso se conserva en los volúmenes montados.
La situación recuerda que cualquier servicio accesible desde internet se convierte en objetivo. Incluso herramientas de nicho como los programadores de tareas atraen a atacantes si permiten ejecutar comandos. Además, minería de criptomonedas es una de las formas más sencillas de monetizar un hackeo: la carga es visible, pero a menudo se tarda mucho en encontrar la fuente.