文章总结: 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,云安全
【漏洞分析】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)》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。








评论