Los investigadores de Sysdig han vinculado un segundo ataque en el mismo servidor Langflow con JADEPUFFER, el operador impulsado por agentes de inteligencia artificial que documentó por primera vez a principios de este mes.
Ahora se ha visto al mismo operador desplegando APLICARun nuevo ransomware Go compilado diseñado para cifrar pesos de modelos, índices de vectores, conjuntos de datos de entrenamiento y otros archivos de infraestructura de IA en todo el sistema de archivos del host.
El punto de entrada no cambió. Versiones de Langflow anteriores a 1.3.0 exponer el /api/v1/validate/code punto final sin autenticación, lo que permite que cualquier atacante remoto ejecute Python arbitrario en el servidor. el defecto, CVE-2025-3248tiene una puntuación CVSS de 9,8 y ha estado en las vulnerabilidades explotadas conocidas de CISA. catalogar desde el 5 de mayo de 2025.
Como informó The Hacker News a principios de este mes, la operación anterior utilizó código Python desechable y MySQL. AES_ENCRYPT() función para cifrar y destruir datos en Nacos (el servidor de configuración de Alibaba) y bases de datos de producción.
el nuevo Carga útil ENCFORGE reemplaza esos scripts improvisados con herramientas compiladas dirigidas a las tiendas de modelos, bases de datos vectoriales y canales de capacitación que la primera campaña barrió en busca de credenciales.
La carga útil de 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 mantiene fuera de una lista de directorio simple. El archivo es un ELF Go 1.22.12 estático empaquetado en UPX 5.20.
Las plataformas de inteligencia de amenazas no arrojaron detecciones ni en el hash empaquetado ni 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 keygen complementaria llamada keyforge. Ambas cadenas sobreviven a la recompilación del mismo código base y sirven como anclajes de detección estables.
Su lista de extensiones predeterminada cubre puntos de control de PyTorch y TensorFlow, Hugging Face SafeTensors, formato de intercambio ONNX, GGUF (el estándar actual para LLM implementados localmente) y su predecesor GGML, índices vectoriales FAISS, conjuntos de datos de entrenamiento Parquet y Arrow, matrices NumPy y registros TensorFlow.
Un --include flag permite al operador agregar globs de archivos adicionales; el texto de ayuda incorporado utiliza adaptadores de ajuste fino LoRA y pesos GGML heredados como ejemplos. La lista completa incluye aproximadamente 180 extensiones. Esos ejemplos apuntan directamente a entornos de IA; un casillero de archivos genérico tendría pocas razones para nombrar adaptadores LoRA o pesos GGML heredados. Los investigadores interpretaron la elección como un objetivo deliberado, no como una cobertura incidental.
ENCFORGE utiliza AES-256-CTR para datos de archivos, con la clave simétrica por ejecución incluida en una clave pública RSA-2048 integrada compilada en esta compilación. En lugar de cifrar archivos completos, cifra regiones seleccionadas, la misma optimización de velocidad que utilizan los casilleros LockBit y BlackCat.
Cada archivo procesado se renombra con un .locked extensión. El binario elimina los procesos que mantienen los archivos abiertos antes de cifrarlos, maneja los reinicios sin volver a cifrar los archivos completados y arroja notas de rescate como README, HOW_TO_DECRYPTy README_DECRYPTy se elimina 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 filtración de datos, un sitio de filtración o un portal de pago Tor durante la sesión que observó. Su única ventaja son los datos cifrados.
El contacto de extorsión incluido en las notas de rescate es e78393397@proton.mela 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.
Los investigadores revelaron una sesión observada, no nombraron la organización y no proporcionaron ningún recuento de víctimas ni evidencia de otro despliegue de ENCFORGE.
De Langflow al anfitrión
Después de confirmar la ejecución del código, JADEPUFFER barrió el contenedor en busca de credenciales y encontró el socket 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 Langflow RCE hasta que tuvo una ruta funcional hacia el host. El primer script se creó línea por línea, manteniendo inerte cualquier solicitud para la inspección basada en firmas.
A partir del segundo, el operador codificó cada script completo en base64 y lo decodificó dentro de un exec() llamada, evitando búsquedas a nivel de shell de comandos como base64 -d. La versión final utilizó la API de Docker para activar un contenedor privilegiado con el espacio de nombres PID del host y el sistema de archivos raíz montado, ubicó el proceso de destino y copió ENCFORGE a través de /proc//rootluego lo ejecutó en el host a través de nsenter.
En todas las iteraciones, los contenedores se crearon con Privileged: true, PidMode: host, NetworkMode: hosty el sistema de archivos raíz de lectura y escritura montado en enlace. Esa 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 el pase 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 revelada establece un intento de cifrado en vivo, no cuántos archivos de modelo o conjunto de datos se cifraron con éxito.
Sysdig evaluó la --task-id gcp_h1 marcar como evidencia que el operador estaba rastreando este host como un objetivo de GCP dentro de una campaña más amplia; una prueba de ejecución anterior en la sesión utilizó el ID de tarea gcp_test. El informe no reveló víctimas adicionales ni sitios de despliegue.
Los investigadores documentaron la campaña anterior de JADEPUFFER corrigiendo un inicio de sesión fallido en Nacos en 31 segundos. El mismo patrón se mantuvo aquí frente a un problema más difícil: el operador construyó una ruptura de host a través del socket Docker expuesto cuando su ruta de entrega preferida estaba bloqueada.
Parche Langflow y luego proteja los modelos
Los investigadores estiman que reconstruir un modelo de producción de IA una vez cifrado podría costar entre 75 000 y 500 000 dólares por modelo en tiempo de ingeniería y computación de GPU en la nube.
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 capacitación se encuentran en el mismo host, la organización debe reconstruirlos antes de que pueda comenzar cualquier reentrenamiento.
Binario SHA-256: empaquetado 8cb0c223b018cecef1d990ec81c67b826eb3c30d54f06193cf69969e9a8baea2; desempaquetado ea7822eac6cecef7746c606b862b4d3034856caf754c4cf69533662637905328.
Sysdig ha publicado las direcciones fuente y C2, la huella digital de la clave RSA-2048 integrada y una regla YARA en su informe completo.
- Actualice Langflow a 1.9.1 o una versión compatible actual. Versión 1.3.0 cerrada
CVE-2025-3248el vector de entrada para esta campaña, pero desde entonces CISA ha agregado dos vulnerabilidades Langflow más a su catálogo KEV: CVE-2026-33017una falla de RCE no autenticada corregida en 1.9.0, agregada a KEV el 25 de marzo de 2026; y CVE-2026-55255una omisión de autorización entre usuarios corregida en 1.9.1, agregada el 7 de julio de 2026.
- Rote las claves del proveedor de IA, las credenciales de la nube, los secretos de la base de datos y cualquier otro token accesible al proceso de Langflow. La aplicación de parches no revoca las credenciales ya recopiladas a través de una instancia vulnerable.
- Eliminar
/var/run/docker.sock desde cualquier contenedor que no lo requiera. Cuando el acceso al socket sea inevitable, alcancelo a través de un proxy de configuración limitada; una implementación estándar de Langflow generalmente no necesita crear contenedores, y el acceso sin restricciones al socket Docker debe tratarse como una configuración incorrecta.
- Alerta sobre procesos de aplicaciones que llaman a las API de creación de contenedores de Docker, contenedores lanzados con
Privileged: true o PidMode: hostmontajes de enlace host-raíz y nsenter ejecución desde el interior de un contenedor.
- Mantenga los pesos de los modelos, los índices vectoriales y los conjuntos de datos de entrenamiento en instantáneas inmutables o fuera de línea. Supervise esos directorios para detectar
.locked creación de archivos.
Hacker News se puso en contacto con el equipo de investigación de amenazas de Sysdig para obtener más detalles sobre el alcance de la campaña de la flota y la confianza en la atribución; Sysdig no había respondido mediante publicación.
Los artefactos del 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 de regreso limpia.