【漏洞分析】n8nPython代码节点沙箱绕过导致系统命令执行漏洞(CVE-2025-68668)

admin 2026-01-07 02:53:16 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: n8n1.116.0默认在Docker环境启用PyodidePython节点,其沙箱通过替换os.system、js模块及Object.constructor为黑名单函数阻断命令执行;作者发现仍可通过globals()[‘items’]等未过滤属性获取constructor,利用this.constructor.constructor拿到Function构造器完成RCE,演示直接调用os.system执行系统命令,官方已分配CVE-2025-68668并发布补丁,建议立即升级至修复版本并关闭不受信工作流。 综合评分: 85 文章分类: 漏洞分析,WEB安全,安全工具,漏洞POC,云安全


cover_image

【漏洞分析】n8n Python代码节点沙箱绕过导致系统命令执行漏洞(CVE-2025-68668)

原创

whoami0002

SecurityPaper

2026年1月5日 17:05 江苏

文章首发于先知社区:https://xz.aliyun.com/news/91031

#

根据漏洞通告,基于Pyodide的python代码执行漏洞

https://github.com/n8n-io/n8n/security/advisories/GHSA-62r4-hw23-cc8v

我本地环境为n8n 1.116.0版本,默认为false,在docker环境下默认启用的

在Pyodide中,os.system被替换为backed_function,sys.modules[‘js’]被替换为blocked_module(),以及Object.constructor.constructor = blocked_function

调用runPythonAsync执行的代码,都会先执行下面的内容

创建一个工作流,直接搜python

先执行最原始的demo

根据python还是js选择对应的sandbox

这里传入一个this对象,打印一下,我居然能获取到this.constructor.constructor

最终都会被构造成下面图中代码被pyodide.runPythonAsync调用

这里已经进入pyodide的内部了,为了方便,我将这段js代码进行格式化了

这里对返回格式进行格式化,在nodeMode=runOnceForAllItems时必须为数组json格式

看看能否通过global获取constructor

这里编写代码,遍历globals()打印所有能够获取constructor的属性,有很多都能获取到constructor

在黑名单里面的,不可用的

可以绕过黑名单限制的

这里使用items进行测试,在nodejs中我们知道通过获取this.constructor.constructor可以通过Function构造函数来执行任意代码

构建代码,成功执行命令


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:SecurityPaper whoami0002《【漏洞分析】n8n Python代码节点沙箱绕过导致系统命令执行漏洞(CVE-2025-68668)》

评论:0   参与:  0