CVE-2026-41571Note 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哈希运算,并与内部的硬编码哈希值匹配。由于两者一致,服务器误认为验证通过,从而返回有效的会话令牌,实现未授权访问。