上一篇文章《放弃跟风AI炒作,n8n才是 “偷懒神器”》分享了一个每天自动抓取漏洞通告的案例,截图里就有两个关于n8n的安全漏洞。今天我们来一起看下这个漏洞——CVE-2026-0863,看似是简单的沙箱逃逸,却可能让攻击者直接接管你的n8n实例,尤其对常用Python代码节点的同学来说,风险极高。
本文将从漏洞本质切入,拆解n8n执行Python代码的核心原理,再结合官方Docker镜像部署场景,手把手教你用External模式规避风险,最后总结全套最佳实践,新手也能轻松看懂、落地。
先给大家划重点,这个漏洞的核心信息的一句话总结:n8n的任务执行器(Task Runner)存在沙箱逃逸,已认证用户可绕过限制,执行任意Python代码,严重时可完全接管n8n实例。
具体细节拆解,帮你快速判断自身风险:
n8n对Python代码块的沙箱限制有“盲区”——只拦截直接调用的危险代码,却没防范「字符串格式化+异常处理」的组合套路,攻击者可通过这种方式绕开检测。
无需管理员权限,只要是具备基础权限的已认证用户,使用Internal执行模式,就能触发漏洞。
Internal模式(代码直接在n8n主进程环境执行):风险极高,恶意代码可执行系统命令、窃取敏感配置,最终接管n8n实例;
External模式(如官方Docker镜像部署):风险降低,代码仅在独立Sidecar容器内执行,不会直接影响主进程,但仍有安全隐患。
漏洞的详细分析可以看下这篇文章:https://xz.aliyun.com/news/91310
如果你当前用的是Internal模式执行Python代码,且未修复该漏洞,一定要立即整改!即使你只是部署在自己电脑上,自己一个人用,也保不齐哪天你不知从哪里请回来一段“惊艳”的代码。
要搞懂漏洞风险,先得明白n8n是怎么跑Python代码的,整体逻辑分为“沙箱限制+两种执行模式”,用通俗的话拆解如下:
不管哪种模式,n8n执行Python代码都要经过3个核心步骤,漏洞就出在“沙箱检测”环节:
用户在Code节点编写Python代码;
n8n沙箱模块对代码进行静态检测,拦截直接调用的危险函数(如os、subprocess);
根据执行模式,选择在主进程环境(Internal)或Sidecar容器(External)执行代码,最终返回结果。
而CVE-2026-0863,就是攻击者利用“字符串格式化+异常处理”,绕开了第二步的沙箱检测——比如用f-string构造恶意代码,嵌入异常信息中,再通过exec执行,沙箱根本识别不了这种“间接调用”。
对大多数用官方Docker镜像部署n8n的同学来说,External模式是规避该漏洞的最优解——官方默认支持,只需简单配置就能启用,步骤详细可落地,全程复制命令和文件即可。

