ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

逾1.2万个Flowise实例暴露在CVSS 10.0远程代码执行漏洞攻击之下:用TaoToken统一Key加固Node.js服务配置

逾1.2万个Flowise实例暴露在CVSS 10.0远程代码执行漏洞攻击之下:用TaoToken统一Key加固Node.js服务配置 1. 当 1.2 万个 Flowise 实例变成“公开靶场”Flowise 是一个基于 Node.js/JavaScript 的开源低代码平台用来拖拽式搭建 LLM 工作流、Agent 和 RAG 应用很多团队拿它当内部 AI 中台的门面。问题在于它默认监听端口、默认允许自定义节点而 CustomMCP 节点会直接解析用户传入的mcpServerConfig字符串并执行其中的 JavaScript——没有沙箱、没有白名单、没有权限降级。CVE-2025-59528 的 CVSS 评分是 10.0意味着攻击者只要拿到一个 API 令牌就能在服务器上调用child_process和fs读文件、执行命令、把环境变量里的密钥全部带走。VulnCheck 披露的攻击活动来自一个 Starlink IP扫描和利用尝试一直在持续。更麻烦的是这是 Flowise 第三个被野外利用的漏洞前两个分别是 CVE-2025-8943CVSS 9.8和 CVE-2025-26319CVSS 8.9。超过 1.2 万个暴露在互联网上的实例等于给攻击者准备了一个巨大的候选池。修复动作本身不复杂——升级到 npm 包的 3.0.6 版本——但真正让安全团队头疼的是漏洞修完了散落在settings.json、.env、容器环境变量里的 OpenAI、Anthropic、各类模型 API Key 还在原地。一个 RCE 就能把这些凭据全部读走然后攻击者拿着你的 Key 去刷别人的账单。所以这篇不是单纯讲“升级版本”而是把两件事绑在一起做先把 Flowise 的暴露面收掉再把模型调用的凭据入口从服务里抽出来统一走 TaoToken 的 Key。这样即使某台 Flowise 实例被攻破攻击者拿到的也只是一个受限的、可随时吊销的统一 Key而不是你所有模型供应商的原始凭据。2. 为什么用 TaoToken 收敛 Flowise 的 Key 入口Flowise 的节点配置里模型连接信息通常以两种形式存在一种是在 UI 里填的 Credential底层落到数据库另一种是直接在 CustomMCP 或自定义工具的代码里硬编码process.env.OPENAI_API_KEY。前者一旦数据库被拖走就全泄露后者一旦代码仓库或容器镜像泄露就全泄露。RCE 漏洞利用成功后攻击者能直接读process.env两种形式都跑不掉。TaoToken 在这里的角色是一个统一的模型调用入口。你可以在 TaoToken 控制台创建 API Key然后把 Flowise 里所有模型节点的 base URL 指向https://taotoken.net/apiKey 统一用 TaoToken 签发的那一个。这样做有三个实际好处第一Flowise 服务里只存在一个 Key泄露后的爆炸半径可控第二你可以在 TaoToken 侧按项目、按环境签发不同的 Key出问题直接吊销某一个不影响其他服务第三模型切换、额度查看、调用日志都在一个地方不用在 Flowise 的 Credential 列表里翻来翻去。需要说清楚的是TaoToken 不是用来替代 Flowise 的它只负责模型调用的鉴权和转发。Flowise 该升级还是要升级该关端口还是要关端口。统一 Key 是纵深防御里的一层不是漏洞修复的替代品。3. 可复制的配置骨架settings.json 与 config.tomlFlowise 的配置入口在不同部署方式下不一样。npm 全局安装时配置通常在项目根目录的settings.json或通过环境变量注入Docker 部署时常用config.toml或docker-compose.yml的 environment 段。下面给两份可直接改的骨架重点是把模型调用的 base URL 和 Key 收敛到 TaoToken。先看settings.json的写法。Flowise 读取模型凭据时很多节点会走环境变量所以这里用process.env的方式注入避免把 Key 写死在 JSON 里{ database: { type: sqlite, path: ./flowise.db }, apiKeys: { openai: { baseURL: https://taotoken.net/api, apiKey: ${TAOTOKEN_API_KEY} }, anthropic: { baseURL: https://taotoken.net/api, apiKey: ${TAOTOKEN_API_KEY} } }, security: { disableCustomMCP: true, allowedNodeTypes: [llm, chain, tool, retriever] } }这里有两个关键点。baseURL指向 TaoToken 的 API 地址Flowise 发出的模型请求会先到 TaoToken再由 TaoToken 转发到实际模型。disableCustomMCP是临时缓解措施如果你暂时没法升级到 3.0.6先把 CustomMCP 节点禁掉能挡住这个特定漏洞的利用路径。allowedNodeTypes是白名单思路只放业务真正需要的节点类型。再看config.toml适合 Docker 或需要版本化管理的场景[server] port 3000 host 127.0.0.1 [database] type postgres connection_string ${DATABASE_URL} [models] provider taotoken base_url https://taotoken.net/api api_key ${TAOTOKEN_API_KEY} timeout 120 [security] disable_custom_mcp true enable_rate_limit true rate_limit_window 60 rate_limit_max 100host 127.0.0.1这一行很重要。很多暴露在互联网上的 Flowise 实例是因为直接监听0.0.0.0并且没有前置反向代理做鉴权。如果你必须对外提供服务至少在前面放一层 Nginx 或网关把/api/v1/之外的路径全部挡掉。环境变量文件.env只放一个 KeyTAOTOKEN_API_KEYsk-你的TaoToken密钥 DATABASE_URLpostgres://user:passlocalhost:5432/flowise注意不要把.env提交到 Git也不要在 Docker 镜像里COPY .env。用docker run --env-file或编排工具的 secret 机制注入。4. 验证请求与暴露面自查配置改完后先验证 TaoToken 这条链路是通的。用 curl 直接打 TaoToken 的 API确认 Key 有效、模型列表能拉到curl -s https://taotoken.net/api/v1/models \ -H Authorization: Bearer $TAOTOKEN_API_KEY \ | head -c 500如果返回模型列表的 JSON说明 Key 和网络都正常。接着在 Flowise 里建一个最小的 LLM 节点base URL 填https://taotoken.net/apiKey 填同一个发一条测试消息。Flowise 的日志里应该能看到请求发往 TaoToken而不是直接发往模型供应商。然后做暴露面自查。先确认 Flowise 版本npm list flowise --depth0如果版本低于 3.0.6立刻升级npm install -g flowise3.0.6再检查监听地址和防火墙规则ss -tlnp | grep 3000如果看到0.0.0.0:3000说明所有网卡都能访问。改成127.0.0.1:3000或者用防火墙只放行内网网段。Docker 部署的话检查docker-compose.yml里的 ports 映射不要写3000:3000改成127.0.0.1:3000:3000。最后扫一遍代码和配置里有没有硬编码的 Keygrep -rn sk- ./ --include*.json --include*.js --include*.toml --include*.env把命中的地方全部替换成${TAOTOKEN_API_KEY}的引用形式。这一步做完即使某台实例被 RCE攻击者能拿到的也只是一个可吊销的统一 Key。5. 本篇常见错排查升级后 CustomMCP 节点报错3.0.6 对mcpServerConfig的解析做了校验之前能跑的配置如果包含动态拼接的 JavaScript 字符串会被拒绝。检查节点配置把mcpServerConfig改成纯 JSON 字符串不要在里面写函数或表达式。TaoToken 返回 401先确认TAOTOKEN_API_KEY环境变量在 Flowise 进程里能读到。Docker 部署时docker exec -it 容器名 env | grep TAOTOKEN看一下。如果环境变量没注入Flowise 会拿空字符串去请求自然 401。Flowise 仍然直连模型供应商有些节点的 base URL 是在 UI 的 Credential 里单独填的不会读settings.json。需要到 Flowise 的 Credentials 页面把每个模型凭据的 base URL 手动改成https://taotoken.net/api。改完后重启 Flowise 让缓存失效。端口改了但外网还能访问检查是否有反向代理或负载均衡把流量转进来了。ss -tlnp只能看到本机监听看不到上游转发。用curl -I http://你的公网IP:3000从外部验证一次如果还能通说明代理层没配好。升级 npm 包后数据库迁移失败Flowise 大版本升级可能带 schema 变更。升级前先备份flowise.db或 Postgres 数据库升级后如果启动报迁移错误回滚数据库再查 release notes。6. 把 Key 收口把端口收口漏洞修复和凭据收敛是两条线但要在同一个维护窗口里做完。升级到 3.0.6 解决的是代码执行路径TaoToken 统一 Key 解决的是凭据泄露后的爆炸半径。两件事都做完Flowise 实例即使暴露攻击者能拿到的也只是一个受限入口。如果你还在用多个模型供应商的原始 Key 散落在各个节点里建议先去 TaoToken 控制台建一个项目专用的 Key把 Flowise 的模型调用切过去。接入文档里有 base URL 和鉴权头的完整说明照着改一遍比事后追查泄露来源省事得多。
返回列表