![任意用户密码修改重置漏洞修复](https://700zi.400zi.cn/uploadfile/img/15/35/3b3868be18080d895528b1ddb1fefb8b.jpg)
0x00 背景
密码修改功能常采用分步骤方式来实现,攻击者在未知原始密码的情况下绕过某些检验步骤修改用户密码。
重置密码过程一般是首先验证注册的邮箱或者手机号,获取重置密码的链接(一般会包含一串唯一的字符串)或者验证码,然后访问重置密码链接或者输入验证码,最后输入新密码。密码重置机制绕过攻击是指在未知他人的重置密码链接或手机验证码的情况下,通过构造重置密码链接或穷举手机验证码的方式直接重置他人的密码。
恶意攻击者可以利用漏洞攻击做到:
重置他人的密码;利用他人的账号和密码进行恶意操作,如偷取金钱、获取用户的个人资料等。
0x01 修复思路
一次性填写校验信息(原始密码、新密码等)后再提交修改密码请求。对客户端提交的修改密码请求,应对请求的用户身份与当前登录的用户身份进行校验,判断是否有权修改用户的密码并对原始密码是否正确也进行判断。不应将用于接收验证信息的手机、邮箱等信息全部明文传到客户端,应对手机、邮箱等信息进行屏蔽处理,或不将此类信息返回到客户端。对原始密码进行了验证的情况下,限制输入原始密码的错误次数,防止攻击者暴力破解原始密码。重置密码链接中的关键信息应随机化,不可预测(例如token机制),且禁止将关键信息返回到客户端。
0x02 代码修复
如果是使用第三方的库,请参考第三方的安全配置。如果是自研代码,请按照修复思路对代码进行调整。