前端进阶之旅前端进阶之旅
基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
AI 篇
原理篇
每日一题
小程序题库
知识卡片NEW
  • 历年面经按年份追踪真实考点
  • 算法题库NEW在线编码即时判题
  • 专项自测100 题快速查漏
  • 业务场景题真实业务问题与追问
  • 查漏补缺常见问题解析
  • AI 模拟面试NEW模拟真实面试 + 报告
  • 前端基础
    • HTTP从报文一路讲到 HTTPS
    • 浏览器渲染、事件循环、进程
    • 计算机基础Linux、网络、操作系统
  • 进阶专项
    • 设计模式23 种模式怎么用
    • 前端系统进阶学习大型项目工程化
    • 前端综合文章长期沉淀的实践文
  • 工程与工具
    • Node学习指南从环境搭建到服务端
    • NPM工作流script、依赖与发布
    • Docker容器化部署上手
    • Canvas图形与动画实战
  • 路线与导图
    • 思维导图知识点全景图
    • 学习路线按图索骥不跑偏
    • AI 定制路线NEW按你的简历现排
    • AI 知识地图NEW串起全站知识点
  • 动态
    • AI 热点NEWAI 每日动态
    • 公众号动态公众号历史文章
    • 博客动态站长的技术博客
    • 开发者导航常用工具与文档站
AI 助手NEW
旧版
基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
AI 篇
原理篇
每日一题
小程序题库
知识卡片NEW
  • 历年面经按年份追踪真实考点
  • 算法题库NEW在线编码即时判题
  • 专项自测100 题快速查漏
  • 业务场景题真实业务问题与追问
  • 查漏补缺常见问题解析
  • AI 模拟面试NEW模拟真实面试 + 报告
  • 前端基础
    • HTTP从报文一路讲到 HTTPS
    • 浏览器渲染、事件循环、进程
    • 计算机基础Linux、网络、操作系统
  • 进阶专项
    • 设计模式23 种模式怎么用
    • 前端系统进阶学习大型项目工程化
    • 前端综合文章长期沉淀的实践文
  • 工程与工具
    • Node学习指南从环境搭建到服务端
    • NPM工作流script、依赖与发布
    • Docker容器化部署上手
    • Canvas图形与动画实战
  • 路线与导图
    • 思维导图知识点全景图
    • 学习路线按图索骥不跑偏
    • AI 定制路线NEW按你的简历现排
    • AI 知识地图NEW串起全站知识点
  • 动态
    • AI 热点NEWAI 每日动态
    • 公众号动态公众号历史文章
    • 博客动态站长的技术博客
    • 开发者导航常用工具与文档站
AI 助手NEW
旧版
返回 AI 情报前线
All News · 全部资讯8655
  • Jev:按输入计费的决策模型,输出免费
  • Langflow OSS 认证 RCE 漏洞 CVE-2026-17633
  • 小米 MiMo-V2.6 开源:AA 指数最高开源模型
  • xAI发布Grok 4.7:编程强化模型,百万词元2美元起
  • AWS发布Strands Harness:开源Agent框架,Token成本降28%
  • Spec-Driven 开发:摆脱 Vibe Coding 的工程化实践
  • AI 编程助手 CSS 好看但上生产就崩的根因与修复
  • Agent 诊断结果上线前如何验证:分离决策与执行
  • AI编码导致CI成瓶颈?我们重新设计了CI流程
  • 从氛围记忆到确定性自主:AI 原生基础设施设计思路
  • 用 Agent 流程开发简单 SPA 的实战经验
  • AI 生成 React UI 的真实问题:从第二页开始组件漂移
  • vLLM 深度解析:高吞吐 LLM 推理的性能瓶颈
  • AWS 开源 AI 编程助手,成本比 Claude Code 低 45%
  • 用Docker Compose构建可复现的AI Agent评测环境
  • 阿里发布Qwen-Image-2.1:7B开源图像生成编辑模型
  • Benchling 用 Bedrock AgentCore 为多租户 AI Agent 构建深度防御安全架构
  • 苹果Mac mini 2026款:M6/M5 Pro芯片,AI性能最高提升4倍
  • Mac Studio 2026:M5 Ultra 支持最高 512GB 统一内存,可本地运行超大模型
  • Grok 4.7登陆GitHub Copilot,面向Agent化编程
  • AI 安全是工程问题:Agent 堆栈每一层的防护实践
  • Agent 系统的瓶颈不是模型,是架构设计
  • 防御式 Agent 架构:Schema 注入与超时控制
  • 自研研究 Agent 拦截 AI 编程幻觉:文档先行策略
  • 像物理学家一样剪枝 LLM:区块移除的伊辛模型优化
  • Mac mini上的AI开发新范式:OpenClaw与Codex实战
  • Cloudflare Python Workers 正式上线,可用纯 Python 开发边缘应用
  • 浏览器直接给 ESP32 烧录 Claude 写的宏,无需 IDE 或工具链
  • Google 发布 Agent 安全风险报告:5 万美元循环消耗与凭证窃取案例
  • 多 Agent 合规流水线:用 RAG + 自修正架构对抗 WCAG 幻觉问题
  • Anthropic 发布金融领域 Claude 参考智能体套件
  • OpenAI 披露强化学习模型在上下文压缩时插入 Prompt 注入
  • 已加载 32 / 8655
8.0
热点
AI SCORE
技术实践2026-09-22 07:06

Langflow OSS 认证 RCE 漏洞 CVE-2026-17633

dev.to · AI#安全#漏洞#RCE
Editor brief · 编辑速览

Langflow 1.0.0-1.10.3 在开启自定义组件时,认证用户可通过 POST /api/v1/custom_component 执行任意 Python 代码,CVSS 8.5。

