로그인된 유저에게 공격자가 원하는 요청을 유도하는 공격 기법

로그인 유저가 admin과 같은 권한을 가지면 큰 피해를 입을 수 있음.

어떤 방식으로 특정 유저에게 요청을 유도할까?

모든 요청 유도는 서비스의 구현 취약점을 찾은 후 취약점을 기반한 위조 트랩을 만드는 방식임.

취약점 1. GET 요청 URI에 행위가 나타나는 케이스

https://www.abcdefg.com/delete/1 경로가 1번 게시글을 지우는 URI며, 이 경로는 admin에게만 인가 권한이 주어진다고 가정하자.

BUT, GET 요청 URI 행위 취약점을 통해 해커가 admin에게 저 경로를 실행하게 할 수 있다.

공격 과정

  1. 위 주소 요청을 보내는 HTML 태그를 만듦
  2. 해당 태그를 이메일, 공개된 게시판 등을 통해 delete 권한이 있는 유저에게 보냄.

보안 대책

GET 요청 URI일 때 CRUD 중 상태를 변경하는 요청(Read를 제외한 CUD)에 대한 행위가 들어가면 안 된다.

사례

2008년 옥션이 당했던 방식. 옥션 계정 비밀번호를 변경하는 로직이 URI 쿼리 파라미터 기반이었고, 해커가 <img src>에 비밀번호 변경 URI를 심어 admin 계정에 이메일을 보냄으로써 공격에 성공했다.

취약점 2. Form 요청 hidden

상태를 변경하는 요청(CUD)을 POST Form 방식으로 처리하면 안전할까?

ㄴㄴ POST Form 요청도 CSRF 공격으로부터 안전하지 않음.

공격 과정

  1. 공격자는 값을 hidden type 파라미터에 담은 Form 태그를 만듦.