漏洞概述 标题: Password-reset tokens use account-activation lifetime, ignoring RESET_PASSWORD_CODE_LIVES 描述: 密码重置令牌在生成时使用了账户激活的生命周期( ),而不是 。这意味着令牌的生命周期在生成时就被硬编码为账户激活的生命周期,而不是重置密码的生命周期。当管理员配置了更短的重置密码窗口(例如10分钟)时,重置令牌仍然可以在整个激活生命周期内被利用。 影响范围 受影响组件: - — (第39行) - — (第132行) - — (第426-439行) 和 (第621行) 影响: - 管理员设置 短于 以限制暴露窗口,但不会获得任何安全收益。 - 重置令牌在整个激活生命周期内有效(默认3小时),给攻击者提供了更大的时间窗口来利用截获的重置邮件。 - 重置邮件会误导用户,广告一个从未执行的更短过期时间。 - 所有密码重置操作都受到影响,没有每个用户或每个请求级别的正确过期令牌。 修复方案 选项1:添加一个 感知的生成函数(推荐) 引入一个专用的代码生成路径,传递 而不是 : 更新 以通过接口暴露这一点: 更新 以调用它: 选项2:验证提取的生命周期是否超过配置的最大值 在 或重置特定的验证函数中添加一个后提取检查,以拒绝嵌入生命周期超过 的令牌: 这是一种纵深防御措施,但不修复根本原因;选项1是首选。 概念验证 (POC)