Bee-Box(비박스) CSRF(Transfer Amount)

Bee-Box(비박스) CSRF(Transfer Amount)

 

송금은 중요기능이며, 중요기능을 구현할 때는 반드시 정상적인 절차에 따른 요청인지 확인(Token 사용)하고, 요청 주체를 확인하는 로직이 반영(재인증,재인가)되어야합니다.

(1) Bee-Box에서 http://beebox/ 사이트로 이동하여 로그인합니다.(bee/bug)

bWAPP 로그인(bee계정)

 

(2) Cross-Site Request Forgery(Transfer Amount)로 이동합니다.

 

(3) 서버로 전달되는 내용을 확인합니다.

=> 개발자도구(F12)에서 소스코드를 확인

=> GET방식 http://localhost/bWAPP/csrf_2.php?account=123-45678-90&amount=0&action=transfer

⇒ 요청 절차와 요청 주체를 확인하는 정보는 서버로 전달되고 있지 않음 

⇒ 요청 처리에 필요한 값만 서버로 전달하고 있음

 

(4) 브라우저 창에 아래 주소를 요청합니다.

http://localhost/bWAPP/csrf_2.php?account=010-202312-21&amount=100&action=transfer

=> 금액이 줄어들었음.

=> account로 100 EUR을 송금한다는 의미

=> 로그인한 사용자의 계좌에서 amount 만큼의 돈이 빠져나감

 

게시판에 아래와 같은 코드를 추가하면 해당 게시물을 열람하는 사용자의 계좌에서 공격자 계좌로 100EUR씩 빠져나가는 문제가 발생합니다.

<iframe src="http://beebox/bWAPP/csrf_2.php?account=공격자계좌&amount=100&action=transfer" width="0" height="0"></iframe>

=> 해당 사이트는 자동화된 요청을 검증하지 않고 요청을 처리하기 때문에 CSRF 취약점이 존재합니다.

 

(5) 추가적으로 브라우저 창에 아래 주소를 요청합니다.

http://localhost/bWAPP/csrf_2.php?account=010-202312-21&amount=-1000&action=transfer

=> 금액이 늘어났음

=> 원래 송금이라는 것은 내 계좌에서 돈이 빠지고, 받는 사람 계좌에 돈이 들어가야함

=> amount에 음수 값을 넣어 요청하게 되면 내 계좌에서 돈이 들어오고, 받는 사람 계좌에서 돈이 빠져나감

=> 숫자 데이터를 검증하지 않아서 발생하는 문제(입력값 검증 부재)