# 停用之前的n8n,不要删除volumedocker stop n8ndocker rm n8n# 创建文件夹mkdir n8ncd n8ntouch docker-compose.ymltouch n8n-task-runners.jsonservices:n8n:image:n8nio/n8n:latestcontainer_name:n8n-mainenvironment:-N8N_RUNNERS_MODE=external-N8N_NATIVE_PYTHON_RUNNER=true-N8N_ENABLE_EXECUTE_COMMAND=true-N8N_RUNNERS_BROKER_LISTEN_ADDRESS=0.0.0.0-N8N_RUNNERS_AUTH_TOKEN=your-secret-here-N8N_DEFAULT_LOCALE=zh-CN-N8N_SECURE_COOKIE=false-GENERIC_TIMEZONE="Asia/Shanghai"-TZ="Asia/Shanghai"ports:-"5678:5678"volumes:-n8n_data:/home/node/.n8n-~/dist:/usr/local/lib/node_modules/n8n/node_modules/n8n-editor-ui/disttask-runners:image:n8nio/runners:latestcontainer_name:n8n-runnersenvironment:-N8N_RUNNERS_TASK_BROKER_URI=http://n8n-main:5679-N8N_RUNNERS_AUTH_TOKEN=your-secret-here# 允许引用Python标准库-N8N_RUNNERS_STDLIB_ALLOW=*volumes:# 挂载配置文件,默认情况下不会识别N8N_RUNNERS_STDLIB_ALLOW这个环境变量-./n8n-task-runners.json:/etc/n8n-task-runners.jsondepends_on:-n8nvolumes:n8n_data:# 默认会创建带n8n前缀的新卷# 如果要引用之前创建的卷,取消下面的注释# external: true{"task-runners": [ {"runner-type": "javascript","workdir": "/home/runner","command": "/usr/local/bin/node","args": ["--disallow-code-generation-from-strings","--disable-proto=delete","/opt/runners/task-runner-javascript/dist/start.js" ],"health-check-server-port": "5681","allowed-env": ["PATH","GENERIC_TIMEZONE","NODE_OPTIONS","N8N_RUNNERS_AUTO_SHUTDOWN_TIMEOUT","N8N_RUNNERS_TASK_TIMEOUT","N8N_RUNNERS_MAX_CONCURRENCY","N8N_SENTRY_DSN","N8N_VERSION","ENVIRONMENT","DEPLOYMENT_NAME","HOME" ],"env-overrides": {"NODE_FUNCTION_ALLOW_BUILTIN": "crypto","NODE_FUNCTION_ALLOW_EXTERNAL": "moment","N8N_RUNNERS_HEALTH_CHECK_SERVER_HOST": "0.0.0.0" } }, {"runner-type": "python","workdir": "/home/runner","command": "/opt/runners/task-runner-python/.venv/bin/python","args": ["-I", "-B", "-X", "disable_remote_debug", "-m", "src.main"],"health-check-server-port": "5682","allowed-env": ["PATH","N8N_RUNNERS_LAUNCHER_LOG_LEVEL","N8N_RUNNERS_AUTO_SHUTDOWN_TIMEOUT","N8N_RUNNERS_TASK_TIMEOUT","N8N_RUNNERS_MAX_CONCURRENCY","N8N_SENTRY_DSN","N8N_VERSION","ENVIRONMENT","DEPLOYMENT_NAME","N8N_RUNNERS_STDLIB_ALLOW" ],"env-overrides": {"N8N_RUNNERS_EXTERNAL_ALLOW": "" } } ]}
执行以下命令,启动n8n及执行器容器:
# 启动容器docker compose up# 查看日志无报错之后,按d转入后台# 后续观察日志docker compose logs -f n8n
使用官方镜像部署,只要Python代码能执行成功,肯定就是在Sidecar容器中执行的:
访问n8n:打开浏览器,输入http://<ip-address>:5678;
创建测试工作流:新建工作流,添加Code节点,节点类型选择Python;
执行有输出结果无报错即生效。

修复漏洞、启用External模式只是基础,结合以下最佳实践,能进一步降低安全风险,避免被攻击者利用:
无论是否修复漏洞,都建议用External模式执行Python代码——通过Sidecar容器隔离,即使出现沙箱逃逸,也不会影响n8n主实例和宿主服务器。
定期拉取n8n和Sidecar最新镜像,及时修复已知漏洞(包括CVE-2026-0863),更新命令:
docker compose pulldocker compose up -d给n8n用户分配最小权限:仅给需要使用Code节点的用户开放权限,禁止普通用户使用Python代码节点,从源头减少漏洞触发可能。
定期查看Sidecar容器的运行日志,监控异常代码执行行为——若出现未知的系统命令调用、敏感路径访问,及时排查是否有恶意攻击。
即使启用External模式,也不要在Python代码中编写危险操作(如删除文件、调用系统命令),避免意外风险。
CVE-2026-0863漏洞的核心风险,在于n8n沙箱限制的“盲区”,而规避风险的关键,就是理解n8n Python执行原理,用对执行模式。
对官方Docker部署的用户来说,启用External模式是最简单、最有效的防护手段——无需复杂开发,只需修改配置、重启服务,就能实现容器级隔离,大幅降低漏洞影响。
最后提醒:安全防护没有一劳永逸,定期更新镜像、限制权限、监控行为,才能真正保障n8n实例的安全运行。