本仓库包含一个概念验证(PoC),演示了影响 NativeAuthenticationStrategy.authenticate() 方法的时序攻击。
该 PoC 作为博客/研究用途的技术演示提供。
当用户不存在时,身份验证逻辑会立即返回,而当用户存在时,则会执行开销较大的密码哈希验证。
const user = await this.userService.getUserByEmailAddress(ctx, data.username);
if (!user) {
return false;
}
const passwordMatch = await this.verifyUserPassword(ctx, user.id, data.password);
这导致对已存在用户和不存在用户进行身份验证尝试时,存在可测量的时间差异。
通过多次请求测量响应时间,攻击者可以可靠地判断某个用户名(电子邮件地址)是否存在。
该 PoC 对每个用户名执行多次身份验证尝试,并计算平均响应时间,以将账户分类为:
python3 exploit.py -u http://target.tld -w users.txt
该工具会自动附加易受攻击的端点:
/admin-api?languageCode=en
-u, --url 目标基础 URL
-w, --wordlist 用户名/电子邮件字典
--silent 静默模式(仅显示进度和有效用户)
--shuffle 测试前打乱字典顺序
--delay MIN:MAX 请求之间的随机延迟(毫秒)
--resume state.json 恢复之前的扫描
--json results.json 将结果导出为 JSON
--delay 有助于避免被检测和速率限制。本概念验证仅用于授权的安全测试和教育目的。 作者对滥用行为不承担任何责任。