Investigadores de Sysdig han vinculado un segundo ataque al mismo servidor Langflow con JADEPUFFER, el operador basado en agentes de IA que documentaron a principios de este mes. El mismo operador ha sido detectado desplegando ENCFORGE, un nuevo ransomware compilado en Go diseñado para cifrar pesos de modelos, índices vectoriales, conjuntos de datos de entrenamiento y otros archivos de infraestructura de IA en el sistema de archivos del host.
El punto de entrada no cambió. Las versiones de Langflow anteriores a la 1.3.0 exponen el endpoint /api/v1/validate/code sin autenticación, permitiendo a cualquier atacante remoto ejecutar Python arbitrario en el servidor. La vulnerabilidad, CVE-2025-3248, tiene una puntuación CVSS de 9.8 y ha estado en el catálogo de vulnerabilidades explotadas conocidas de CISA desde el 5 de mayo de 2025.
La carga útil ENCFORGE
Los investigadores recuperaron el binario del servidor de comando y control del atacante, donde estaba oculto como /.lockd; una solicitud directa a /lockd devuelve 404, y el punto inicial lo oculta de un listado de directorio simple. El archivo es un ELF estático Go 1.22.12 empaquetado con UPX 5.20.
Las plataformas de inteligencia de amenazas no devolvieron detecciones ni para el hash empaquetado ni para el desempaquetado en el momento del análisis de Sysdig. El nombre interno del proyecto es encfile; el texto de error del binario hace referencia a una herramienta complementaria de generación de claves llamada keyforge. Ambas cadenas sobreviven a la recompilación del mismo código base y sirven como anclas de detección estables.
Su lista de extensiones predeterminada cubre checkpoints de PyTorch y TensorFlow, SafeTensors de Hugging Face, formato de intercambio ONNX, GGUF (el estándar actual para LLMs implementados localmente) y su predecesor GGML, índices vectoriales FAISS, conjuntos de datos de entrenamiento en Parquet y Arrow, arrays NumPy y registros de TensorFlow.
Una bandera --include permite al operador agregar patrones de archivo adicionales; el texto de ayuda integrado usa adaptadores de ajuste fino LoRA y pesos GGML heredados como ejemplos. La lista completa alcanza aproximadamente 180 extensiones. Esos ejemplos apuntan directamente a entornos de IA; un bloqueador de archivos genérico tendría poca razón para nombrar adaptadores LoRA o pesos GGML heredados.
ENCFORGE usa AES-256-CTR para los datos del archivo, con la clave simétrica por ejecución envuelta bajo una clave pública RSA-2048 integrada en esta compilación. En lugar de cifrar archivos completos, cifra regiones seleccionadas, la misma optimización de velocidad que usan los bloqueadores de clase LockBit y BlackCat.
Cada archivo procesado se renombra con una extensión .locked. El binario mata los procesos que tienen archivos abiertos antes de cifrar, maneja reinicios sin volver a cifrar archivos completados, deja notas de rescate como README, HOW_TO_DECRYPT y README_DECRYPT, y se elimina a sí mismo después de ejecutarse.
El binario ENCFORGE recuperado no tiene capacidad de exfiltración. No lleva código de red, cliente de almacenamiento en la nube ni mecanismo de preparación, y los investigadores no encontraron evidencia de exfiltración de datos, un sitio de filtraciones o un portal de pago Tor durante la sesión que observaron. Su único apalancamiento son los datos cifrados.
El contacto de extorsión incrustado en las notas de rescate es e78393397@proton.me, la misma dirección de Proton Mail utilizada en la campaña anterior. Sysdig describe esto como el vínculo de atribución más fuerte entre las dos operaciones.
De Langflow al host
Después de confirmar la ejecución de código, JADEPUFFER buscó credenciales en el contenedor y encontró el socket de Docker en /var/run/docker.sock. Su primer intento de extraer ENCFORGE del servidor de comando y control de GCP falló. En lugar de detenerse, se adaptó.
Durante cinco minutos y 24 segundos, el operador creó y revisó seis scripts de Python a través del mismo canal RCE de Langflow hasta que tuvo una ruta funcional al host. El primer script se construyó línea por línea, manteniendo cualquier solicitud individual inerte para la inspección basada en firmas.
A partir del segundo, el operador codificó cada script completo en base64 y lo decodificó dentro de una llamada exec(), evitando búsquedas a nivel de shell de comandos como base64 -d. La versión final usó la API de Docker para crear un contenedor privilegiado con el espacio de nombres PID del host y el sistema de archivos raíz montado, localizó el proceso objetivo, copió ENCFORGE a través de /proc/<pid>/root y luego lo ejecutó en el host mediante nsenter.
En todas las iteraciones, los contenedores se crearon con Privileged: true, PidMode: host, NetworkMode: host y el sistema de archivos raíz montado en modo lectura-escritura. Eso es la raíz del host.
Antes de la ejecución en vivo, el operador lanzó --try-run para escanear el sistema de archivos, luego --lock para la pasada de cifrado en vivo. El script final verificó el estado del proceso, leyó el registro de bloqueo y contó los archivos que terminaban en .locked.
Los investigadores no publicaron el recuento resultante; la evidencia divulgada establece un intento de cifrado en vivo, no cuántos archivos de modelo o conjunto de datos se cifraron con éxito.
Sysdig evaluó la bandera --task-id gcp_h1 como evidencia de que el operador estaba rastreando este host como un objetivo de GCP dentro de una campaña más amplia; una prueba anterior en la sesión usó el ID de tarea gcp_test. El informe no reveló víctimas adicionales ni sitios de implementación.
Los investigadores documentaron que la campaña anterior de JADEPUFFER corrigió un inicio de sesión fallido de Nacos en 31 segundos. El mismo patrón se mantuvo aquí contra un problema más difícil: el operador construyó una fuga del host a través del socket Docker expuesto cuando su ruta de entrega preferida fue bloqueada.
Parchear Langflow, luego proteger los modelos
Los investigadores estiman que reconstruir un modelo de IA de producción una vez cifrado podría costar entre 75,000 y 500,000 dólares por modelo en cómputo de GPU en la nube y tiempo de ingeniería.
Los entornos de producción a menudo ejecutan múltiples variantes especializadas en almacenamiento compartido, por lo que una sola ejecución de ENCFORGE podría cifrar múltiples variantes almacenadas en el mismo sistema de archivos accesible. Si los datos de entrenamiento residen en el mismo host, la organización debe reconstruirlos antes de que pueda comenzar cualquier reentrenamiento.
Hash SHA-256 del binario: empaquetado 8cb0c223b018cecef1d990ec81c67b826eb3c30d54f06193cf69969e9a8baea2; desempaquetado ea7822eac6cecef7746c606b862b4d3034856caf754c4cf69533662637905328.
Sysdig ha publicado las direcciones de origen y C2, la huella de la clave RSA-2048 incrustada y una regla YARA en su informe completo.
- Actualizar Langflow a la versión 1.9.1 o una versión compatible actual. La versión 1.3.0 cerró CVE-2025-3248, pero CISA ha agregado dos vulnerabilidades más de Langflow a su catálogo KEV: CVE-2026-33017 (RCE no autenticado, corregido en 1.9.0) y CVE-2026-55255 (bypass de autorización entre usuarios, corregido en 1.9.1).
- Rotar claves de proveedores de IA, credenciales de nube, secretos de bases de datos y cualquier otro token accesible para el proceso de Langflow. Parchear no revoca credenciales ya cosechadas a través de una instancia vulnerable.
- Eliminar /var/run/docker.sock de cualquier contenedor que no lo necesite. Si el acceso al socket es inevitable, limítelo a través de un proxy estrechamente configurado.
- Alertar sobre procesos de aplicación que llamen a APIs de creación de contenedores Docker, contenedores lanzados con Privileged: true o PidMode: host, montajes bind de raíz del host y ejecución de nsenter desde dentro de un contenedor.
- Mantener pesos de modelos, índices vectoriales y conjuntos de datos de entrenamiento en instantáneas offline o inmutables. Monitorear esos directorios para la creación masiva de archivos .locked.
The Hacker News contactó al Equipo de Investigación de Amenazas de Sysdig para obtener más detalles sobre el alcance de la campaña y la confianza de atribución; Sysdig no había respondido al momento de la publicación.
Los artefactos de modelo ahora pertenecen al mismo nivel de recuperación que el código fuente y las bases de datos de producción. Una organización que puede reconstruir la aplicación pero no puede restaurar sus pesos, índices o estado de entrenamiento no tiene una ruta limpia de regreso.