0x00 背景
密碼修改功能常採用分步驟方式來實現,攻擊者在未知原始密碼的情況下繞過某些檢驗步驟修改用戶密碼。
重置密碼過程一般是首先驗證註冊的郵箱或者手機號,獲取重置密碼的鏈接(一般會包含一串唯一的字符串)或者驗證碼,然後訪問重置密碼鏈接或者輸入驗證碼,最後輸入新密碼。密碼重置機制繞過攻擊是指在未知他人的重置密碼鏈接或手機驗證碼的情況下,通過構造重置密碼鏈接或窮舉手機驗證碼的方式直接重置他人的密碼。
惡意攻擊者可以利用漏洞攻擊做到:
- 重置他人的密碼;
- 利用他人的賬號和密碼進行惡意操作,如偷取金錢、獲取用戶的個人資料等。
0x01 修復思路
- 一次性填寫校驗信息(原始密碼、新密碼等)後再提交修改密碼請求。
- 對客戶端提交的修改密碼請求,應對請求的用戶身份與當前登錄的用戶身份進行校驗,判斷是否有權修改用戶的密碼並對原始密碼是否正確也進行判斷。
- 不應將用於接收驗證信息的手機、郵箱等信息全部明文傳到客戶端,應對手機、郵箱等信息進行屏蔽處理,或不將此類信息返回到客戶端。
- 對原始密碼進行了驗證的情況下,限制輸入原始密碼的錯誤次數,防止攻擊者暴力破解原始密碼。
- 重置密碼鏈接中的關鍵信息應隨機化,不可預測(例如token機制),且禁止將關鍵信息返回到客戶端。
0x02 代碼修復
- 如果是使用第三方的庫,請參考第三方的安全配置。
- 如果是自研代碼,請按照修復思路對代碼進行調整。