文章思维导图
Knowledge map
拖拽缩放
Full translation

完整中文译文

Langflow 是一个开源的低代码平台,用于可视化的构建 LLM 应用和 Agent 工作流。其中的"自定义组件"(Custom Components)功能允许用户直接用 Python 定义组件的行为——而这正是本次漏洞的攻击面。IBM 于 2026 年 8 月 5 日发布的安全公告披露了 Langflow OSS 1.0.0–1.10.3 中的一组问题,CVE-2026–17633 即为其中可通过 /api/v1/custom_component 达成的认证后 RCE。

根因分析——源码级解读

1.1 漏洞端点

出自 langflow/api/v1/endpoints.py(约第 1271 行):

@router.post("/custom_component", status_code=HTTPStatus.OK, include_in_schema=False)
async def custom_component(
 raw_code: CustomComponentRequest,
 user: CurrentActiveUser,
 request: Request,
) -> CustomComponentResponse:
 …
 # 唯一的关卡:"自定义组件功能是否全局启用?"
 if not settings.allow_custom_components and not code_hash_matches_any_template(raw_code.code, all_known):
  raise HTTPException(status_code=status.HTTP_403_FORBIDDEN, …)
 # scan_code_security() 在此处从未被调用
 component = Component(_code=effective_code)
 built_frontend_node, component_instance = build_custom_component_template(component, user_id=user.id)

关键细节并不在于"没有校验",而是校验检查了错误的东西。allow_custom_components 回答的是"该用户是否被允许创建自定义组件",而非"这段代码的内容是否安全"。在生产环境中,LANGFLOW_ALLOW_CUSTOM_COMPONENTS=true 是常见配置,一旦开启,这项检查轻易通过,代码便以零内容审查的姿态流过执行路径。Langflow 确实附带了一个独立的基于 AST 的扫描器 scan_code_security()(详见第 5 节),但该端点的执行路径从未调用过它。

1.2 真正的 bug 在 prepare_global_scope() 中

custom_component() 调用 build_custom_component_template(),进而流入 lfx/custom/validate.py 中的 create_class()。该函数调用 prepare_global_scope(),随后提交的代码会在不远处被执行。

def prepare_global_scope(module):
 exec_globals = globals().copy()
 …
 for node in module.body:
  if isinstance(node, ast.Import | ast.ImportFrom):
   imports.append(node)
  elif isinstance(node, ast.ClassDef | ast.FunctionDef | ast.Assign | ast.AnnAssign):
   definitions.append(node)
  …
 if definitions:
  compiled_code = compile(combined_module, "<string>", "exec")
  exec(compiled_code, exec_globals) # ← exec() 在此发生

该函数遍历提交代码的 AST,仅将 import 语句以及 class/def/赋值语句节点收入 definitions 列表。这就是陷阱所在。

像 os.system(...) 这样的顶层语句,在 AST 层面是一个 ast.Expr 节点。

ast.Expr 不在上面的 isinstance 白名单中 → 被静默丢弃。

然而,放在 class body 中的代码是 ClassDef 节点的一部分——因此当这个 class 被定义时(即 exec() 执行时),其中的代码也随之执行。

# ❌ 模块顶层 — 被识别为 ast.Expr,被 prepare_global_scope() 静默丢弃
import os
os.system("id > /tmp/pwned.txt")
class PocComponent(Component):
 …
# ✅ 位于 class body 内部 — 属于 ClassDef 的一部分,在 exec() 定义类时执行
class PocComponent(Component):
  os.system("id > /tmp/pwned.txt") # ← 在类定义时执行
 …

所以攻击者所需的全部伎俩就是:把 payload 放在 class body 内,而不是模块顶层。不需要编码 tricks,不需要绕过过滤器——只是一个简单的、堪称毁灭性的设计缺陷。

下图是从请求到命令执行的完整路径追踪。

Authenticated user (any privilege level)
 │
 ▼
POST /api/v1/custom_component { "code": "<malicious Python class>" }
 │
 ▼
build_custom_component_template() → create_class()
 │
 ▼
prepare_global_scope() — only ClassDef nodes get collected into definitions/exec target
 │
 ▼
compile_class_code() → exec(compiled_class, exec_globals)
 │
 ▼
Class body executes at definition time → RCE achieved

无需 LLM 介入,无需规避扫描器。一条 HTTP 请求足矣。

扫描器为何未能捕获此漏洞

Langflow 附带了一个独立的基于 AST 的扫描器 scan_code_security(),位于 langflow/agentic/helpers/code_security.py。但它仅接入在 Agentic Assistant 路径(验证 LLM 生成的组件代码)——从 /api/v1/custom_component 根本不会调用它。因此 CVE-2026–17633 实质上并非扫描器绕过,而是利用了一条扫描器从未附着过的代码路径。该扫描器自身的检测逻辑另有一个独立缺陷(缺少 vars() 覆盖导致误判 is_safe: True,编号为 CVE-2026–17632),这是在分析同一代码库时发现的,但属于不同的问题。


缓解建议

  • 升级至 Langflow 1.10.4+,该版本在 custom_component 端点新增了内容校验
  • 在生产环境中将 LANGFLOW_ALLOW_CUSTOM_COMPONENTS 保持为 false,除非确实需要该功能
  • 若必须启用自定义组件,请限制可访问该功能的账户范围
  • 审计容器运行时用户的组权限(gid=0 成员身份),以降低横向移动 / 容器逃逸的攻击面
Original source

本文由 AI 翻译整理自 dev.to · AI,原文版权归原作者所有。

阅读英文原文
上一篇
Jev:按输入计费的决策模型,输出免费
下一篇
小米 MiMo-V2.6 开源:AA 指数最高开源模型