CSRF
- CSRF는 임의 이용자의 권한으로 임의 주소에 HTTP 요청을 보낼 수 있는 취약점
- 동작하기 위해서 공격자의 악성 스크립트를 이용자가 실행해야 한다
-> 공격자가 메일을 보내거나 글을 작성해 이용자가 조회하도록 유도
- XSS와 동일하게 클라이언트 대상 공격이며 악성 스크립트 페이지 접속을 유도해야 한다
- 하지만 CSRF는 이용자가 임의 페이지에 HTTP 요청을 보내게 하는 것이 목표!
❗Security
- Referrer 검증을 통해 백엔드 단에서 domain 일치 여부를 확인하여 방어 가능하지만 동일 도메인 내의 페이지에 XSS 취약점이 있다면 여전히 취약
- CSRF Token 사용을 통해 대부분 방어가 가능하지만 마찬가지로 동일 도메인 내 XSS 취약점 존재 시 취약
❗Detour
- POST 메시지에 대해서만 CSRF 검증을 하는 경우(GET으로 요청 보냈더니 요청 받아짐)
- CSRF Token 검증할 때 값을 비교하는게 아니라 존재 유무로 검증하는 경우(아무 token 넣었더니 우회)
- 다른 사람의 Token을 넣었는데 우회가 되는 경우(세션과 token이 묶여있지않음)
- 이미 사용된 Token이 재사용 되는 경우
- Token을 POST 메세지 본문과 쿠키에 같이 전송되서 그 둘이 같은지 검사하는 경우(페이지에 쿠키를 설정하는 기능이 존재 한다면 쿠키에 아무 token을 넣고 csrf 페이로드에 같은 token을 넣어두면됨)
- Referer 헤더가 존재하는지만 검증하는 경우
- Referer 헤더 검증시 단순히 URL에 문자열 포함여부만 확인하는 경우(공격자가 개인서버 도메인에 타겟 도메인을 서브도메인으로 사용할 경우 우회가능)
- XSS 취약점이 존재해서 Token이 탈취되는 경우 등