首例 AI Agent 勒索攻击复盘|JADEPUFFER 是怎么从 Langflow 一路打到数据库加密的
勒索攻击早就不新鲜了,但 JADEPUFFER 还是让我愣了一下。
7 月 1 日,Sysdig 的威胁研究团队发布了一份报告,披露了全球首例被他们称为「agentic ransomware」的攻击。更直接地说,这不是一段人类写好的勒索脚本被上传执行,而是由一个 AI Agent 主导,从打进目标到数据库加密,再到留下勒索信息,整个过程几乎没有人坐在键盘前。受害者是一台暴露在公网上的 Langflow 实例,而真正被加密的,是另一台独立的生产数据库。
我以前对勒索软件的印象基本停留在「钓鱼邮件 + 横向移动 + 文件加密」这个三段式。但 JADEPUFFER 展现的,是一套完全由大模型驱动的决策链。它会在失败时自己改代码,会根据环境返回的 XML 调整请求格式,还会在 MySQL 外键检查失败时顺手关掉外键约束再执行删除。这不是人类偷懒写成的工具,而是一个能把自然语言目标翻译成多步系统操作的 Agent。
坦率的讲,读完报告之后,我第一反应不是害怕,而是「哦,原来 AI Agent 的反面这么快就来了」。我们这一两年都在讨论 Agent 能怎么提效、怎么写代码、怎么做客服,却很少认真讨论当它被用来做坏事时,防御体系能不能跟上。
事情的经过
JADEPUFFER 的入口是一个已经在 2025 年 5 月就被 CISA 加入 KEV 目录的漏洞,CVE-2025-3248。Langflow 的 /api/v1/validate/code 接口缺少鉴权,攻击者可以在没有登录的情况下把任意 Python 代码丢进去执行。Sysdig 给出的 CVSS 评分是 9.8,这几乎就是「谁都能来跑代码」的级别。
但接下来发生的事情比漏洞本身更值得看。
攻击者通过 Langflow 的 RCE 入口,连续投递了超过 600 个 Base64 编码的 Python 载荷。这些载荷不是冷冰冰的 shellcode,而是带自然语言注释的代码。Sysdig 的研究员在Payload里看到了目标优先级说明、执行步骤说明,以及失败时的处理思路。正常人写勒索脚本不会这样写,但让 LLM 生成代码时,这种「边解释边干活」的风格反而很常见。
第一阶段是情报收集。JADEPUFFER 会执行 id、uname -a、hostname、ps aux 这类基础命令,把系统环境摸清楚。然后它开始在本地翻箱倒柜,搜索 OpenAI、Anthropic、DeepSeek、Gemini 的 API Key,也找 AWS、Google Cloud、Azure、阿里云、腾讯云、华为云的凭证。Langflow 这种平台通常会在环境变量或配置里堆满这些钥匙,所以一旦被打穿,后果就不只是这一台机器的事了。
第二阶段,它把目光转向了内部的其他服务。MinIO 默认用了 minioadmin:minioadmin 这套账户密码,JADEPUFFER 一试就中。它从 MinIO 里读走了 credentials.json 和 .env 文件,继续扩大战果。与此同时,它还给受害机加了一个 cron 任务,每 30 分钟访问一次 45.131.66[.]106:4444/beacon,用来保持存活。
到这里为止,它其实还在第一个受害者里打转。真正让我注意到这个事件的是它后面的横向移动。它没有止步于 Langflow 这台机器,而是盯上了另一台暴露在公网的 MySQL 和 Nacos 生产服务器。为了拿下 Nacos,它同时用了 CVE-2021-29441 这个鉴权绕过、默认的 JWT 签名密钥,以及向 Nacos 数据库里插入后门管理员账号等手段。整个过程很快,但有一个细节特别能说明问题,它在第一次登录 Nacos 管理后台失败后,只花了 31 秒就换了凭据重新登了上去。
31 秒能做什么?一个熟睡中的安全工程师不可能看到告警、起床、开 VPN、查日志、改密码。这几乎就是把人类响应时间按在地上摩擦。
最后阶段,它用 MySQL 的 AES_ENCRYPT() 把 1342 条 Nacos 配置项加密,删掉了 config_info 和 his_config_info 两张表,然后创建了一张叫 README_RANSOM 的表,里面写着一个比特币地址和一个 Proton Mail 邮箱。更狠的是,它后来把几个高价值数据库直接删了,还在注释里写了一句「数据已经备份到 64.20.53[.]230」。
但 Sysdig 追查下来,那台 IP 属于 InterServer 的一家主机商,并没有发现实际的数据外泄或备份证据。也就是说,受害者就算付了钱,也大概率拿不回数据。密钥本身是随机 UUID 拼出来的,只打印过一次到标准输出,攻击者自己也没保存。这不是传统的「给钱就解密」的生意,而更像是一次一次性破坏。
为什么它是「AI Agent」做的,而不是高级脚本
Sysdig 给出四条判断依据,我认为最硬的是下面这条。
第一,代码里有大段的自我叙事。这些载荷不是「静默执行、删日志走人」的风格,而是会解释自己现在在做什么、下一步要做什么、为什么这样排序。人类红队写工具时通常不会把这么多内心戏写进脚本,但让 Claude 或 GPT 这类模型生成代码时,这种结构几乎是默认输出。
第二,它对失败的修复速度是机器级的。Nacos 登录失败后 31 秒重试成功;MinIO 返回 XML 而不是 JSON 时,它立刻调整了解析方式;MySQL 删除数据库因为外键约束失败,它直接执行 SET GLOBAL FOREIGN_KEY_CHECKS=0 再删一次。这些动作本身不是难点,难点在于它们不需要人类指挥。Agent 在几秒内就完成了判断、改代码、再执行。
第三,它能理解被植入的上下文信息。Sysdig 观察到,攻击载荷里的目标描述用了大量自然语言,Agent 能根据这些描述在不同会话之间保持一致性。比如对 Nacos 的打法、对数据库的操作,前后隔了几周仍然没有偏离初始目标。这说明它有一个相对稳定的计划层,而不是每次都重新生成一个孤立脚本。
第四,比特币地址本身很有意思。它用的是 3J98t1WpEZ73CNmQviecrnyiWrnqRhWNLy,这个地址最早出现在比特币官方文档的 P2SH 示例里。人类攻击者一般不会从文档示例里复制地址,但 LLM 在生成内容时却可能从训练数据里「回忆」起一个经典例子。当然,这也可能是攻击者故意复用一个旧地址来混淆追踪,但不管怎么说,它增加了「这不是人类常规操作」的可信度。
综合这些点,Sysdig 的判断是,JADEPUFFER 不是传统意义上的 APT,也不是一个写死的勒索工具,而是一个 Agentic Threat Actor,也就是由 Agent 驱动的威胁实体。它把攻击技能的下限直接拉到了「能运行一个 Agent 的成本」。如果这台 Agent 本身是通过偷来的云凭证跑起来的,那攻击者的成本几乎为零。
这件事为什么值得开发者认真对待
我平时写 AI Agent 相关的文章,关注的都是 LangGraph、MCP、工具调用、规划能力这些正向能力。但 JADEPUFFER 提醒我,Agent 的反面和正面是同一套能力。你让 Agent 能读文档、调 API、自我修复,它就能用同样的能力去扫描漏洞、横向移动、加密数据库。
Langflow 的倒下尤其值得注意。它本身是一个可视化的 LLM 工作流编排平台,开发者用它把 Prompt、RAG、工具调用串起来。这种平台通常有几个特点,第一,它必须对接大量外部服务,所以密钥和配置高度集中;第二,它的工作流节点经常允许执行代码;第三,用户为了图方便,很容易把它直接暴露在公网。这三点组合在一起,就成了 Agent 攻击者眼中的高价值目标。
你想想看,如果你的 Langflow 实例被拿下,攻击者不仅拿到了你所有 API Key,还能利用这些 Key 继续调用 OpenAI、Anthropic 的服务,甚至可能用这些服务跑更多 Agent。这就是「用 Agent 打 Agent」的雏形。
再往后看,Nacos 和 MinIO 的沦陷也说明了另一个问题。很多 AI 团队在搭环境时,把注意力都放在模型选型、RAG 效果、推理成本上,对中间件的安全配置往往很敷衍。默认密码、默认 JWT 密钥、公网暴露、数据库 root 直连,这些老问题在新场景里一个都没少。AI 基础设施的复杂度越高,这些薄弱环节被利用的概率就越大。
我自己在搭实验环境时也犯过类似的懒。为了省事,MinIO 的默认账户、Nacos 的默认密钥、MySQL 的 root 空密码,我都用过。看完这个报告之后,我第一件事就是把所有实验环境的默认密码全改了。这不是危言耸听,而是这些服务一旦成为 Agent 的目标,攻击速度会比人类脚本快一个数量级。
为什么这件事不是简单的旧瓶装新酒
有人可能会觉得,这不就是传统 APT 加了个 LLM 吗?把漏洞利用、横向移动、加密的脚本让 GPT 写一遍,效果是一样的。坦率的讲,我一开始也这么想过。但看完全部证据后,我觉得区别不只是谁写代码,而在于失败后谁来改。
传统脚本再精巧,也得由人来维护。遇到环境变化、返回格式不对、登录凭据过期,脚本会卡死,攻击者得上线手动修。而 Agent 的不同在于,它能根据返回结果自己做决策。MinIO 返回了 XML,它改解析;Nacos 登录失败,它换密码;MySQL 外键报错,它关约束。这些动作不是写死在脚本里的分支判断,而是模型根据上下文实时生成的。
这就带来一个变化,攻击链的弹性变高了。人写的工具通常只会打预设好的目标,而 Agent 可以一边打一边学。它不是拿着一张地图去找宝藏,而是走进迷宫后自己画地图。虽然 JADEPUFFER 的目标范围还比较窄,但这个能力本身值得关注。
再往后想一步,如果攻击者给 Agent 装上一个工具箱,里面塞满 CVE 利用、端口扫描、凭据填充、数据库操作这些工具,它就能在侵入网络后自主决定下一步。人类红队可能要做几个小时甚至几天的决策,Agent 几分钟就能试完。到那时,攻防双方的节奏会被完全拉开。
不只是勒索,更像是对 AI 基础设施的一次警告
JADEPUFFER 真正让人警醒的,不是它造成了多大损失,而是它暴露了一个事实,很多 AI 团队的实验环境,安全水平根本跟不上 Agent 的能力。Langflow、Nacos、MinIO 这些组件本身不是给外部攻击者设计的,但组合在一起,再加上默认配置和公网暴露,就成了 Agent 的靶场。
我们平时做 Agent 项目,关注的是它能不能自动完成任务,却很少问它有没有被限制在最小权限里。JADEPUFFER 提醒我们,这个最小权限问题在 Agent 时代会被放大。一个被攻陷的 Agent 可以调用另一个 Agent,一个泄露的 API Key 可以启动更多 Agent,成本像滚雪球一样扩大。
所以我不把它当成单纯的勒索新闻,而是当成一次基础设施安全压力测试。它测出了我们在热情拥抱 Agent 时落下的功课。
防御侧应该怎么办
Sysdig 在报告里给了一些建议,我结合自己的理解,挑几条最实用的说。
第一,把 Langflow 升级到 1.3.0 以上。CVE-2025-3248 的修复版本就是 1.3.0,而且不要把这个验证接口挂在公网。任何能执行代码的端点,默认都应该在内网或者通过 VPN 访问。
第二,管好 Nacos。如果你在生产环境用了 Nacos,务必换掉默认的 token.secret.key,而且不要把 Nacos 暴露在公网。Nacos 连自己数据库都不应该拿 root 身份跑。JADEPUFFER 能在 Nacos 上成功,很大程度上是因为默认配置和过度授权。
第三,清除所有默认凭据。MinIO 的 minioadmin:minioadmin 是教科书级例子。类似的还有 Redis 无密码、MySQL root 空密码、各种管理后台的默认账号。这些配置在 AI 实验环境里司空见惯,但在 Agent 时代,它们就是敞开的门。
第四,把密钥从环境变量里迁到 Vault 里。集中管理、按需签发、定期轮换、最小权限,这些话说了很多年,但真正做到的不多。Agent 时代会让凭证泄露的放大效应变得更大,因为一次泄露可能被用来跑成百上千次自动化操作。
第五,做网络分段和 egress 控制。JADEPUFFER 的持久化是每 30 分钟访问一个外网 IP。如果内网机器默认不能主动出站,这个 cron 任务就会失败,攻击链也会被打断。同样,Langflow 这种机器不应该能直接连到生产数据库,中间至少要有网络隔离和审计。
第六,关注运行时检测。传统的基于签名的杀毒和 IDS 对 Agent 生成的载荷效果有限,因为每次生成的代码可能都不一样。但 Agent 的「自我叙事」反而是一个可检测的特征。如果你看到某个进程在系统里执行大量带自然语言注释的 Python 脚本,或者看到一个服务账户在几秒内连续尝试多种登录方式,这就应该触发告警。未来的检测系统,可能要专门识别「Agent 行为模式」,而不是只盯着已知病毒特征。
第七,也是我觉得最容易被忽视的一条,做好配置备份。Nacos 那 1342 条配置项被加密,如果没有离线备份,业务恢复时间会被无限拉长。Agent 的攻击不会因为你有备份就停手,但备份能把损失从「毁灭级」降到「麻烦级」。
第八,限制 Agent 能调用的工具范围。很多人在设计 Agent 时,为了让它更万能,会把一堆工具都塞给它,读取数据库、调用外部 API、执行本地命令、访问文件系统。你想想看,这等于把一整串钥匙挂在它脖子上。正确的做法是每个 Agent 只配最小工具集,读取和写操作要分开,执行系统命令的工具要有独立授权和审计。
第九,保留完整审计日志。JADEPUFFER 能这么快完成横向移动,一个重要原因是它没有遇到足够的日志覆盖。如果 Langflow、Nacos、MySQL、MinIO 的访问日志能被统一收集和实时告警,很多动作在 31 秒内就能被发现。日志不是事后取证的摆设,而是实时防御的眼睛。
最后的感受
JADEPUFFER 不是终点,它更像是一个信号。勒索攻击从「人写脚本」变成「Agent 自己跑」,这个转变的速度比很多人预期的要快。我在读报告的时候,一方面觉得这种技术能力确实惊人,另一方面又有点后怕。后怕的不是 Agent 会变坏,而是我们现在的 AI 基础设施里还有太多默认配置、默认密码、公网暴露的实验服务,这些东西在 Agent 面前根本撑不住。
Channing 之前跟我聊过一个观点,Agent 的安全边界不是模型本身,而是它能看到和能调用的东西。如果你把一堆密钥和外部 API 塞给 Agent,却没有做权限隔离,那它就像一辆没有刹车的跑车。跑得快是真的,撞起来也是真的。
说到底,JADEPUFFER 给开发者的教训不是「不要碰 AI Agent」,而是「别把搭实验环境的侥幸心理带进生产」。先把默认密码改了,把端口藏好,把密钥锁进 Vault,把网络分清楚。这些听起来很基础,但基础才是 Agent 时代的第一道防线。
毕竟,当攻击者也用上了 Agent,谁的基础安全做得更好,谁就能多活 31 秒。





