Open Redirect는 애플리케이션이 리다이렉트 대상 URL을 클라이언트가 완전히 조작할 수 있도록 허용함으로써 발생하는 취약점입니다
공격자는 이 취약점을 이용해, 정상 서비스에 의도된 목적지 대신 다른 URL로 사용자를 유도할 수 있습니다
Open Redirect의 방법으로 거론되는 가장 일반적인 공격방법은 피싱 공격입니다
일반적으로 사용자가 본인이 방문하는 URL의 도메인을 보고, 도메인이 유명하면 신뢰할 만한 URL이라고 판단합니다
반면 낯선 URL은 의심하기 쉽고 그만큼 공격 효과는 낮아집니다
즉, 도메인 가치는 낮으면서도 해당 도메인의 Open Redirect 취약점에 노출되어 있으면, 피싱 공격에 취약합니다
예를 들어 사용자는 Open Redirect 취약점이 존재하는 사이트의 URL을 다음과 같이 구성해서 피해자를
사이트로 유도합니다
https://hjy.com/login?returnUrl=https://attacker.com
만약 hjy.com이 자주 접속하는 도메인과 유사하다면,
사용자는 의심 없이 링크를 클릭해 로그인까지 진행할 것입니다
더 치밀한 공격자는 파라미터 값을 인코딩해 URL 길이를 늘리고, 늘어난 길이만큼 사용자의 의심을 줄이려 할 수도 있습니다
Open Redirect는 실제 서버 데이터에 영향을 주는 공격이 아니기 때문에, 중요 보안 취약점으로는 잘 여겨지지 않습니다
서버가 아닌 클라이언트 측에서 발생하는 문제이며, 링크를 클릭한 책임도 전적으로 클라이언트에게 있다는 의견도 있습니다
외부 피싱 사이트로 연결될 수 있는 점이 문제이므로,
화이트리스트 URL을 선정하여 지정된 도메인만 리다이렉트되도록 하거나
절대경로 리다이렉트를 제거하고 상대경로 리다이렉트만 허용하도록 설계합니다
도메인 화이트리스트 로직을 사용해 returnUrl 값이 사전에 정의된 허용 목록에 속하는지 검사해야 합니다
또는 절대경로가 들어올 경우, Redirect("~/Home/Index")처럼 내부 기본 페이지로 강제 리다이렉트되도록 설정합니다