Lab: Password reset broken logic

Lab: Password reset broken logic

https://portswigger.net/web-security/authentication/other-mechanisms/lab-password-reset-broken-logic

 

Lab: Password reset broken logic | Web Security Academy

This lab's password reset functionality is vulnerable. To solve the lab, reset Carlos's password then log in and access his "My account" page. ...

portswigger.net

 


사용자 인증 미흡으로 인한 타사용자 비밀번호 초기화 가능성

 

carlos 사용자의 비밀번호 재설정하면 문제 해결

사용자 계정 wiener / peter

피해자 carlos

[기본 설정] 프록시 설정, ACCESS THE LAB의 주소를 Burp Suite에 설정

 

(1) 블로그 내 My account로 이동하여 사용자(wiener)로 로그인합니다.

 

(2) 상단 Email client로 이동합니다.

이 기능은 패스워드 재설정할 때 보통 이메일 인증을 하게 되는데 그것을 테스트해볼 수 있는 것입니다.

Email client

=> 현재는 아무것도 뜨지 않음

 

(3) Forgot password?를 클릭하고 wiener를 입력하고 비밀번호 재설정을 합니다.

(3)-1로그아웃 하고 로그인 화면으로 이동해보면 "Forgot password?"가 있습니다. 그곳에 wiener를 입력합니다.

Forgot password 클릭
wiener 입력
제출확인

 

(3)-2 Email client 사이트를 새로고침해서 확인해보면 비밀번호를 재설성 하기 위한 링크가 있습니다. 링크를 클릭합니다. 

 

(3)-3 비밀번호 재설정을 합니다. (비밀번호 1234로 설정)

비밀번호 재설정

 

(4) wiener를 바뀐 비밀번호로 재로그인 해봅니다.

=> 정상적으로 비밀번호 변경됨

 

(5) 비밀번호 변경 패킷을 확인하여 취약점을 확인합니다. 해당 패킷을 Repeater로 보냅니다.

 

(6) 패킷 내용을 확인합니다.

패스워드를 잃어버렸을 때 생성되는 토큰 값: temp-forgot-password-token

=> temp-forgot-password-token 값이 올바른 사용자인지 아닌지에 대해 체크를 해야하는데 이 부분이 제대로 작동하지 않고 있습니다.

=> 이 토큰 값을 생략하면 사실상 토큰이 토큰으로서의 역할을 제대로 하지 못해서 타사용자의 비밀번호를 변경할 수 있게 됩니다.

=> 보통 취약점 테스트할 때, 토큰이나 세션부분을 제거해보기도 하고 다른 값을 넣어보기도 합니다.

 

(7) token 값 두 개를 지우고 테스트를 진행합니다. (비밀번호 5678로 설정)

=> token과 session과의 비교 검증이 없어서 wiener에 대한 패스워드 변경을 Email client에 만들어지는 링크로 해야하는데 Repeater에서도 바뀌는 것을 확인할 수 있습니다. 

 

(8) wiener를 바뀐 비밀번호로 재로그인 해봅니다.

=> 정상적으로 비밀번호 변경됨

 

(9) 문제 해결을 위해 Repeater에서 carlos의 비밀번호를 변경합니다.

username=carlos, password는 0000으로 설정합니다.

 

(10) 문제해결

carlos로 로그인을 해봅니다. (carlos / 0000)

=> 정상적으로 로그인 됨

=> token 값이 없는데 비밀번호가 변경되는 취약점이 있습니다.

=> session 값 또한 사용자 인증이 필요합니다.

=> 서버에 token에 대한 정보를 저장하고, 이 token이 아니라면 사용자 패스워드를 변경할 수 없도록 설정해야합니다. token이 있어야만 패스워드를 변경할 수 있도록 해야합니다. 안전하게 하기 위해 token에 유효시간/횟수제한을 주고, 값을 서버에 저장합니다. 사용자 비밀번호를 변경할 때 token값과 abc 값을 비교해서 비밀번호를 변경해야합니다.